This commit is contained in:
Christoph Hagen 2022-01-24 23:41:16 +01:00
commit 39835cdd2c
6 changed files with 21 additions and 6 deletions

View File

@ -174,4 +174,8 @@ final class SQLiteDatabase {
} }
return tables.play(card: card, player: player) return tables.play(card: card, player: player)
} }
func disconnectAllSockets() {
tables.disconnectAllSockets()
}
} }

View File

@ -199,4 +199,8 @@ final class TableManagement {
// TODO: Save new table // TODO: Save new table
return .success return .success
} }
func disconnectAllSockets() {
tables.values.forEach { $0.disconnectAllPlayers() }
}
} }

View File

@ -84,10 +84,4 @@ final class WeddingPlayer: CardHoldingPlayer {
func replace(_ card: Card, with trumpCard: Card) { func replace(_ card: Card, with trumpCard: Card) {
cards = (cards.filter { $0 != card } + [trumpCard]).sortedCards(forGame: .hochzeit) cards = (cards.filter { $0 != card } + [trumpCard]).sortedCards(forGame: .hochzeit)
} }
override var info: PlayerInfo {
var info = super.info
info.leadsGame = offersWedding || selectsGame
return info
}
} }

View File

@ -124,6 +124,10 @@ extension AbstractTable: ManageableTable {
return return
} }
func disconnectAllPlayers() {
players.forEach { $0.disconnect() }
}
func sendUpdateToAllPlayers() { func sendUpdateToAllPlayers() {
players.enumerated().forEach { playerIndex, player in players.enumerated().forEach { playerIndex, player in
guard player.isConnected else { guard player.isConnected else {

View File

@ -31,4 +31,6 @@ protocol ManageableTable {
func disconnect(player name: PlayerName) func disconnect(player name: PlayerName)
func sendUpdateToAllPlayers() func sendUpdateToAllPlayers()
func disconnectAllPlayers()
} }

View File

@ -33,6 +33,13 @@ public func configure(_ app: Application) throws {
let db = app.databases.database(.sqlite, logger: .init(label: "Init"), on: app.databases.eventLoopGroup.next())! let db = app.databases.database(.sqlite, logger: .init(label: "Init"), on: app.databases.eventLoopGroup.next())!
server = try SQLiteDatabase(db: db) server = try SQLiteDatabase(db: db)
// Gracefully shut down by closing potentially open socket
DispatchQueue.global(qos: .utility).asyncAfter(deadline: .now() + .seconds(5)) {
_ = app.server.onShutdown.always { _ in
server.disconnectAllSockets()
}
}
// register routes // register routes
try routes(app) try routes(app)
} }