diff --git a/client/src/pages/room/[slug].jsx b/client/src/pages/room/[slug].jsx index 6bfde31..5a4643a 100644 --- a/client/src/pages/room/[slug].jsx +++ b/client/src/pages/room/[slug].jsx @@ -1,6 +1,21 @@ -import React from 'react' +import { useSocket } from '@/context/SocketProvider'; +import React, { useCallback, useEffect } from 'react' const RoomPage = () => { + const socket = useSocket(); + + const handleUserJoined = useCallback(({ email, id }) => { + console.log(`Email ${email} joined the room!`); + }, []) + + useEffect(() => { + socket.on("user:joined", handleUserJoined); + + return () => { + socket.off("user:joined", handleUserJoined); + }; + }, [socket, handleUserJoined]); + return (

RoomPage

) diff --git a/server/index.js b/server/index.js index 97b2dbd..b485a59 100644 --- a/server/index.js +++ b/server/index.js @@ -1,4 +1,4 @@ -const { Server, Socket } = require('socket.io'); +const { Server} = require('socket.io'); const io = new Server(8080, { cors: true @@ -11,13 +11,16 @@ const socketToEmail = new Map(); io.on("connection", (socket) => { console.log(`Socket Connected: ${socket.id}`); - socket.on('room:join', data => { + socket.on("room:join", data => { const { email, room } = data; emailToSocket.set(email, socket.id); socketToEmail.set(socket.id, email); + socket.join(room); + io.to(room).emit("user:joined", { email, id: socket.id }); + // emits a 'room:joined' event back to the client // that just joined the room. - io.to(socket.id).emit('room:join', data); + io.to(socket.id).emit("room:join", data); }) }) \ No newline at end of file