Testdurchläufe - Reservierung

H2O_12
Beiträge: 11
Registriert: So 23. Okt 2011, 20:48

Testdurchläufe - Reservierung

Beitragvon H2O_12 » So 23. Okt 2011, 20:59

Hi,
ich habe mir einen clienten geschrieben, der über Befehlszeilenargumente die Server IP und Port und Strategie bekommt. Wenn ich ihn über ein normales Spiel als manuellen Computerspieler joinen lasse, funktioniert alles soweit. Jedoch wird beim Testdurchlauf mein Client nicht gestartet. Die Befehlszeilenargumente sind : -h 127.0.01 -p 13051 -s test.
Ich vermute das es an der Reservierung liegt, daher meine Frage:
Wie genau verläuft das mit den Reservierungcodes?

mfg

ZeroByte
Beiträge: 25
Registriert: Mi 14. Sep 2011, 21:08

Re: Testdurchläufe - Reservierung

Beitragvon ZeroByte » Mo 24. Okt 2011, 15:18

Moin,

die Befehlszeilenargumente heißen "host", "port" und "reservation" - also die lange Variante ;)

@Reservation: du kriegt die Reservation wie die anderen Parameter auch über die Kommandozeile. Wie du dich mit der anmeldest, findest du im .pdf.


Wenn du C++ benutzt, kannst du meinen Codeschipsel haben (der benutzt boost::program_options):

Code: Alles auswählen

// Declare the supported options.
    po::options_description desc("Allowed options");
    desc.add_options()
        ("help", " possible parameters: host, port, reservation")
        ("host",        po::value<std::string>()   , "defines the host (local or remote)")
        ("port",        po::value<std::string>()   , "determines the port to use")
        ("reservation", po::value<std::string>()   , "contains the reservation code to use")
    ;

    po::variables_map vm;
    po::store(po::parse_command_line(argc, argv, desc), vm);
    po::notify(vm);

    host = vm.count("host") ? vm["host"].as<std::string>() : "localhost";
    port = vm.count("port") ? vm["port"].as<std::string>() : "13050";
    reservation = vm.count("reservation") ? vm["reservation"].as<std::string>() : "";



EDIT: nachgeguckt, welche Variante hier verwendet wird

MfG

Benutzeravatar
Christian Wulf
Beiträge: 27
Registriert: Mi 31. Aug 2011, 05:54

Re: Testdurchläufe - Reservierung

Beitragvon Christian Wulf » Mi 26. Okt 2011, 10:19

die Befehlszeilenargumente heißen "host", "port" und "reservation" - also die lange Variante

Das ist wenigstens in der Javaversion so nicht ganz richtig. Die folgende Codezeile ist aus der Starter.java innerhalb der main-Methode:

Code: Alles auswählen

CmdLineParser.Option hostOption = parser.addStringOption('h', "host");

Sowohl die lange als auch die kurze Schreibweise ist also möglich.

Aber ich vermute auch, dass H2O_12 nicht Java verwendet, da dies, wie gesagt, bereits im Client vorhanden ist. Wenn du Java genug kannst, schau mal in die Starter.java hinein. Dort wird in der main-Methode auch der reservation-Parameter entgegengenommen und dem Konsturktor von der Starter-Klasse übergeben, der wiederum den Reservierungscode an die Methode joinPreparedGame() weitergibt.

Gruß,
Christian

H2O_12
Beiträge: 11
Registriert: So 23. Okt 2011, 20:48

Re: Testdurchläufe - Reservierung

Beitragvon H2O_12 » Fr 28. Okt 2011, 20:13

Also den Reservierungscode über die Befehlszeilenargumente einzulesen ist relativ trivial, jedoch ist bei Testdurchläufen kein Reservierungscode angegeben, sodass ich ihn nicht manuell über die Parameter übergeben kann und keine Testdurchläufe mit meinem Clienten starten kann.

ZeroByte
Beiträge: 25
Registriert: Mi 14. Sep 2011, 21:08

Re: Testdurchläufe - Reservierung

Beitragvon ZeroByte » Sa 29. Okt 2011, 09:10

Bei Testdurchläufen wird für jeden einzelnen Durchlauf ein neuer Prozess aus deinem Programm instanziiert - d.h. dass du sowieso nicht manuell irgendwas übergeben kannst, da du die gar nicht selbst aufrufst.


MfG

H2O_12
Beiträge: 11
Registriert: So 23. Okt 2011, 20:48

Re: Testdurchläufe - Reservierung

Beitragvon H2O_12 » Fr 4. Nov 2011, 21:46

Hm. Mein Client funktioniert super, wenn ich ein Spiel Starte und den einen Computerspieler auf manuell setze und danach den Clienten starte. Jedoch funktioniert das selbe nicht beim Testdurchlauf, obwohl ich die richtigen Befehlszeilenargumente eingegeben habe. Woran könnte das liegen?

Benutzeravatar
Christian Wulf
Beiträge: 27
Registriert: Mi 31. Aug 2011, 05:54

Re: Testdurchläufe - Reservierung

Beitragvon Christian Wulf » Mo 14. Nov 2011, 12:18

