import { Server as HTTPServer } from "http"; import { Server, Socket } from "socket.io"; export type SocketServer = Server; export type SocketClient = Socket; export function setupSocketIO(httpServer: HTTPServer): SocketServer { const io = new Server(httpServer, { cors: { origin: process.env.CLIENT_URL || "*", methods: ["GET", "POST"], }, }); io.on("connection", (socket: SocketClient) => { console.log(`Client connected: ${socket.id}`); // Join a draft room socket.on("join-draft", (seasonId: string) => { const roomName = `draft-${seasonId}`; socket.join(roomName); console.log(`Socket ${socket.id} joined draft room: ${roomName}`); // Notify others in the room socket.to(roomName).emit("user-joined", { socketId: socket.id }); }); // Leave a draft room socket.on("leave-draft", (seasonId: string) => { const roomName = `draft-${seasonId}`; socket.leave(roomName); console.log(`Socket ${socket.id} left draft room: ${roomName}`); }); // Handle disconnection socket.on("disconnect", () => { console.log(`Client disconnected: ${socket.id}`); }); // Draft-specific events will be added in Phase 9 // For now, we're just setting up the infrastructure }); return io; } // Export a singleton instance that will be set by the server let ioInstance: SocketServer | null = null; export function setSocketIO(io: SocketServer) { ioInstance = io; } export function getSocketIO(): SocketServer { if (!ioInstance) { throw new Error("Socket.IO has not been initialized"); } return ioInstance; }