diff --git a/frontend/src/components/Video/ChatPanel.tsx b/frontend/src/components/Video/ChatPanel.tsx index 383e937..d070a04 100644 --- a/frontend/src/components/Video/ChatPanel.tsx +++ b/frontend/src/components/Video/ChatPanel.tsx @@ -61,6 +61,11 @@ const ChatPanel: React.FC = ({ streamId }) => { setMessages((prev) => [...prev, data]); }); + // Handle live viewership + socket.on("status", (data: ChatMessage) => { + console.log("Live viewership: ", data) // returns dictionary {message: message, num_viewers: num_viewers} + }) + // Cleanup function return () => { window.removeEventListener("beforeunload", handleBeforeUnload); diff --git a/web_server/blueprints/chat.py b/web_server/blueprints/chat.py index f23d698..a5a903f 100644 --- a/web_server/blueprints/chat.py +++ b/web_server/blueprints/chat.py @@ -25,7 +25,13 @@ def handle_join(data) -> None: stream_id = data.get("stream_id") if stream_id: join_room(stream_id) - emit("status", {"message": f"Welcome to the chat, stream_id: {stream_id}"}, room=stream_id) + num_viewers = len(list(socketio.server.manager.get_participants("/", stream_id))) + emit("status", + { + "message": f"Welcome to the chat, stream_id: {stream_id}", + "num_viewers": num_viewers + }, + room=stream_id) @socketio.on("leave") @@ -36,7 +42,13 @@ def handle_leave(data) -> None: stream_id = data.get("stream_id") if stream_id: leave_room(stream_id) - emit("status", {"message": f"user left room {stream_id}"}, room=stream_id) + num_viewers = len(list(socketio.server.manager.get_participants("/", stream_id))) + emit("status", + { + "message": f"Welcome to the chat, stream_id: {stream_id}", + "num_viewers": num_viewers + }, + room=stream_id) @chat_bp.route("/chat/") diff --git a/web_server/blueprints/email.py b/web_server/blueprints/email.py index 8ce9373..1632d4c 100644 --- a/web_server/blueprints/email.py +++ b/web_server/blueprints/email.py @@ -31,7 +31,7 @@ def send_email(username) -> None: - Thank you for choosing Gander +

Thank you for choosing Gander

Your Gander login code is: {login_code}