domino-server/src/server/services/SocketIoService.ts
2024-07-05 01:19:43 +02:00

75 lines
2.1 KiB
TypeScript

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,
})
}
}