diff options
author | joffrey-bion <joffrey.bion@gmail.com> | 2020-12-12 16:18:28 +0100 |
---|---|---|
committer | joffrey-bion <joffrey.bion@gmail.com> | 2020-12-12 16:18:28 +0100 |
commit | 71f2fc4f25bdfdeac7db9b8e62144c3110e3bf6a (patch) | |
tree | d8a88a126c74d3a36177980be4259b1a173fa1aa /sw-ui | |
parent | Fix race in blinking test (diff) | |
download | seven-wonders-71f2fc4f25bdfdeac7db9b8e62144c3110e3bf6a.tar.gz seven-wonders-71f2fc4f25bdfdeac7db9b8e62144c3110e3bf6a.tar.bz2 seven-wonders-71f2fc4f25bdfdeac7db9b8e62144c3110e3bf6a.zip |
Fix race conditions for game start and tests
Resolves:
https://github.com/joffrey-bion/seven-wonders/issues/70
Diffstat (limited to 'sw-ui')
-rw-r--r-- | sw-ui/src/main/kotlin/org/luxons/sevenwonders/ui/redux/sagas/RouteBasedSagas.kt | 9 | ||||
-rw-r--r-- | sw-ui/src/main/kotlin/org/luxons/sevenwonders/ui/redux/sagas/Sagas.kt | 26 |
2 files changed, 18 insertions, 17 deletions
diff --git a/sw-ui/src/main/kotlin/org/luxons/sevenwonders/ui/redux/sagas/RouteBasedSagas.kt b/sw-ui/src/main/kotlin/org/luxons/sevenwonders/ui/redux/sagas/RouteBasedSagas.kt index d4329f2f..88ecdcc1 100644 --- a/sw-ui/src/main/kotlin/org/luxons/sevenwonders/ui/redux/sagas/RouteBasedSagas.kt +++ b/sw-ui/src/main/kotlin/org/luxons/sevenwonders/ui/redux/sagas/RouteBasedSagas.kt @@ -19,14 +19,7 @@ suspend fun SwSagaContext.gameBrowserSaga(session: SevenWondersSession) { } suspend fun SwSagaContext.lobbySaga(session: SevenWondersSession) { - val lobby = getState().currentLobby ?: error("Lobby saga run without a current lobby") - coroutineScope { - session.watchLobbyUpdates().map { UpdateLobbyAction(it) }.dispatchAllIn(this) - - val turnInfo = session.awaitGameStart(lobby.id) - dispatch(EnterGameAction(getState().currentLobby!!, turnInfo)) - dispatch(Navigate(Route.GAME)) - } + session.watchLobbyUpdates().map { UpdateLobbyAction(it) }.dispatchAll() } suspend fun SwSagaContext.gameSaga(session: SevenWondersSession) { diff --git a/sw-ui/src/main/kotlin/org/luxons/sevenwonders/ui/redux/sagas/Sagas.kt b/sw-ui/src/main/kotlin/org/luxons/sevenwonders/ui/redux/sagas/Sagas.kt index c9f73111..7be6f65a 100644 --- a/sw-ui/src/main/kotlin/org/luxons/sevenwonders/ui/redux/sagas/Sagas.kt +++ b/sw-ui/src/main/kotlin/org/luxons/sevenwonders/ui/redux/sagas/Sagas.kt @@ -31,7 +31,7 @@ suspend fun SwSagaContext.rootSaga() = try { } launchApiActionHandlersIn(this, session) - launchNavigationHandlers(this, session) + launchApiEventHandlersIn(this, session) val player = session.chooseName(action.playerName, null) dispatch(SetCurrentPlayerAction(player)) @@ -94,7 +94,14 @@ private fun SwSagaContext.launchApiActionHandlersIn(scope: CoroutineScope, sessi scope.launchOnEach<RequestUnprepareMove> { session.unprepareMove() } } -private fun SwSagaContext.launchNavigationHandlers(scope: CoroutineScope, session: SevenWondersSession) { +private fun SwSagaContext.launchApiEventHandlersIn(scope: CoroutineScope, session: SevenWondersSession) { + + scope.launch { + session.watchLobbyJoined().collect { lobby -> + dispatch(EnterLobbyAction(lobby)) + dispatch(Navigate(Route.LOBBY)) + } + } scope.launch { session.watchLobbyLeft().collect { leftLobbyId -> @@ -103,16 +110,17 @@ private fun SwSagaContext.launchNavigationHandlers(scope: CoroutineScope, sessio } } + scope.launch { + session.watchGameStarted().collect { turnInfo -> + val currentLobby = getState().currentLobby ?: error("Received game started event without being in a lobby") + dispatch(EnterGameAction(currentLobby, turnInfo)) + dispatch(Navigate(Route.GAME)) + } + } + // FIXME map this actions like others and await server event instead scope.launchOnEach<RequestLeaveGame> { session.leaveGame() dispatch(Navigate(Route.GAME_BROWSER)) } - - scope.launch { - session.watchLobbyJoined().collect { lobby -> - dispatch(EnterLobbyAction(lobby)) - dispatch(Navigate(Route.LOBBY)) - } - } } |