diff options
author | joffrey-bion <joffrey.bion@gmail.com> | 2020-12-13 01:39:06 +0100 |
---|---|---|
committer | joffrey-bion <joffrey.bion@gmail.com> | 2020-12-13 01:40:51 +0100 |
commit | 2d5117911c11fafc3c287e2ee74149f866c41954 (patch) | |
tree | 5b4dce07c2097a3f0e6b140ce5005d154d2c9c57 /sw-server/src/main | |
parent | Add logging of BOT status (diff) | |
download | seven-wonders-2d5117911c11fafc3c287e2ee74149f866c41954.tar.gz seven-wonders-2d5117911c11fafc3c287e2ee74149f866c41954.tar.bz2 seven-wonders-2d5117911c11fafc3c287e2ee74149f866c41954.zip |
Only transfer ownership to humans
Resolve:
https://github.com/joffrey-bion/seven-wonders/issues/73
Diffstat (limited to 'sw-server/src/main')
6 files changed, 21 insertions, 11 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 5689247b..b653eec5 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 @@ -18,4 +18,12 @@ fun Lobby.toDTO(): LobbyDTO = LobbyDTO( maxPlayersReached = maxPlayersReached(), ) -private fun Player.toDTO(wonder: AssignedWonder) = PlayerDTO(username, displayName, icon, wonder, isGameOwner, isReady) +private fun Player.toDTO(wonder: AssignedWonder) = PlayerDTO( + username = username, + displayName = displayName, + isHuman = isHuman, + icon = icon, + wonder = wonder, + isGameOwner = isGameOwner, + isReady = isReady, +) diff --git a/sw-server/src/main/kotlin/org/luxons/sevenwonders/server/controllers/HomeController.kt b/sw-server/src/main/kotlin/org/luxons/sevenwonders/server/controllers/HomeController.kt index 5cfedb17..b2fc122a 100644 --- a/sw-server/src/main/kotlin/org/luxons/sevenwonders/server/controllers/HomeController.kt +++ b/sw-server/src/main/kotlin/org/luxons/sevenwonders/server/controllers/HomeController.kt @@ -31,10 +31,10 @@ class HomeController( @SendToUser("/queue/nameChoice") fun chooseName(@Validated action: ChooseNameAction, principal: Principal): ConnectedPlayer { val username = principal.name - val player = playerRepository.createOrUpdate(username, action.playerName, action.icon) + val player = playerRepository.createOrUpdate(username, action.playerName, action.isHuman, action.icon) logger.info("Player '{}' chose the name '{}'", username, player.displayName) - return ConnectedPlayer(username, player.displayName, player.icon) + return ConnectedPlayer(username, player.displayName, player.isHuman, player.icon) } companion object { 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 4f5f45bf..aa01a23a 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 @@ -45,12 +45,13 @@ class LobbyController( fun leave(principal: Principal) { val player = principal.player val lobby = player.lobby - lobby.removePlayer(principal.name) - logger.info("Player {} left the lobby of game '{}'", player, lobby.name) - template.convertAndSendToUser(player.username, "/queue/lobby/left", lobby.id) synchronized(lobby) { - if (lobby.getPlayers().isEmpty()) { + lobby.removePlayer(principal.name) + logger.info("Player {} left the lobby of game '{}'", player, lobby.name) + template.convertAndSendToUser(player.username, "/queue/lobby/left", lobby.id) + + if (lobby.getPlayers().none { it.isHuman }) { deleteLobby(lobby) } else { sendLobbyUpdateToPlayers(lobby) diff --git a/sw-server/src/main/kotlin/org/luxons/sevenwonders/server/lobby/Lobby.kt b/sw-server/src/main/kotlin/org/luxons/sevenwonders/server/lobby/Lobby.kt index 4176c485..e0dba284 100644 --- a/sw-server/src/main/kotlin/org/luxons/sevenwonders/server/lobby/Lobby.kt +++ b/sw-server/src/main/kotlin/org/luxons/sevenwonders/server/lobby/Lobby.kt @@ -109,8 +109,8 @@ class Lobby( val player = players.removeAt(playerIndex) player.leave() - if (player == owner && players.isNotEmpty()) { - owner = players[0] + if (player == owner && players.any { it.isHuman }) { + owner = players.first { it.isHuman } } return player } diff --git a/sw-server/src/main/kotlin/org/luxons/sevenwonders/server/lobby/Player.kt b/sw-server/src/main/kotlin/org/luxons/sevenwonders/server/lobby/Player.kt index 1b63a155..2ab97b0d 100644 --- a/sw-server/src/main/kotlin/org/luxons/sevenwonders/server/lobby/Player.kt +++ b/sw-server/src/main/kotlin/org/luxons/sevenwonders/server/lobby/Player.kt @@ -7,6 +7,7 @@ import org.luxons.sevenwonders.server.ApiMisuseException class Player( val username: String, var displayName: String, + val isHuman: Boolean = true, var icon: Icon? = null, ) { var index: Int = -1 diff --git a/sw-server/src/main/kotlin/org/luxons/sevenwonders/server/repositories/PlayerRepository.kt b/sw-server/src/main/kotlin/org/luxons/sevenwonders/server/repositories/PlayerRepository.kt index c5dd6215..c93b219c 100644 --- a/sw-server/src/main/kotlin/org/luxons/sevenwonders/server/repositories/PlayerRepository.kt +++ b/sw-server/src/main/kotlin/org/luxons/sevenwonders/server/repositories/PlayerRepository.kt @@ -13,8 +13,8 @@ class PlayerRepository { operator fun contains(username: String): Boolean = players.containsKey(username) - fun createOrUpdate(username: String, displayName: String, icon: Icon? = null): Player { - val p = players.computeIfAbsent(username) { Player(username, displayName, icon) } + fun createOrUpdate(username: String, displayName: String, isHuman: Boolean = true, icon: Icon? = null): Player { + val p = players.computeIfAbsent(username) { Player(username, displayName, isHuman, icon) } p.displayName = displayName p.icon = icon return p |