feature/IO-2924-Refactor-Production-Board-For-Sockets - Checkpoint

Signed-off-by: Dave Richer <dave@imexsystems.ca>
This commit is contained in:
Dave Richer
2024-09-12 17:45:20 -04:00
parent 2f3056b49b
commit 08e1cf80c2
4 changed files with 80 additions and 53 deletions

View File

@@ -3,7 +3,14 @@ require("dotenv").config({
path: path.resolve(process.cwd(), `.env.${process.env.NODE_ENV || "development"}`)
});
const { io, setSessionData, clearSessionData, getMultipleSessionData, addItemToEndOfList } = require("../../server");
const {
io,
setSessionData,
clearSessionData,
getMultipleSessionData,
addItemToEndOfList,
pubClient
} = require("../../server");
const { admin } = require("../firebase/firebase-handler");
const logger = require("../utils/logger");
@@ -130,15 +137,35 @@ function registerPbsApEvents(socket) {
});
}
const getRedisKeyForSocket = (socketId) => `socket:${socketId}:rooms`;
// Room management and broadcasting events
function registerRoomAndBroadcastEvents(socket) {
// Rejoin rooms on reconnect
pubClient.lRange(getRedisKeyForSocket(socket.id), 0, -1, (err, rooms) => {
if (rooms && rooms.length > 0) {
rooms.forEach((room) => {
socket.join(room);
createLogEvent(socket, "DEBUG", `Client rejoined bodyshop room: ${room}`);
});
}
});
socket.on("join-bodyshop-room", async (bodyshopUUID) => {
socket.join(bodyshopUUID);
// Store room in Redis
pubClient.rPush(getRedisKeyForSocket(socket.id), bodyshopUUID);
await createLogEvent(socket, "DEBUG", `Client joined bodyshop room: ${bodyshopUUID}`);
});
socket.on("leave-bodyshop-room", async (bodyshopUUID) => {
socket.leave(bodyshopUUID);
// Remove room from Redis
pubClient.lRem(getRedisKeyForSocket(socket.id), 0, bodyshopUUID);
await createLogEvent(socket, "DEBUG", `Client left bodyshop room: ${bodyshopUUID}`);
});
@@ -146,8 +173,12 @@ function registerRoomAndBroadcastEvents(socket) {
io.to(bodyshopUUID).emit("bodyshop-message", message);
await createLogEvent(socket, "INFO", `Broadcast message to bodyshop ${bodyshopUUID}`);
});
}
socket.on("disconnect", () => {
// Optional: Cleanup Redis entry on disconnect if needed
createLogEvent(socket, "DEBUG", `Client disconnected: ${socket.id}`);
});
}
// DMS session clearing event
function registerDmsClearSessionEvent(socket) {
socket.on("clear-dms-session", async () => {