feat: add join listener amd online user emitter
parent
5ef8e4317f
commit
bd7f4a907e
|
@ -9,11 +9,10 @@ import {
|
||||||
ErrorType,
|
ErrorType,
|
||||||
} from './core/ApiError';
|
} from './core/ApiError';
|
||||||
|
|
||||||
process.on('uncaughtException', (e) => {
|
process.on('uncaughtException', (e) => Logger.error(e));
|
||||||
Logger.error(e);
|
|
||||||
});
|
|
||||||
|
|
||||||
const app = express();
|
const app = express();
|
||||||
|
|
||||||
app.use(cors({ origin: corsUrl, optionsSuccessStatus: 200 }));
|
app.use(cors({ origin: corsUrl, optionsSuccessStatus: 200 }));
|
||||||
|
|
||||||
// catch 404 and forward to error handler
|
// catch 404 and forward to error handler
|
||||||
|
|
|
@ -13,15 +13,28 @@ const io = new Server(server, {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const userSockets = new Map();
|
const onlineUsers = new Map<string, string>();
|
||||||
|
let isEmitting = false;
|
||||||
|
let sendOnlineUsers: NodeJS.Timeout;
|
||||||
|
|
||||||
io.on('connection', (socket) => {
|
io.on('connection', (socket) => {
|
||||||
userSockets.set(socket.id, socket.id);
|
|
||||||
console.log(
|
console.log(
|
||||||
'PRODUCTION SERVER: user connected, online user count:',
|
'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) => {
|
socket.on('message', (message, callback) => {
|
||||||
console.log('PRODUCTION SERVER: ', message);
|
console.log('PRODUCTION SERVER: ', message);
|
||||||
const { from: sourceSocketId, to: targetSocketId } = 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', () => {
|
socket.on('disconnect', () => {
|
||||||
userSockets.delete(socket.id);
|
onlineUsers.delete(socket.id);
|
||||||
console.log(
|
console.log(
|
||||||
'PRODUCTION SERVER: user disconnected, online user count:',
|
'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
|
server
|
||||||
|
|
Loading…
Reference in New Issue