fix order of command processing, add helper function for sending messages

This commit is contained in:
Xevion
2021-01-09 15:08:56 -06:00
parent 7c8d1c0d67
commit 1baf1b9cd9
2 changed files with 35 additions and 29 deletions

View File

@@ -1,4 +1,7 @@
import json
import time
import constants
HEADER_LENGTH = 10
@@ -17,3 +20,15 @@ def prepare_json(object) -> bytes:
:return: Encoded JSON
"""
return prepare(json.dumps(object))
def prepare_server_message(nickname: str, message: str, color: str, msgtime: int = None):
return prepare_json(
{
'type': constants.Types.MESSAGE,
'nickname': nickname,
'content': message,
'color': color,
'time': msgtime or int(time.time())
}
)

View File

@@ -57,14 +57,10 @@ def handle(client_id):
nickname = message['nickname']
if not clients[client_id]['has_nickname']:
print("Nickname is {}".format(nickname))
broadcast_data(helpers.prepare_json(
{
'type': constants.Types.MESSAGE,
'nickname': 'Server',
'content': f'{nickname} joined!',
'color': constants.Colors.PINK,
'time': int(time.time())
}
broadcast_data(helpers.prepare_server_message(
nickname='Server',
message=f'{nickname} joined!',
color=constants.Colors.BLACK
))
clients[client_id]['has_nickname'] = True
else:
@@ -72,19 +68,7 @@ def handle(client_id):
clients[client_id]['nickname'] = nickname
elif message['type'] == constants.Types.MESSAGE:
if message['content'] == '/reroll':
color = random.choice(constants.Colors.ALL)
colorname = constants.Colors.ALL_NAMES[constants.Colors.ALL.index(color)]
clients[client_id]['color'] = color
broadcast_data(helpers.prepare_json(
{
'type': constants.Types.MESSAGE,
'nickname': 'Server',
'content': f'Changed your color to {colorname} ({color})',
'color': constants.Colors.PINK,
'time': int(time.time())
}
))
# Echo message back to all other users
broadcast_data(helpers.prepare_json(
{
'type': constants.Types.MESSAGE,
@@ -94,19 +78,26 @@ def handle(client_id):
'time': int(time.time())
}
))
# Basic command processing
if message['content'] == '/reroll':
color = random.choice(constants.Colors.ALL)
colorName = constants.Colors.ALL_NAMES[constants.Colors.ALL.index(color)]
clients[client_id]['color'] = color
broadcast_data(helpers.prepare_server_message(
nickname='Server',
message=f'Changed your color to {colorName} ({color})',
color=constants.Colors.BLACK
))
except:
traceback.print_exc()
print(f'Closing Client {clients[client_id]["nickname"]}')
client.close()
del clients[client_id]
broadcast_data(helpers.prepare_json(
{
'type': constants.Types.MESSAGE,
'nickname': 'Server',
'content': f'{nickname} left!',
'color': constants.Colors.PINK,
'time': int(time.time())
}
broadcast_data(helpers.prepare_server_message(
nickname='Server',
message=f'{nickname} left!',
color=constants.Colors.BLACK
))
break