import { logger } from './logger' export function bindShutdown(server: any, groupChatServer?: any): void { let isShuttingDown = false const shutdown = async (signal: string) => { if (isShuttingDown) return isShuttingDown = true logger.info('Shutting down (%s)...', signal) try { // Disconnect Socket.IO before HTTP server to prevent hanging if (groupChatServer) { groupChatServer.agentClients.disconnectAll() groupChatServer.getIO().close() logger.info('Socket.IO closed') } if (server) { await new Promise((resolve) => { server.close(() => { logger.info('HTTP server closed') resolve() }) }) } } catch (err) { logger.error(err, 'Shutdown error') } process.exit(0) } process.once('SIGUSR2', shutdown) process.on('SIGINT', shutdown) process.on('SIGTERM', shutdown) }