aboutsummaryrefslogtreecommitdiff
path: root/diplomacy/server/server_game.py
diff options
context:
space:
mode:
authornotoraptor <notoraptor@users.noreply.github.com>2019-07-18 12:19:37 -0400
committerPhilip Paquette <pcpaquette@gmail.com>2019-07-18 12:19:37 -0400
commitf8ee5f84abc5c9d0d56402f2943abad1dc74d3dd (patch)
tree8f672a9a6029f172ac0c3651dcfa4c03040cd32f /diplomacy/server/server_game.py
parent2701df1e3b03c7c605ccf212a02987d53fbd0609 (diff)
Open DAIDE port on game loading and display on web
- Open DAIDE port on game loading too, and [web] Display DAIDE port on game title. - [server] Also delete backup game file when deleting game. - [python] Add optional parameter `server` to ServerGame constructor to init server game with a server as soon as it is possible. Add field `daide_port` to Game for client games. When creating game, register it on server before generating client games, so that DAIDE ports are known on client game generation. Move DAIDE port opening into Server.add_new_game() and Server.get_game(), so that port is opened as soon as a new game is added or a game is loaded. Move DAIDE port closing for specific game into Server.delete_game(). Add DAIDE port to client game field daide_port if known. [web] Display DAIDE port if available in game title on game page. - [python] Display game ID in log when opening DAIDE port. - [server] Close DAIDE port as soon as game is done. - Update dependencies.
Diffstat (limited to 'diplomacy/server/server_game.py')
-rw-r--r--diplomacy/server/server_game.py20
1 files changed, 12 insertions, 8 deletions
diff --git a/diplomacy/server/server_game.py b/diplomacy/server/server_game.py
index 6ea349e..4e90152 100644
--- a/diplomacy/server/server_game.py
+++ b/diplomacy/server/server_game.py
@@ -23,6 +23,7 @@ from diplomacy.utils.game_phase_data import GamePhaseData
class ServerGame(Game):
""" ServerGame class. Properties:
+ - server: (optional) server (Server object) that handles this game.
- omniscient_usernames (only for server games):
set of usernames allowed to be omniscient observers for this game.
- moderator_usernames (only for server games):
@@ -40,9 +41,9 @@ class ServerGame(Game):
strings.OMNISCIENT_USERNAMES: parsing.DefaultValueType(parsing.SequenceType(str, sequence_builder=set), ()),
})
- def __init__(self, **kwargs):
+ def __init__(self, server=None, **kwargs):
# Reference to a Server instance.
- self.server = None # type: diplomacy.Server
+ self.server = server # type: diplomacy.Server
self.omniscient_usernames = None # type: set
self.moderator_usernames = None # type: set
self.observer = None # type: Power
@@ -154,11 +155,9 @@ class ServerGame(Game):
""" Return a player game data object copy of this game for given power name. """
for_username = self.get_power(power_name).get_controller()
game = Game.from_dict(self.to_dict())
- game.controlled_powers = self.get_controlled_power_names(for_username)
game.error = []
game.message_history = self.get_message_history(power_name)
game.messages = self.get_messages(power_name)
- game.observer_level = self.get_observer_level(for_username)
game.phase_abbr = game.current_short_phase
related_power_names = self.get_related_power_names(power_name)
for power in game.powers.values(): # type: Power
@@ -168,36 +167,41 @@ class ServerGame(Game):
power.vote = strings.NEUTRAL
power.orders.clear()
game.role = power_name
+ game.controlled_powers = self.get_controlled_power_names(for_username)
+ game.observer_level = self.get_observer_level(for_username)
+ game.daide_port = self.server.get_daide_port(self.game_id) if self.server else None
return game
def as_omniscient_game(self, for_username):
""" Return an omniscient game data object copy of this game. """
game = Game.from_dict(self.to_dict())
- game.controlled_powers = self.get_controlled_power_names(for_username)
game.message_history = self.get_message_history(strings.OMNISCIENT_TYPE)
game.messages = self.get_messages(strings.OMNISCIENT_TYPE)
- game.observer_level = self.get_observer_level(for_username)
game.phase_abbr = game.current_short_phase
for power in game.powers.values(): # type: Power
power.role = strings.OMNISCIENT_TYPE
power.tokens.clear()
game.role = strings.OMNISCIENT_TYPE
+ game.controlled_powers = self.get_controlled_power_names(for_username)
+ game.observer_level = self.get_observer_level(for_username)
+ game.daide_port = self.server.get_daide_port(self.game_id) if self.server else None
return game
def as_observer_game(self, for_username):
""" Return an observer game data object copy of this game. """
game = Game.from_dict(self.to_dict())
- game.controlled_powers = self.get_controlled_power_names(for_username)
game.error = []
game.message_history = self.get_message_history(strings.OBSERVER_TYPE)
game.messages = self.get_messages(strings.OBSERVER_TYPE)
- game.observer_level = self.get_observer_level(for_username)
game.phase_abbr = game.current_short_phase
for power in game.powers.values(): # type: Power
power.role = strings.OBSERVER_TYPE
power.tokens.clear()
power.vote = strings.NEUTRAL
game.role = strings.OBSERVER_TYPE
+ game.controlled_powers = self.get_controlled_power_names(for_username)
+ game.observer_level = self.get_observer_level(for_username)
+ game.daide_port = self.server.get_daide_port(self.game_id) if self.server else None
return game
def cast(self, role, for_username):