Das kann so wage beschrieben natürlich viele Ursachen haben. Hast du schon mal mithilfe von Console.print geschaut, was du als Konsolenparameter erhälst, wenn du deinen Client in einem Testdurchlauf startest? Gib einfach mal alles aus, was args in der Main enthält.

ChristianR
Beiträge: 17
Registriert: So 6. Nov 2011, 13:33

Re: Testdurchläufe - Reservierung

Beitragvon ChristianR » Mi 16. Nov 2011, 15:56

Ich widerrufe meinen Post und behaupte das Gegenteil, ich habe gerade mal die neue "Server-GUI" heruntergeladen.

Ich kann dieses Verhalten leider bestätigen.

Seit der letzten Serverversion "spinnt" die Testdurchlauf-Funktion.

Führe ich meine Plugin.jar Datei ohne Befehlszeilenparameter aus, meldet sich der Client korrekt an.
Sobald ich allerdings Befehlszeilenparameter ergänze wie zum Beispiel "--full_update" (ein eigens hinzugefüger Parameter), wartet der Server endlos lange auf min. einen der Clients.

Nach meinem Logausgaben wird die jar-Datei zwar ausgeführt, allerdings wird der Client mit einer "Connection Refused"-Exception abgewiesen.

Ich habe ein wenig an der Logic-Factory sowie dem CmdLineParser gebastelt und Befehlszeilenargumente konvertiert global über eine statische Klasse zugänglich gemacht. An der ausführenden Logik ändert sich allerdings nichts, ich habe meinen Sourcecode daraufhin nochmal überprüft.

Dessweiteren gibt es auch noch ein weiteres Problem, was vermutlich mit dem vom Server (neue Version vom 8.11.11) geschickten GameResult zusammenhängt.
In der Score-Definition liegt nur noch ein Score-Fragment-Element vor (Name: Punkte, Aggregierung: AVGERAGE). Alle weiteren, vorher vorhandenen Score-Fragmente fehlen nun. Dementsprechend liegt auch nur noch in den PlayerScores in Wert vor.

Dies spiegelt sich in der Statistik für Testdurchläufe durch (dies kann ich noch überprüfen, wenn ich keine Befehlszeilenargumente angebe).

Es gibt nur noch einen Spalteneintrag "Punkte".
Interessanterweise pendelt sich dieser Wert relativ schnell auf 9 Punkte für beide Spieler ein, der Punktewert pro Spiel schwankt nach meinen Beobachtungen zwischen 7 und 13.
Dieser Wert ist definitiv fehlerhaft, da in einem Spiel deutlich mehr Punkte erspielt werden. Auch wenn man als menschlicher Spieler über das Interface gegen die KI spielt, loggt meine KI komplett falsche Werte für den Punktewert.

Irgendwas muss da schief gelaufen sein.


Ich habe nochmal eine neue Jar-Datei der von uns programmierten KI erstellt. Die Jar-Datei lässt sich bis jetzt mit allen getesteten Befehlszeilenargumenten starten: im normalen Spiel wie in Testdurchläufen.
Auch die Statistik arbeitet wieder richtig, die Score-Definition ist so wie ursprünglich vor zwei Versionen.

Dennoch scheint nicht alles reibungslos zu funktionieren.
Die mitgelieferte Jar-Datei manhattan-plugin.jar wird nicht korrekt gestartet. Dies klappt weder im normalen Spiel, noch in Testdurchläufen.
Das nette Fenster "Warte auf Spieler..." erscheint und verschwindet nicht wieder.
Ich gebe keine Parameter an, das Feld ist komplett leer.

Viele Grüße,
Christian Reinbold

chst
Beiträge: 18
Registriert: Mo 14. Mär 2011, 12:25

Re: Testdurchläufe - Reservierung

Beitragvon chst » Do 17. Nov 2011, 11:39

Moin,
ich habe eben noch einmal den aktuellen Server (15.11.11) mit der aktuellen manhattan_player.jar gestartet (nicht manhattan_plugin.jar). Dabei gab es weder bei Einzelspielen noch bei den Testdurchläufen Probleme.

Probiere es doch bitte noch einmal mit manhattan_player.jar (auch keine zip-Datei) und informiere uns über das Testergebnis.

Freundliche Grüße
Christoph

ChristianR
Beiträge: 17
Registriert: So 6. Nov 2011, 13:33

Re: Testdurchläufe - Reservierung

Beitragvon ChristianR » Do 17. Nov 2011, 17:45

Nabend,

ich habe mir die Jar-Dateien vom Simple-Client nochmal runtergladen und es mit der manhattan_player.jar-Datei ausprobiert.

Kopiere ich den lib Ordner mit in das Verzeichnis des manhattan_players, funktioniert alles korrekt.
In dem lib-Ordner liegt auch nochmal eine manhattan-plugin.jar-Datei vor, mit der es nicht funktioniert.

Offenbar ist also nur die player-Datei für den GameServer relevant.
Mich wundert es dann nur, dass die plugin-Datei standardmäßig bei dem Download des GameServers mitgeliefert ist und nicht die player-Datei.

Ist dieses Verhalten der plugin-Datei gewollt oder sollte sie auch eine funktionsfähige KI simulieren?

Viele Grüße,
Christian