import * as SocketIO from 'socket.io'
import { authenticateSocket } from '../middlewares'
-import { UserNotificationModel } from '../models/account/user-notification'
import { logger } from '../helpers/logger'
import { Server } from 'http'
+import { UserNotificationModelForApi } from '@server/typings/models/user'
class PeerTubeSocket {
private static instance: PeerTubeSocket
- private userNotificationSockets: { [ userId: number ]: SocketIO.Socket } = {}
+ private userNotificationSockets: { [ userId: number ]: SocketIO.Socket[] } = {}
private constructor () {}
logger.debug('User %d connected on the notification system.', userId)
- this.userNotificationSockets[userId] = socket
+ if (!this.userNotificationSockets[userId]) this.userNotificationSockets[userId] = []
+
+ this.userNotificationSockets[userId].push(socket)
socket.on('disconnect', () => {
logger.debug('User %d disconnected from SocketIO notifications.', userId)
- delete this.userNotificationSockets[userId]
+ this.userNotificationSockets[userId] = this.userNotificationSockets[userId].filter(s => s !== socket)
})
})
}
- sendNotification (userId: number, notification: UserNotificationModel) {
- const socket = this.userNotificationSockets[userId]
+ sendNotification (userId: number, notification: UserNotificationModelForApi) {
+ const sockets = this.userNotificationSockets[userId]
- if (!socket) return
+ if (!sockets) return
- socket.emit('new-notification', notification.toFormattedJSON())
+ const notificationMessage = notification.toFormattedJSON()
+ for (const socket of sockets) {
+ socket.emit('new-notification', notificationMessage)
+ }
}
static get Instance () {