import { Server } from "socket.io"; let io; const userSocketMap = new Map(); // userId -> socketId // Initialize Socket.IO export const initSocket = (server) => { io = new Server(server, { cors: { origin: "*", // Adjust as needed for production methods: ["GET", "POST"], }, }); io.on("connection", (socket) => { console.log("A user connected:", socket.id); // Event for user to register their ID socket.on("register", (userId) => { if (userId) { userSocketMap.set(userId, socket.id); console.log(`Registered user ${userId} to socket ${socket.id}`); } }); socket.on("disconnect", () => { console.log("User disconnected:", socket.id); // Optional: Remove user from map. This is inefficient O(N). // Better: keep reverse map or just iterate. Map iteration is okay for small scale. for (const [userId, socketId] of userSocketMap.entries()) { if (socketId === socket.id) { userSocketMap.delete(userId); console.log(`Unregistered user ${userId}`); break; } } }); }); return io; }; // Get the IO instance export const getIO = () => { if (!io) { throw new Error("Socket.io not initialized!"); } return io; }; // Get socket ID for a user export const getSocketId = (userId) => { return userSocketMap.get(userId); };