Skip to content

Commit 5f0f9f1

Browse files
committed
fix(server): send error from Lobby if reservation redemption fails
1 parent 9fbb10e commit 5f0f9f1

File tree

4 files changed

+11
-26
lines changed

4 files changed

+11
-26
lines changed

sdk/src/server-api/sc/api/plugins/exceptions/RescuableClientException.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package sc.api.plugins.exceptions
22

3-
43
/** An Exception in Client-Server communication that should be handled. */
54
open class RescuableClientException
65
@JvmOverloads constructor(override val message: String, cause: Throwable? = null):

server/src/sc/server/Lobby.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,11 @@ open class Lobby: GameRoomManager(), IClientListener, Closeable {
5656
if (packet is ILobbyRequest) {
5757
when (packet) {
5858
is JoinPreparedRoomRequest ->
59-
ReservationManager.redeemReservationCode(source, packet.reservationCode)
59+
try {
60+
ReservationManager.redeemReservationCode(source, packet.reservationCode)
61+
} catch(e: RescuableClientException) {
62+
source.send(ProtocolErrorMessage(packet, e.message))
63+
}
6064
is JoinRoomRequest -> {
6165
val gameRoomMessage = this.joinOrCreateGame(source, packet.gameType)
6266
// null is returned if join was unsuccessful

server/test/sc/server/network/LobbyRequestTest.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,12 @@ class LobbyRequestTest: WordSpec({
6262
val reservations = listener.prepareGameResponse.reservations
6363
players[1].joinPreparedGame(reservations[0])
6464
await("First player joined") { room.clients shouldHaveSize 1 }
65+
"not accept a reservation twice" {
66+
admin.joinPreparedGame(reservations[0])
67+
await("Receive error when reusing a reservation") { listener.errorReceived shouldBe true }
68+
room.clients shouldHaveSize 1
69+
lobby.games shouldHaveSize 1
70+
}
6571
players[2].joinPreparedGame(reservations[1])
6672
await("Players join, Game start") { room.status shouldBe GameRoom.GameStatus.ACTIVE }
6773

server/test/sc/server/network/RequestTest.kt

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -55,30 +55,6 @@ class RequestTest: RealServerTest() {
5555
assertFalse(clients[1].isAdministrator)
5656
}
5757

58-
@Test
59-
fun joinPreparedRoomRequest() {
60-
player1.authenticate(PASSWORD)
61-
val listener = TestPreparedGameResponseListener()
62-
player1.addListener(listener)
63-
64-
player1.prepareGame(TestPlugin.TEST_PLUGIN_UUID)
65-
Thread.sleep(200)
66-
val response = listener.response
67-
68-
val reservation = response.reservations[0]
69-
player1.joinPreparedGame(reservation)
70-
Thread.sleep(200)
71-
assertEquals(1, lobby.games.iterator().next().clients.size.toLong())
72-
73-
player2.joinPreparedGame(response.reservations[1])
74-
Thread.sleep(200)
75-
assertEquals(2, lobby.games.iterator().next().clients.size.toLong())
76-
77-
player3.joinPreparedGame(response.reservations[1])
78-
Thread.sleep(200)
79-
assertEquals(2, lobby.clientManager.clients.size.toLong())
80-
}
81-
8258
@Test
8359
fun observationRequest() {
8460
player1.joinRoomRequest(TestPlugin.TEST_PLUGIN_UUID)

0 commit comments

Comments
 (0)