brackt/server/socket.ts

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;
}