diff --git a/backend/src/app.ts b/backend/src/app.ts index 8f90528..a43a7bc 100644 --- a/backend/src/app.ts +++ b/backend/src/app.ts @@ -9,11 +9,10 @@ import { ErrorType, } from './core/ApiError'; -process.on('uncaughtException', (e) => { - Logger.error(e); -}); +process.on('uncaughtException', (e) => Logger.error(e)); const app = express(); + app.use(cors({ origin: corsUrl, optionsSuccessStatus: 200 })); // catch 404 and forward to error handler diff --git a/backend/src/server.ts b/backend/src/server.ts index 6b21ba0..7aefb2e 100644 --- a/backend/src/server.ts +++ b/backend/src/server.ts @@ -13,15 +13,28 @@ const io = new Server(server, { }, }); -const userSockets = new Map(); +const onlineUsers = new Map(); +let isEmitting = false; +let sendOnlineUsers: NodeJS.Timeout; io.on('connection', (socket) => { - userSockets.set(socket.id, socket.id); console.log( 'PRODUCTION SERVER: user connected, online user count:', - userSockets.size, + onlineUsers.size, ); + socket.on('join', (data) => { + const { socketId, name = socketId } = data; + onlineUsers.set(socketId, name); + // console.log( + // 'PRODUCTION SERVER: user joined, online user count:', + // 'socketId: ', + // socketId, + // 'name: ', + // name, + // ); + }); + socket.on('message', (message, callback) => { console.log('PRODUCTION SERVER: ', message); const { from: sourceSocketId, to: targetSocketId } = message; @@ -34,19 +47,25 @@ io.on('connection', (socket) => { } }); - socket.on('online_user', () => { - console.log('PRODUCTION SERVER: online_user'); - const onlineUsers = Array.from(userSockets.values()); - io.to(socket.id).emit('online_user', onlineUsers); - }); - socket.on('disconnect', () => { - userSockets.delete(socket.id); + onlineUsers.delete(socket.id); console.log( 'PRODUCTION SERVER: user disconnected, online user count:', - userSockets.size, + onlineUsers.size, ); + if (isEmitting && onlineUsers.size === 0) { + clearInterval(sendOnlineUsers); + isEmitting = false; + } }); + + if (!isEmitting) { + sendOnlineUsers = setInterval( + () => io.emit('online_user', Object.fromEntries(onlineUsers)), + 5000, + ); + isEmitting = true; + } }); server