summaryrefslogtreecommitdiff
path: root/swiftstory/SwiftStory.py
diff options
context:
space:
mode:
authorOlivier Gayot <olivier.gayot@sigexec.com>2020-09-13 01:02:50 +0200
committerOlivier Gayot <olivier.gayot@sigexec.com>2020-09-13 01:02:50 +0200
commite07f10a7556aebcb1a8822835ebf202ca55467fa (patch)
treec6521cecc8998c7df235b99835d8c74179be51f3 /swiftstory/SwiftStory.py
parentac77d76af2944c7f87a3e5e37ce654950926dfa9 (diff)
Use callbacks to handle the opcodes
Signed-off-by: Olivier Gayot <olivier.gayot@sigexec.com>
Diffstat (limited to 'swiftstory/SwiftStory.py')
-rw-r--r--swiftstory/SwiftStory.py50
1 files changed, 26 insertions, 24 deletions
diff --git a/swiftstory/SwiftStory.py b/swiftstory/SwiftStory.py
index dc55e2a..b7dbb6d 100644
--- a/swiftstory/SwiftStory.py
+++ b/swiftstory/SwiftStory.py
@@ -14,18 +14,9 @@ from swiftstory.Status import error
game_manager = swiftstory.GameManager.GameManager()
-def message_received_handler(client, message):
- try:
- json_msg = json.loads(message)
- except json.JSONDecodeError:
- return error('badly formatted json')
- try:
- op = json_msg['op']
- except (KeyError, TypeError):
- op = None
-
- if op == 'join_game':
+def message_received_handler(client, message):
+ def join_game():
try:
game_name = json_msg['game_name']
except KeyError:
@@ -33,15 +24,8 @@ def message_received_handler(client, message):
else:
lang = json_msg.get('lang')
return client.join_game(game_name, lang)
- elif op == 'view_player_cards':
- return client.view_player_cards()
- elif op == 'view_black_card':
- return client.view_black_card()
- elif op == 'view_played_cards':
- return client.view_played_cards()
- elif op == 'pick_black_card':
- return client.pick_black_card()
- elif op == 'designate_card':
+
+ def designate_card():
card_id = None
try:
card_id = int(json_msg['card_id'])
@@ -49,16 +33,34 @@ def message_received_handler(client, message):
pass
finally:
return client.designate_card(card_id)
- elif op == 'play_white_card':
+
+ def play_white_card():
try:
card_id = int(json_msg['card_id'])
except KeyError:
return error('field `card_id\' is required')
else:
return client.play_white_card(card_id)
- elif op == 'collect_cards':
- return client.collect_cards()
- else:
+
+ opcodes_map = {
+ "join_game": join_game,
+ "view_player_cards": lambda: client.view_player_cards(),
+ "view_black_card": lambda: client.view_black_card(),
+ "view_played_cards": lambda: client.view_played_cards(),
+ "pick_black_card": lambda: client.pick_black_card(),
+ "collect_cards": lambda: client.collect_cards(),
+ "designate_card": designate_card,
+ "play_white_card": play_white_card,
+ }
+
+ try:
+ json_msg = json.loads(message)
+ except json.JSONDecodeError:
+ return error('badly formatted json')
+
+ try:
+ return opcodes_map[json_msg["op"]]()
+ except (KeyError, TypeError):
return error('invalid command')