|
|
@ -33,6 +33,7 @@ export class SiteIoServer extends SiteCommon { |
|
|
|
super(dtp); |
|
|
|
this.dtp = dtp; |
|
|
|
this.log = new SiteLog(dtp, SiteIoServer); |
|
|
|
this.sessions = { }; |
|
|
|
} |
|
|
|
|
|
|
|
async start (httpServer) { |
|
|
@ -121,8 +122,23 @@ export class SiteIoServer extends SiteCommon { |
|
|
|
this.log.error('Redis error', { error }); |
|
|
|
} |
|
|
|
|
|
|
|
async stop ( ) { |
|
|
|
this.log.info('stopping Socket.io server'); |
|
|
|
async shutdown ( ) { |
|
|
|
const { chat: chatService } = this.dtp.services; |
|
|
|
this.log.alert('Socket.io server shutting down'); |
|
|
|
|
|
|
|
for (const socketId in this.sessions) { |
|
|
|
const session = this.sessions[socketId]; |
|
|
|
|
|
|
|
this.log.debug('leaving joined rooms', { size: session.joinedRooms.size }); |
|
|
|
for (const roomId of session.joinedRooms) { |
|
|
|
const room = await chatService.getRoomById(roomId); |
|
|
|
await chatService.chatRoomCheckOut(room, session.user); |
|
|
|
} |
|
|
|
session.joinedRooms.clear(); |
|
|
|
|
|
|
|
this.log.debug('closing socket connection', { socketId }); |
|
|
|
await session.socket.disconnect(true); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
async onSocketConnect (socket) { |
|
|
@ -197,6 +213,7 @@ export class SiteIoServer extends SiteCommon { |
|
|
|
joinedChannels: new Set(), |
|
|
|
joinedRooms: new Map(), |
|
|
|
}; |
|
|
|
this.sessions[socket.id] = session; |
|
|
|
|
|
|
|
session.onSocketDisconnect = this.onSocketDisconnect.bind(this, session); |
|
|
|
socket.on('disconnect', session.onSocketDisconnect); |
|
|
@ -291,6 +308,8 @@ export class SiteIoServer extends SiteCommon { |
|
|
|
session.socket.off('user-chat', session.onUserChat); |
|
|
|
delete session.onUserChat; |
|
|
|
} |
|
|
|
|
|
|
|
delete this.sessions[session.socket.id]; |
|
|
|
} |
|
|
|
|
|
|
|
async onJoinChannel (session, message) { |
|
|
|