Modify the server and webclient to allow for timestamps and the room that the message came from.
This commit is contained in:
parent
21820453bd
commit
66202e154b
2 changed files with 25 additions and 7 deletions
|
|
@ -7,6 +7,7 @@ import threading
|
||||||
from flask import Flask, request, jsonify
|
from flask import Flask, request, jsonify
|
||||||
from flask_socketio import SocketIO, emit, join_room, leave_room
|
from flask_socketio import SocketIO, emit, join_room, leave_room
|
||||||
from flask_cors import CORS
|
from flask_cors import CORS
|
||||||
|
from datetime import datetime # Import for timestamps
|
||||||
|
|
||||||
# Flask app for REST API and WebSocket
|
# Flask app for REST API and WebSocket
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
|
|
@ -74,16 +75,24 @@ def get_client_uuid(client_socket, uuid_dict):
|
||||||
|
|
||||||
def handle_message(username, chat_room, message):
|
def handle_message(username, chat_room, message):
|
||||||
"""Store the message in history and broadcast it to all clients."""
|
"""Store the message in history and broadcast it to all clients."""
|
||||||
|
# Add a timestamp to the message
|
||||||
|
timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
||||||
|
|
||||||
# Store the message in the chat room's history
|
# Store the message in the chat room's history
|
||||||
if chat_room not in message_history:
|
if chat_room not in message_history:
|
||||||
message_history[chat_room] = []
|
message_history[chat_room] = []
|
||||||
message_history[chat_room].append(f"{username}: {message}")
|
message_history[chat_room].append(f"[{timestamp}] {username}: {message}")
|
||||||
|
|
||||||
# Broadcast the message to WebSocket clients in the chat room
|
# Broadcast the message to WebSocket clients in the chat room
|
||||||
socketio.emit('message', {'username': username, 'message': message}, room=chat_room)
|
socketio.emit('message', {
|
||||||
|
'username': username,
|
||||||
|
'message': message,
|
||||||
|
'timestamp': timestamp,
|
||||||
|
'chat_room': chat_room
|
||||||
|
}, room=chat_room)
|
||||||
|
|
||||||
# Broadcast the message to socket-based clients in the chat room
|
# Broadcast the message to socket-based clients in the chat room
|
||||||
send_message = f"{username} >> {message}".encode('utf-8')
|
send_message = f"[{timestamp}] {username} >> {message}".encode('utf-8')
|
||||||
for client_sock in socket_list:
|
for client_sock in socket_list:
|
||||||
if client_sock != server_socket and chat_rooms.get(client_sock) == chat_room:
|
if client_sock != server_socket and chat_rooms.get(client_sock) == chat_room:
|
||||||
client_sock.send(send_message)
|
client_sock.send(send_message)
|
||||||
|
|
@ -134,6 +143,7 @@ def handle_command(username, chat_room, command, sock=None):
|
||||||
else:
|
else:
|
||||||
target_username = parts[1]
|
target_username = parts[1]
|
||||||
dm_message = parts[2]
|
dm_message = parts[2]
|
||||||
|
timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
||||||
target_sock = None
|
target_sock = None
|
||||||
for s, info in client_info.items():
|
for s, info in client_info.items():
|
||||||
if info.get("username") == target_username:
|
if info.get("username") == target_username:
|
||||||
|
|
@ -141,11 +151,16 @@ def handle_command(username, chat_room, command, sock=None):
|
||||||
break
|
break
|
||||||
if target_sock:
|
if target_sock:
|
||||||
sender_username = username
|
sender_username = username
|
||||||
target_sock.send(f"DM from {sender_username}: {dm_message}\n".encode('utf-8'))
|
target_sock.send(f"[{timestamp}] DM from {sender_username}: {dm_message}\n".encode('utf-8'))
|
||||||
if sock:
|
if sock:
|
||||||
sock.send(b"\nDirect message sent.\n")
|
sock.send(f"[{timestamp}] Direct message sent.\n".encode('utf-8'))
|
||||||
else:
|
else:
|
||||||
socketio.emit('message', {'username': 'Server', 'message': "Direct message sent."}, room=chat_room)
|
socketio.emit('message', {
|
||||||
|
'username': sender_username,
|
||||||
|
'message': dm_message,
|
||||||
|
'timestamp': timestamp,
|
||||||
|
'chat_room': 'Direct Message'
|
||||||
|
}, room=chat_room)
|
||||||
else:
|
else:
|
||||||
error_message = "User not found."
|
error_message = "User not found."
|
||||||
if sock:
|
if sock:
|
||||||
|
|
@ -215,6 +230,7 @@ def get_history():
|
||||||
if chat_room not in message_history:
|
if chat_room not in message_history:
|
||||||
return jsonify({"messages": []}) # Return an empty list if no history exists
|
return jsonify({"messages": []}) # Return an empty list if no history exists
|
||||||
|
|
||||||
|
# Return the full message history with timestamps
|
||||||
return jsonify({"messages": message_history[chat_room]})
|
return jsonify({"messages": message_history[chat_room]})
|
||||||
|
|
||||||
# WebSocket event handlers
|
# WebSocket event handlers
|
||||||
|
|
|
||||||
|
|
@ -197,7 +197,9 @@
|
||||||
// Listen for messages from the server
|
// Listen for messages from the server
|
||||||
socket.on('message', (data) => {
|
socket.on('message', (data) => {
|
||||||
const messageElement = document.createElement('div');
|
const messageElement = document.createElement('div');
|
||||||
messageElement.textContent = `${data.username || 'Server'}: ${data.message}`;
|
const timestamp = data.timestamp ? `[${data.timestamp}]` : '';
|
||||||
|
const chatRoomInfo = data.chat_room ? `(${data.chat_room})` : '';
|
||||||
|
messageElement.textContent = `${timestamp} ${data.username || 'Server'} ${chatRoomInfo}: ${data.message}`;
|
||||||
chatDiv.appendChild(messageElement);
|
chatDiv.appendChild(messageElement);
|
||||||
chatDiv.scrollTop = chatDiv.scrollHeight; // Auto-scroll to the bottom
|
chatDiv.scrollTop = chatDiv.scrollHeight; // Auto-scroll to the bottom
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue