mirror of
https://github.com/Xevion/tcp-chat.git
synced 2025-12-07 01:16:44 -06:00
fix order of command processing, add helper function for sending messages
This commit is contained in:
15
helpers.py
15
helpers.py
@@ -1,4 +1,7 @@
|
|||||||
import json
|
import json
|
||||||
|
import time
|
||||||
|
|
||||||
|
import constants
|
||||||
|
|
||||||
HEADER_LENGTH = 10
|
HEADER_LENGTH = 10
|
||||||
|
|
||||||
@@ -17,3 +20,15 @@ def prepare_json(object) -> bytes:
|
|||||||
:return: Encoded JSON
|
:return: Encoded JSON
|
||||||
"""
|
"""
|
||||||
return prepare(json.dumps(object))
|
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())
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|||||||
49
oserver.py
49
oserver.py
@@ -57,14 +57,10 @@ def handle(client_id):
|
|||||||
nickname = message['nickname']
|
nickname = message['nickname']
|
||||||
if not clients[client_id]['has_nickname']:
|
if not clients[client_id]['has_nickname']:
|
||||||
print("Nickname is {}".format(nickname))
|
print("Nickname is {}".format(nickname))
|
||||||
broadcast_data(helpers.prepare_json(
|
broadcast_data(helpers.prepare_server_message(
|
||||||
{
|
nickname='Server',
|
||||||
'type': constants.Types.MESSAGE,
|
message=f'{nickname} joined!',
|
||||||
'nickname': 'Server',
|
color=constants.Colors.BLACK
|
||||||
'content': f'{nickname} joined!',
|
|
||||||
'color': constants.Colors.PINK,
|
|
||||||
'time': int(time.time())
|
|
||||||
}
|
|
||||||
))
|
))
|
||||||
clients[client_id]['has_nickname'] = True
|
clients[client_id]['has_nickname'] = True
|
||||||
else:
|
else:
|
||||||
@@ -72,19 +68,7 @@ def handle(client_id):
|
|||||||
clients[client_id]['nickname'] = nickname
|
clients[client_id]['nickname'] = nickname
|
||||||
|
|
||||||
elif message['type'] == constants.Types.MESSAGE:
|
elif message['type'] == constants.Types.MESSAGE:
|
||||||
if message['content'] == '/reroll':
|
# Echo message back to all other users
|
||||||
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())
|
|
||||||
}
|
|
||||||
))
|
|
||||||
broadcast_data(helpers.prepare_json(
|
broadcast_data(helpers.prepare_json(
|
||||||
{
|
{
|
||||||
'type': constants.Types.MESSAGE,
|
'type': constants.Types.MESSAGE,
|
||||||
@@ -94,19 +78,26 @@ def handle(client_id):
|
|||||||
'time': int(time.time())
|
'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:
|
except:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
print(f'Closing Client {clients[client_id]["nickname"]}')
|
print(f'Closing Client {clients[client_id]["nickname"]}')
|
||||||
client.close()
|
client.close()
|
||||||
del clients[client_id]
|
del clients[client_id]
|
||||||
broadcast_data(helpers.prepare_json(
|
broadcast_data(helpers.prepare_server_message(
|
||||||
{
|
nickname='Server',
|
||||||
'type': constants.Types.MESSAGE,
|
message=f'{nickname} left!',
|
||||||
'nickname': 'Server',
|
color=constants.Colors.BLACK
|
||||||
'content': f'{nickname} left!',
|
|
||||||
'color': constants.Colors.PINK,
|
|
||||||
'time': int(time.time())
|
|
||||||
}
|
|
||||||
))
|
))
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user