Testdurchläufe - Reservierung

SvenK
Beiträge: 114
Registriert: Mo 17. Okt 2011, 08:40

Re: Testdurchläufe - Reservierung

Beitragvon SvenK » Fr 18. Nov 2011, 15:13

Das Plugin-Jar ist nicht der Simpleclient sondern enthaelt alles was der Server braucht, um das Spiel anzubieten. Da wir den Server jedes Jahr wiederverwenden ist alles spielspezifische in das Plugin ausgelagert, so dass wir nur ein neue Plugin hinzufuegen muessen, um ein neues Spiel zu unterstuetzen.

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

Re: Testdurchläufe - Reservierung

Beitragvon ChristianR » Fr 18. Nov 2011, 20:55

Ah okay.

Sorry für die "Verwirrung". Dann passt ja alles.

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

Re: Testdurchläufe - Reservierung

Beitragvon H2O_12 » Mo 5. Dez 2011, 20:16

Also ich bekomme immer folgenden Fehler beim Starten von Testdurchläufen. Der Server gibt dann immer aus:

Code: Alles auswählen

WARN sc.networking.clients.XStreamClient - Client disconnected (Cause REGULAR, Exception: java.io.EOFException)


Daraufhin wird mein Client vom Server getrennt und erhält als Nachricht nur ein

Code: Alles auswählen

<protocol/>
, wobei komischerweise der slash am Ende ist. Das soll anscheinend auf einen Fehler hindeuten. Allerdings kann ich nicht herausfinden, warum der Server mich andaurnd trennt, obwohl der reservation code richtig ist.

SvenK
Beiträge: 114
Registriert: Mo 17. Okt 2011, 08:40

Re: Testdurchläufe - Reservierung

Beitragvon SvenK » Di 6. Dez 2011, 08:01

Gegen welchen Client laesst du Spielen? Tritt das Problem auch auf, wenn nur ein Spiel mit derselben Paarung gespielt wird? Verwendest Du den aktuellsten Server und ggf. SimpleClient?

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

Re: Testdurchläufe - Reservierung

Beitragvon Christian Wulf » Sa 10. Dez 2011, 21:36

Code: Alles auswählen

EOFException
bedeutet erst einmal salopp gesprochen, dass der Stream am Ende angekommen ist (EOF = End Of File). Die Antwort

Code: Alles auswählen

<protocol/>
des Servers ist eine Kurzschreibweise für

Code: Alles auswählen

<protocol>   </protocol>
und sagt aus, dass kein Spiel gestartet und ausgetragen wurde. Sonst enthielte das protocol XML-Element weitere XML-Elemente.

Für genauere Analysen benötigen wir, wie Sven schon sagte, weitere Informationen von dir.

Gruß
Christian

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

Re: Testdurchläufe - Reservierung

Beitragvon H2O_12 » So 11. Dez 2011, 19:47

oh ja. Das fehlende "<protocol>" bei meinem Clienten war die Fehlerquelle. Ich habe beim Login nur den prepared join mit dem Reservierungscode gesendet jedoch das protocol am Anfang vergessen..Nun funktionieren die Testdurchläufe halbwegs. Ein neues Problem, dass sich ergeben hat, ist, dass der Testdurchlauf zwar 100% anzeigt, jedoch nicht stoppt. Im Taskmenager laufen, dann auch n Instanzen meines Programms (n ist die Anzahl der Testdurchläufe) o.O

mind_in_a_box
Beiträge: 15
Registriert: Mi 31. Aug 2011, 19:26

Re: Testdurchläufe - Reservierung

Beitragvon mind_in_a_box » Di 13. Dez 2011, 14:31

Mein Client wird ordnungsgemäß beendet, doch ich habe dafür noch massig an "Cmd.exe" und "conhost.exe" (Host für Konsolenfenster) im TaskManager stehen.
Sind aber allerdings auch keine 100 (Bei 100 Testdurchläufen), sondern weniger. Je um die 50 werden es schon sein denke ich.

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

Re: Testdurchläufe - Reservierung

Beitragvon H2O_12 » Do 15. Dez 2011, 10:35

Beim normalen Durchgang bekomme ich am Ende ungefähr folgende Antwort vom Server:

Ich sende den letzten Zug:
<room roomId="baae82af-5074-4348-be41-f8aeb73b97fa">
<data class="manhattan:build" city="1" slot="0" size="1"/>
</room>


Mein Programm gibt mir folgende zusätzliche Ausgaben, die Angaben, in welchen Teil mein Client sich befindet:
spiel noch nicht beendet
liest


