summaryrefslogtreecommitdiff
path: root/sw-client
diff options
context:
space:
mode:
authorJoffrey Bion <joffrey.bion@booking.com>2020-05-05 16:52:27 +0200
committerJoffrey Bion <joffrey.bion@booking.com>2020-05-12 09:22:25 +0200
commit9aa36cd199c1d6cf0feb959e3ec6ac0539168cd5 (patch)
tree03b40254778add686a1aaf7a263f099e748097fc /sw-client
parentMove score to common model (to enable passing it to client) (diff)
downloadseven-wonders-9aa36cd199c1d6cf0feb959e3ec6ac0539168cd5.tar.gz
seven-wonders-9aa36cd199c1d6cf0feb959e3ec6ac0539168cd5.tar.bz2
seven-wonders-9aa36cd199c1d6cf0feb959e3ec6ac0539168cd5.zip
Upgrade to krossbow 0.20.1 (migrate to flows)
Diffstat (limited to 'sw-client')
-rw-r--r--sw-client/build.gradle.kts2
-rw-r--r--sw-client/src/commonMain/kotlin/org/luxons/sevenwonders/client/SevenWondersClient.kt47
2 files changed, 26 insertions, 23 deletions
diff --git a/sw-client/build.gradle.kts b/sw-client/build.gradle.kts
index 0b74243d..8b8983c1 100644
--- a/sw-client/build.gradle.kts
+++ b/sw-client/build.gradle.kts
@@ -3,7 +3,7 @@ plugins {
id("org.jlleitschuh.gradle.ktlint")
}
-val krossbowVersion = "0.10.3"
+val krossbowVersion = "0.20.1"
kotlin {
jvm()
diff --git a/sw-client/src/commonMain/kotlin/org/luxons/sevenwonders/client/SevenWondersClient.kt b/sw-client/src/commonMain/kotlin/org/luxons/sevenwonders/client/SevenWondersClient.kt
index 4a610a81..480e9d67 100644
--- a/sw-client/src/commonMain/kotlin/org/luxons/sevenwonders/client/SevenWondersClient.kt
+++ b/sw-client/src/commonMain/kotlin/org/luxons/sevenwonders/client/SevenWondersClient.kt
@@ -1,13 +1,15 @@
package org.luxons.sevenwonders.client
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.first
import kotlinx.serialization.DeserializationStrategy
import kotlinx.serialization.SerializationStrategy
import kotlinx.serialization.builtins.list
import kotlinx.serialization.builtins.serializer
import org.hildan.krossbow.stomp.StompClient
-import org.hildan.krossbow.stomp.StompSubscription
import org.hildan.krossbow.stomp.conversions.kxserialization.StompSessionWithKxSerialization
import org.hildan.krossbow.stomp.conversions.kxserialization.convertAndSend
+import org.hildan.krossbow.stomp.conversions.kxserialization.subscribe
import org.hildan.krossbow.stomp.conversions.kxserialization.withJsonConversions
import org.hildan.krossbow.stomp.sendEmptyMsg
import org.luxons.sevenwonders.model.CustomizableSettings
@@ -44,17 +46,14 @@ private suspend inline fun <reified T : Any, reified U : Any> StompSessionWithKx
): U {
val sub = subscribe(receiveDestination, deserializer)
convertAndSend(sendDestination, payload, serializer)
- val msg = sub.messages.receive()
- sub.unsubscribe()
- return msg
+ return sub.first()
}
class SevenWondersSession(private val stompSession: StompSessionWithKxSerialization) {
suspend fun disconnect() = stompSession.disconnect()
- suspend fun watchErrors(): StompSubscription<ErrorDTO> =
- stompSession.subscribe("/user/queue/errors", ErrorDTO.serializer())
+ fun watchErrors(): Flow<ErrorDTO> = stompSession.subscribe("/user/queue/errors", ErrorDTO.serializer())
suspend fun chooseName(displayName: String): ConnectedPlayer = stompSession.request(
sendDestination = "/app/chooseName",
@@ -64,7 +63,7 @@ class SevenWondersSession(private val stompSession: StompSessionWithKxSerializat
deserializer = ConnectedPlayer.serializer()
)
- suspend fun watchGames(): StompSubscription<List<LobbyDTO>> =
+ fun watchGames(): Flow<List<LobbyDTO>> =
stompSession.subscribe("/topic/games", LobbyDTO.serializer().list)
suspend fun createGame(gameName: String): LobbyDTO = stompSession.request(
@@ -95,42 +94,46 @@ class SevenWondersSession(private val stompSession: StompSessionWithKxSerializat
stompSession.convertAndSend("/app/lobby/updateSettings", UpdateSettingsAction(settings), UpdateSettingsAction.serializer())
}
- suspend fun watchLobbyUpdates(): StompSubscription<LobbyDTO> =
+ fun watchLobbyUpdates(): Flow<LobbyDTO> =
stompSession.subscribe("/user/queue/lobby/updated", LobbyDTO.serializer())
suspend fun awaitGameStart(gameId: Long): PlayerTurnInfo {
- val gameStartSubscription = stompSession.subscribe("/user/queue/lobby/$gameId/started", PlayerTurnInfo.serializer())
- val turnInfo = gameStartSubscription.messages.receive()
- gameStartSubscription.unsubscribe()
- return turnInfo
+ val startEvents = stompSession.subscribe("/user/queue/lobby/$gameId/started", PlayerTurnInfo.serializer())
+ return startEvents.first()
}
suspend fun startGame() {
stompSession.sendEmptyMsg("/app/lobby/startGame")
}
- suspend fun watchPlayerReady(gameId: Long): StompSubscription<String> =
+ fun watchPlayerReady(gameId: Long): Flow<String> =
stompSession.subscribe("/topic/game/$gameId/playerReady", String.serializer())
- suspend fun watchPreparedCards(gameId: Long): StompSubscription<PreparedCard> =
+ fun watchPreparedCards(gameId: Long): Flow<PreparedCard> =
stompSession.subscribe("/topic/game/$gameId/prepared", PreparedCard.serializer())
- suspend fun watchTurns(): StompSubscription<PlayerTurnInfo> =
+ fun watchTurns(): Flow<PlayerTurnInfo> =
stompSession.subscribe("/user/queue/game/turn", PlayerTurnInfo.serializer())
suspend fun sayReady() {
stompSession.sendEmptyMsg("/app/game/sayReady")
}
- suspend fun prepareMove(move: PlayerMove): PlayerMove = stompSession.request(
- sendDestination = "/app/game/prepareMove",
- receiveDestination = "/user/queue/game/preparedMove",
- payload = PrepareMoveAction(move),
- serializer = PrepareMoveAction.serializer(),
- deserializer = PlayerMove.serializer()
- )
+ fun watchOwnMoves(): Flow<PlayerMove> =
+ stompSession.subscribe(destination = "/user/queue/game/preparedMove", deserializer = PlayerMove.serializer())
+
+ suspend fun prepareMove(move: PlayerMove) {
+ stompSession.convertAndSend(
+ destination = "/app/game/prepareMove",
+ body = PrepareMoveAction(move),
+ serializer = PrepareMoveAction.serializer()
+ )
+ }
suspend fun unprepareMove() {
stompSession.sendEmptyMsg("/app/game/unprepareMove")
}
+
+// suspend fun watchGameEnd() {
+// }
}
bgstack15