59 lines
1.6 KiB
TypeScript
59 lines
1.6 KiB
TypeScript
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;
|
|
}
|