import { Server as HttpServer } from "http"; import { ServiceBase } from "./ServiceBase"; import { Server } from "socket.io"; import { SessionController } from "../controllers/SessionController"; export class SocketIoService extends ServiceBase{ io: Server constructor(private httpServer: HttpServer) { super() this.io = this.socketIo(httpServer); this.initListeners(); } public getServer(): Server { return this.io; } private initListeners() { const sessionController = new SessionController(); this.io.on('connection', (socket) => { console.log(`connect ${socket.id}`); if (socket.recovered) { // recovery was successful: socket.id, socket.rooms and socket.data were restored console.log("recovered!"); console.log("socket.rooms:", socket.rooms); console.log("socket.data:", socket.data); } else { console.log("new connection"); socket.join('room-general') socket.data.foo = "bar"; } socket.on('disconnect', () => { console.log('user disconnected'); }); socket.on('createSession', (data, callback) => { const response = sessionController.createSession(data, socket.id); callback(response); }); socket.on('startSession', (data, callback) => { const response = sessionController.startSession(data); callback(response); }); socket.on('joinSession', (data, callback) => { const response = sessionController.joinSession(data, socket.id); callback(response); }); // socket.on('chat message', (msg, callback) => { // io.emit('chat message', msg); // callback({ // status: 'ok', // message: 'Message received', // }) // }); }); } private socketIo(httpServer: HttpServer): Server { return new Server(httpServer, { cors: { origin: '*', }, connectionStateRecovery: { maxDisconnectionDuration: 15 * 60 * 1000, skipMiddlewares: true, }, connectTimeout: 15 * 60 * 1000, }) } }