75 lines
2.1 KiB
TypeScript
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,
|
|
})
|
|
}
|
|
}
|