import type { Server as HttpServer } from "node:http" import { Server } from "socket.io" import type { ClientToServerEvents, InterServerEvents, ServerToClientEvents, SocketData, } from "@nerdware/shared" import { env } from "./env" import { registerRoomHandlers } from "./handlers" import { RoomManager } from "./rooms" /** Serveur Socket.IO entièrement typé via les events partagés. */ export type IoServer = Server< ClientToServerEvents, ServerToClientEvents, InterServerEvents, SocketData > /** Crée et attache le serveur Socket.IO au serveur HTTP de Fastify. */ export function createSocketServer(httpServer: HttpServer): IoServer { const io: IoServer = new Server(httpServer, { cors: { origin: env.corsOrigins, methods: ["GET", "POST"], }, }) const rooms = new RoomManager() io.on("connection", (socket) => { console.log(`[ws] connect ${socket.id}`) registerRoomHandlers(io, socket, rooms) socket.on("disconnect", (reason) => { console.log(`[ws] disconnect ${socket.id} (${reason})`) }) }) return io }