Folgendes "lese" ich vom Server:
<room roomId="baae82af-5074-4348-be41-f8aeb73b97fa">
<data class="memento">
<state class="manhattan:state" turn="56" start="red" current="red" type="select">
<red displayName="Spieler 1" points="49">
<segment size="1" usable="0" retained="0"/>
<segment size="2" usable="0" retained="0"/>
<segment size="3" usable="0" retained="0"/>
<segment size="4" usable="0" retained="0"/>
<card slot="3"/>
<card slot="1"/>
<card slot="1"/>
<card slot="4"/>
</red>
<blue displayName="Spieler 2" points="54">
<segment size="1" usable="0" retained="0"/>
<segment size="2" usable="0" retained="0"/>
<segment size="3" usable="0" retained="0"/>
<segment size="4" usable="0" retained="0"/>
<card slot="1"/>
<card slot="0"/>
<card slot="2"/>
<card slot="3"/>
</blue>
<tower city="0" slot="0" red="3" blue="0" owner="red"/>
<tower city="0" slot="1" red="4" blue="3" owner="red"/>
<tower city="0" slot="2" red="3" blue="0" owner="red"/>
<tower city="0" slot="3" red="1" blue="1" owner="red"/>
<tower city="0" slot="4" red="0" blue="4" owner="blue"/>
<tower city="1" slot="0" red="3" blue="5" owner="blue"/>
<tower city="1" slot="1" red="1" blue="0" owner="red"/>
<tower city="1" slot="2" red="8" blue="6" owner="red"/>
<tower city="1" slot="3" red="0" blue="5" owner="blue"/>
<tower city="1" slot="4" red="4" blue="2" owner="red"/>
<tower city="2" slot="0" red="3" blue="2" owner="red"/>
<tower city="2" slot="1" red="2" blue="0" owner="red"/>
<tower city="2" slot="2" red="1" blue="1" owner="blue"/>
<tower city="2" slot="3" red="0" blue="3" owner="blue"/>
<tower city="2" slot="4" red="4" blue="4" owner="blue"/>
<tower city="3" slot="0" red="9" blue="0" owner="red"/>
<tower city="3" slot="1" red="1" blue="1" owner="red"/>
<tower city="3" slot="2" red="0" blue="2" owner="blue"/>
<tower city="3" slot="3" red="0" blue="6" owner="blue"/>
<tower city="3" slot="4" red="0" blue="2" owner="blue"/>
<move type="build" city="1" slot="0" size="1"/>
<condition winner="BLUE" reason="Das Rundenlimit wurde erreicht.\nSieg nach Punkten."/>
</state>
</data>
</room>
<room roomId="baae82af-5074-4348-be41-f8aeb73b97fa">
<data class="result">
<definition>
<fragment name="Siegpunkte">
<aggregation>SUM</aggregation>
<relevantForRanking>false</relevantForRanking>
</fragment>
<fragment name="Punkte">
<aggregation>AVERAGE</aggregation>
<relevantForRanking>true</relevantForRanking>
</fragment>
<fragment name="# Gebäude">
<aggregation>SUM</aggregation>
<relevantForRanking>false</relevantForRanking>
</fragment>
<fragment name="# Städte">
<aggregation>SUM</aggregation>
<relevantForRanking>false</relevantForRanking>
</fragment>
<fragment name="# höchste Türme">
<aggregation>SUM</aggregation>
<relevantForRanking>false</relevantForRanking>
</fragment>
</definition>
<score cause="REGULAR">
<part>0</part>
<part>49</part>
<part>11</part>
<part>2</part>
<part>1</part>
</score>
<score cause="REGULAR">
<part>2</part>
<part>54</part>
<part>9</part>
<part>2</part>
<part>0</part>
</score>
<winner class="manhattan:player" displayName="Spieler 2" points="54">
<segment size="1" usable="0" retained="0"/>
<segment size="2" usable="0" retained="0"/>
<segment size="3" usable="0" retained="0"/>
<segment size="4" usable="0" retained="0"/>
<card slot="1"/>
<card slot="0"/>
<card slot="2"/>
<card slot="3"/>
</winner>
</data>
</room>
<left roomId="baae82af-5074-4348-be41-f8aeb73b97fa"/>
</protocol>


Mein Client gibt mir wieder zusätzliche Ausgaben:
fertig gelesen
spiel noch nicht beendet
ausgeloggt


Zwischendurch sende ich noch

<left roomId="baae82af-5074-4348-be41-f8aeb73b97fa"/>


fertig gespielt
Ende


Das war der normale Durchlauf, bei dem sich mein eigener Client (ohne Java Vorlage) auch ordnungsgemäß beendet.

Nun zu den Serverantworten bei Testdurchläufen, bei denen sich mein Client nicht beendet.
Ich erhalte zunächst eine memento Nachricht vom Server mit anschließendem MoveRequest:

