summaryrefslogtreecommitdiff
path: root/sw-server
diff options
context:
space:
mode:
authorjoffrey-bion <joffrey.bion@gmail.com>2020-12-12 02:03:45 +0100
committerjoffrey-bion <joffrey.bion@gmail.com>2020-12-12 02:44:13 +0100
commit9ba1b1251d16956fe3b9cd07f198577b63d4a486 (patch)
treea780a985f022a8ab9699a8990174630089e5feb3 /sw-server
parentImprove score board tags colors (diff)
downloadseven-wonders-9ba1b1251d16956fe3b9cd07f198577b63d4a486.tar.gz
seven-wonders-9ba1b1251d16956fe3b9cd07f198577b63d4a486.tar.bz2
seven-wonders-9ba1b1251d16956fe3b9cd07f198577b63d4a486.zip
Make ready button optional (server side)
Resolves: https://github.com/joffrey-bion/seven-wonders/issues/63
Diffstat (limited to 'sw-server')
-rw-r--r--sw-server/src/main/kotlin/org/luxons/sevenwonders/server/api/Converters.kt1
-rw-r--r--sw-server/src/main/kotlin/org/luxons/sevenwonders/server/controllers/GameController.kt17
-rw-r--r--sw-server/src/main/kotlin/org/luxons/sevenwonders/server/controllers/LobbyController.kt15
-rw-r--r--sw-server/src/test/kotlin/org/luxons/sevenwonders/server/SevenWondersTest.kt4
-rw-r--r--sw-server/src/test/kotlin/org/luxons/sevenwonders/server/controllers/LobbyControllerTest.kt2
5 files changed, 31 insertions, 8 deletions
diff --git a/sw-server/src/main/kotlin/org/luxons/sevenwonders/server/api/Converters.kt b/sw-server/src/main/kotlin/org/luxons/sevenwonders/server/api/Converters.kt
index 12f346a2..5689247b 100644
--- a/sw-server/src/main/kotlin/org/luxons/sevenwonders/server/api/Converters.kt
+++ b/sw-server/src/main/kotlin/org/luxons/sevenwonders/server/api/Converters.kt
@@ -13,6 +13,7 @@ fun Lobby.toDTO(): LobbyDTO = LobbyDTO(
players = getPlayers().zip(getAssignedWonders()).map { (p, w) -> p.toDTO(w) },
allWonders = allWonders,
state = state,
+ settings = settings,
hasEnoughPlayers = hasEnoughPlayers(),
maxPlayersReached = maxPlayersReached(),
)
diff --git a/sw-server/src/main/kotlin/org/luxons/sevenwonders/server/controllers/GameController.kt b/sw-server/src/main/kotlin/org/luxons/sevenwonders/server/controllers/GameController.kt
index 51e8ba4f..94ebceab 100644
--- a/sw-server/src/main/kotlin/org/luxons/sevenwonders/server/controllers/GameController.kt
+++ b/sw-server/src/main/kotlin/org/luxons/sevenwonders/server/controllers/GameController.kt
@@ -31,14 +31,20 @@ class GameController(
@MessageMapping("/game/sayReady")
fun ready(principal: Principal) {
val player = principal.player
- player.isReady = true
+ val lobby = player.lobby
+ if (!lobby.settings.askForReadiness) {
+ logger.warn("Game {}: player {} is saying ready but readiness concept is disabled", lobby.id, player)
+ return
+ }
+
val game = player.game
- logger.info("Game {}: player {} is ready for the next turn", game.id, player)
+ player.isReady = true
- synchronized(player.lobby) {
- val players = player.lobby.getPlayers()
+ synchronized(lobby) {
+ val players = lobby.getPlayers()
sendPlayerReady(game.id, player)
+ logger.info("Game {}: player {} is ready for the next turn", game.id, player)
val allReady = players.all { it.isReady }
if (allReady) {
@@ -58,6 +64,7 @@ class GameController(
@MessageMapping("/game/prepareMove")
fun prepareMove(action: PrepareMoveAction, principal: Principal) {
val player = principal.player
+ val lobby = player.lobby
val game = player.game
synchronized(game) {
val preparedCardBack = game.prepareMove(player.index, action.move)
@@ -68,7 +75,7 @@ class GameController(
if (game.allPlayersPreparedTheirMove()) {
logger.info("Game {}: all players have prepared their move, executing turn...", game.id)
game.playTurn()
- sendTurnInfo(player.lobby.getPlayers(), game, true)
+ sendTurnInfo(player.lobby.getPlayers(), game, hideHands = lobby.settings.askForReadiness)
if (game.endOfGameReached()) {
player.lobby.setEndOfGame()
}
diff --git a/sw-server/src/main/kotlin/org/luxons/sevenwonders/server/controllers/LobbyController.kt b/sw-server/src/main/kotlin/org/luxons/sevenwonders/server/controllers/LobbyController.kt
index 6cc404e9..f73d5481 100644
--- a/sw-server/src/main/kotlin/org/luxons/sevenwonders/server/controllers/LobbyController.kt
+++ b/sw-server/src/main/kotlin/org/luxons/sevenwonders/server/controllers/LobbyController.kt
@@ -156,12 +156,25 @@ class LobbyController(
val game = lobby.startGame()
logger.info("Game {} successfully started", game.id)
- game.getCurrentTurnInfo().hideHandsAndWaitForReadiness().forEach {
+ val currentTurnInfo = game.getCurrentTurnInfo().let {
+ if (lobby.settings.askForReadiness) it.hideHandsAndWaitForReadiness() else it
+ }
+
+ // even if we don't care about ready state for business logic, the UI may use it nonetheless
+ lobby.initializePlayersReadyState()
+
+ currentTurnInfo.forEach {
val player = lobby.getPlayers()[it.playerIndex]
template.convertAndSendToUser(player.username, "/queue/lobby/" + lobby.id + "/started", it)
}
}
+ private fun Lobby.initializePlayersReadyState() {
+ val players = getPlayers()
+ val initialReadyState = !settings.askForReadiness
+ players.forEach { it.isReady = initialReadyState }
+ }
+
companion object {
private val logger = LoggerFactory.getLogger(LobbyController::class.java)
}
diff --git a/sw-server/src/test/kotlin/org/luxons/sevenwonders/server/SevenWondersTest.kt b/sw-server/src/test/kotlin/org/luxons/sevenwonders/server/SevenWondersTest.kt
index ccc2e548..3ed559b3 100644
--- a/sw-server/src/test/kotlin/org/luxons/sevenwonders/server/SevenWondersTest.kt
+++ b/sw-server/src/test/kotlin/org/luxons/sevenwonders/server/SevenWondersTest.kt
@@ -150,5 +150,7 @@ class SevenWondersTest {
private suspend fun SevenWondersSession.createGameAndWaitLobby(gameName: String): LobbyDTO {
val joinedLobbies = watchLobbyJoined()
createGame(gameName)
- return joinedLobbies.first()
+ val lobby = joinedLobbies.first()
+ updateSettings(lobby.settings.copy(askForReadiness = true))
+ return lobby
}
diff --git a/sw-server/src/test/kotlin/org/luxons/sevenwonders/server/controllers/LobbyControllerTest.kt b/sw-server/src/test/kotlin/org/luxons/sevenwonders/server/controllers/LobbyControllerTest.kt
index 097e4792..351c2e9e 100644
--- a/sw-server/src/test/kotlin/org/luxons/sevenwonders/server/controllers/LobbyControllerTest.kt
+++ b/sw-server/src/test/kotlin/org/luxons/sevenwonders/server/controllers/LobbyControllerTest.kt
@@ -165,7 +165,7 @@ class LobbyControllerTest {
assertEquals(Settings(), lobby.settings)
- val newSettings = Settings(12L, 5, 5, 5, 4, 10, 2, HashMap())
+ val newSettings = Settings(12L, 5, false, 5, 5, 4, 10, 2, HashMap())
val updateSettingsAction = UpdateSettingsAction(newSettings)
val principal = TestPrincipal("testuser")
bgstack15