(fastify: FastifyInstance)
| 22 | * 初始化 Socket.IO 服务 |
| 23 | */ |
| 24 | export async function initializeSocket(fastify: FastifyInstance): Promise<Server> { |
| 25 | const socketStartedAt = Date.now() |
| 26 | const elapsed = () => `${Date.now() - socketStartedAt}ms` |
| 27 | |
| 28 | fastify.log.info(`[startup:socket] initializeSocket enter elapsed=${elapsed()}`) |
| 29 | // Clean up previous instance to prevent listener accumulation during dev hot-reload |
| 30 | socketGateway?.destroy() |
| 31 | socketGateway = null |
| 32 | fastify.log.info(`[startup:socket] previous gateway cleanup done elapsed=${elapsed()}`) |
| 33 | |
| 34 | io = new Server(fastify.server, { |
| 35 | cors: { |
| 36 | origin: process.env.CORS_ORIGIN || '*', |
| 37 | methods: ['GET', 'POST'], |
| 38 | credentials: true, |
| 39 | }, |
| 40 | pingTimeout: 300000, |
| 41 | pingInterval: 25000, |
| 42 | }) |
| 43 | fastify.log.info(`[startup:socket] socket.io server created elapsed=${elapsed()}`) |
| 44 | |
| 45 | const nsp = io.of(NAMESPACE) |
| 46 | nsp.use(authMiddleware) |
| 47 | fastify.log.info(`[startup:socket] namespace middleware registered elapsed=${elapsed()}`) |
| 48 | |
| 49 | fastify.log.info(`[startup:socket] getTerminalManager start elapsed=${elapsed()}`) |
| 50 | const tm = await getTerminalManager() |
| 51 | fastify.log.info(`[startup:socket] getTerminalManager done elapsed=${elapsed()}`) |
| 52 | fastify.log.info(`[startup:socket] getNotificationService start elapsed=${elapsed()}`) |
| 53 | getNotificationService() |
| 54 | fastify.log.info(`[startup:socket] getNotificationService done elapsed=${elapsed()}`) |
| 55 | socketGateway = new SocketGateway(nsp, getEventBus(), getSessionManager(), tm) |
| 56 | fastify.log.info(`[startup:socket] SocketGateway created elapsed=${elapsed()}`) |
| 57 | nsp.on('connection', (socket) => { |
| 58 | console.log(`[Socket] Connected: ${socket.id}`) |
| 59 | socketGateway?.register(socket) |
| 60 | }) |
| 61 | |
| 62 | console.log('[Socket.IO] Initialized namespace:', NAMESPACE) |
| 63 | fastify.log.info(`[startup:socket] initializeSocket complete elapsed=${elapsed()}`) |
| 64 | |
| 65 | return io |
| 66 | } |
| 67 | |
| 68 | /** |
| 69 | * 关闭 Socket.IO 服务 |
no test coverage detected