software-challenge / backend

Server, Client und Spiel-Plugins der Software-Challenge Germany
https://www.software-challenge.de
11 stars 10 forks source link

Unknown Communication Error #248

Closed 0xhtml closed 4 years ago

0xhtml commented 4 years ago
20:55:57.489 [XStreamClient Receive Thread 882 Client] ERROR sc.framework.plugins.RoundBasedGameInstance - Ungueltiger Zug von 'Unknown'.
No path found for Ant move
sc.shared.InvalidMoveException: No path found for Ant move
    at sc.plugin2020.util.GameRuleLogic.validateAntMove(GameRuleLogic.kt:180)
    at sc.plugin2020.util.GameRuleLogic.validateDragMove(GameRuleLogic.kt:160)
    at sc.plugin2020.util.GameRuleLogic.validateMove(GameRuleLogic.kt:84)
    at sc.plugin2020.util.GameRuleLogic.performMove(GameRuleLogic.kt:40)
    at sc.plugin2020.Game.onRoundBasedAction(Game.java:62)
    at sc.framework.plugins.RoundBasedGameInstance.onAction(RoundBasedGameInstance.java:64)
    at sc.server.gaming.GameRoom.onEvent(GameRoom.java:493)
    at sc.server.Lobby.onRequest(Lobby.kt:85)
    at sc.server.network.Client.notifyOnPacket(Client.java:93)
    at sc.server.network.Client.onObject(Client.java:230)
    at sc.networking.clients.XStreamClient.receiveThread(XStreamClient.java:114)
    at sc.networking.clients.XStreamClient$1.run(XStreamClient.java:78)
    at java.base/java.lang.Thread.run(Thread.java:834)
20:55:57.489 [XStreamClient Receive Thread 882 Client] ERROR sc.networking.clients.XStreamClient - Unknown Communication Error
java.lang.IllegalArgumentException: Parameter specified as non-null is null: method sc.protocol.responses.ProtocolErrorMessage.<init>, parameter originalRequest
    at sc.protocol.responses.ProtocolErrorMessage.<init>(ProtocolErrorMessage.kt)
    at sc.framework.plugins.RoundBasedGameInstance.catchInvalidMove(RoundBasedGameInstance.java:318)
    at sc.plugin2020.Game.onRoundBasedAction(Game.java:65)
    at sc.framework.plugins.RoundBasedGameInstance.onAction(RoundBasedGameInstance.java:64)
    at sc.server.gaming.GameRoom.onEvent(GameRoom.java:493)
    at sc.server.Lobby.onRequest(Lobby.kt:85)
    at sc.server.network.Client.notifyOnPacket(Client.java:93)
    at sc.server.network.Client.onObject(Client.java:230)
    at sc.networking.clients.XStreamClient.receiveThread(XStreamClient.java:114)
    at sc.networking.clients.XStreamClient$1.run(XStreamClient.java:78)
    at java.base/java.lang.Thread.run(Thread.java:834)

Nachdem ich einen ungültigen Zug sende entsteht ein zusätzlicher Fehler auf den Server (IllegalArgumentException) und mein Client erhält keine weiteren Infos (z.B. über den Fehler oder das beendete Spiel). Aus der XML-Documentation wurde mir auch nicht ganz klar in welchen fällen sich mein Client vom Server trennen muss. Nur wenn der Server </protocol> sendet? Oder auch wenn ein Fehler auftritt (Server sendet error)?

xeruf commented 4 years ago

Du hast recht, das sollte nicht passieren, hängt wohl mit nem kürzlichen rework zusammen. Wenn ein error auftritt wird zumindest das aktuelle Spiel eigentlich immer beendet, also kannst du dich in dem Fall trennen. Unser Protokoll ist leider nicht an allen Ecken komplett sauber.