<room roomId="54aef564-0202-40ef-8119-a5519b8aa509">
<data class="memento">
<state class="manhattan:state" turn="55" start="blue" current="blue" type="build">
<red displayName="manhattan_player 1" points="36">
<segment size="1" usable="0" retained="0"/>
<segment size="2" usable="0" retained="0"/>
<segment size="3" usable="0" retained="0"/>
<segment size="4" usable="0" retained="0"/>
<card slot="4"/>
<card slot="0"/>
<card slot="0"/>
<card slot="1"/>
</red>
<blue displayName="SC_Client 2" points="39">
<segment size="1" usable="1" retained="0"/>
<segment size="2" usable="0" retained="0"/>
<segment size="3" usable="0" retained="0"/>
<segment size="4" usable="0" retained="0"/>
<card slot="4"/>
<card slot="4"/>
<card slot="1"/>
<card slot="3"/>
</blue>
<tower city="0" slot="0" red="0" blue="5" owner="blue"/>
<tower city="0" slot="1" red="0" blue="6" owner="blue"/>
<tower city="0" slot="2" red="1" blue="6" owner="blue"/>
<tower city="0" slot="3" red="0" blue="12" owner="blue"/>
<tower city="0" slot="4" red="2" blue="1" owner="red"/>
<tower city="1" slot="0" red="3" blue="2" owner="red"/>
<tower city="1" slot="1" red="4" blue="0" owner="red"/>
<tower city="1" slot="2" red="0" blue="3" owner="blue"/>
<tower city="1" slot="3" red="6" blue="0" owner="red"/>
<tower city="1" slot="4" red="5" blue="0" owner="red"/>
<tower city="2" slot="0" red="5" blue="0" owner="red"/>
<tower city="2" slot="1" red="3" blue="2" owner="red"/>
<tower city="2" slot="2" red="5" blue="0" owner="red"/>
<tower city="2" slot="3" red="0" blue="3" owner="blue"/>
<tower city="2" slot="4" red="0" blue="4" owner="blue"/>
<tower city="3" slot="0" red="2" blue="0" owner="red"/>
<tower city="3" slot="1" red="3" blue="0" owner="red"/>
<tower city="3" slot="2" red="4" blue="0" owner="red"/>
<tower city="3" slot="3" red="0" blue="1" owner="blue"/>
<tower city="3" slot="4" red="4" blue="1" owner="red"/>
<move type="build" city="2" slot="1" size="1"/>
</state>
</data>
</room>
<room roomId="54aef564-0202-40ef-8119-a5519b8aa509">
<data class="sc.framework.plugins.protocol.MoveRequest"/>
</room>

Mein Client teilt mir mit:
fertig gelesen


Ich sende:
<room roomId="54aef564-0202-40ef-8119-a5519b8aa509">
<data class="manhattan:build" city="2" slot="4" size="1"/>
</room>


Mein Programm gibt folgendes aus:
spiel noch nicht beendet
liest


Hier erkennt man, dass sich die Serverausgaben in normalen Durchläufen von den Testdurchläufen unterscheiden. Da ich beim Testdurchlauf am Ende keine weitere Rückmeldung über das Ausgehen des einen Testdurchlaufs erhalte, wartet mein Client ewig darauf und hängt dann in einer Schleife fest... Meine Frage ist nun: Warum gibt der Server im Testdurchlauf nicht das Ergebnis zurück und könnte das bitte nachgebessert werden?

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

Re: Testdurchläufe - Reservierung

Beitragvon Christian Wulf » So 18. Dez 2011, 11:40

Ich kann mir nicht vorstellen, dass es am Server liegt, da Spiele mit dem SimpleClient funktionieren. Bei Testdurchläufen wird jeder Client nach Ende des Spiels ordnungsgemäß beendet. Zudem hat niemand anderes außer dir dieses Problem (wenn doch, teilt euch mit !).

Gut wäre es, wenn du uns sagst, in welcher Methode du welche Log-Nachricht ausgibst, damit wir wissen, zu welchem Zeitpunkt z.B. "spiel noch nicht beendet" angezeigt wird.

Zudem scheint dein Programm (oder der Server) schon beim BuildMove nicht weiterzumachen, nicht erst am Ende des Spiels. Wartet dein Client nach dem Senden vielleicht in einer Endlosschleife oder beendet sich, sodass er keine weiteren Log-Ausgaben anzeigen kann?

Benutzt du die aktuelle Server-Version?

Noch etwas am Rande: Deine Frage passt nun nicht mehr unbedingt zum Thema. Ein neuer Thread wäre sicherlich übersichtlicher ;)

Beste Grüße
Christian

mind_in_a_box
Beiträge: 15
Registriert: Mi 31. Aug 2011, 19:26

Re: Testdurchläufe - Reservierung

Beitragvon mind_in_a_box » Di 20. Dez 2011, 16:55

Das letzte, was der Server in einem Testdurchlauf schickt ist das hier:

Code: Alles auswählen

<left roomId="baae82af-5074-4348-be41-f8aeb73b97fa"/>


Danach kommt nichts mehr, jedenfalls nicht bei mir.