/var/www/p4ela.kz/server/delivery/services
NameSizeModeActions
firebase/-0755rm
auth.service.js25220644editdlrm
branch.service.js72770644editdlrm
index.js7020644editdlrm
order.service.js175460644editdlrm
reserv.service.js59700644editdlrm
webSocket.service.js45630644editdlrm
Edit: /var/www/p4ela.kz/server/delivery/services/webSocket.service.js (4563B)
const { Server } = require('socket.io') const { isSet, isEmpty } = require('../api/utils/validator.util') const logger = require('../logger')({ service: 'WebSocketService' }) module.exports = class WebSocketService { constructor({ db, httpServer }) { this.io = new Server(httpServer, { origin: "*:*", cors: { origin: "*", methods: ["GET", "POST"] } }) this.io.on('connection', (socket) => { logger.child({ socket: socket.id, event: 'connection', status: 'success' }).info() socket.on('login', async ({ uid, appId }) => { logger.child({ socket: socket.id }).info('login') try { if (!isSet(uid) || isEmpty(uid)) { throw new Error('Uid required') } if (!isSet(appId) || isEmpty(appId)) { throw new Error('appId required') } const user = await db.user.findOne({ include: [{ model: db.branch, through: 'branch_users', as: 'userBranches' }], where: { uid: uid } }) if (!user) { throw new Error('User not found') } // всякие проверки, подкрлючение к группам ... socket.userId = user.id socket.uid = uid if (appId) { socket.appId = appId switch (parseInt(appId)) { case APPID.OPERATOR: socket.join('operators') if (user.userBranches) { for (const b of user.userBranches) { socket.join(`operators-branch-${b.id}`) } } break case APPID.WAITER: socket.join('waiters') if (user.userBranches) { for (const b of user.userBranches) { socket.join(`waiters-branch-${b.id}`) } } break case APPID.DRIVER: socket.join('drivers') if (user.userBranches) { for (const b of user.userBranches) { socket.join(`drivers-branch-${b.id}`) } } break case APPID.CLIENT: socket.join('clients') } } socket.emit('login', { status: 'success' }) logger.child({ socket: socket.id, event: 'login', status: 'success' }).info() } catch (error) { socket.emit('login', { status: 'error', message: error.message }) logger .child({ socket: socket.id, event: 'login', status: 'error' }) .info(error.message) } }) socket.on('disconnect', (reason) => { logger.child({ socket: socket.id, event: 'disconnect' }).info(reason) }) }) } SendToAll = (event, param) => { return this.io.emit(event, param) } SendToClients = async (event, param) => { return this.io.to('clients').emit(event, param) } SendToDrivers = async (event, param) => { return this.io.to('drivers').emit(event, param) } SendToDriversByBranch = async (branchId, event, param) => { return this.io.to(`drivers-branch-${branchId}`).emit(event, param) } SendToOperators = async (event, param) => { // const opers = await this.io.in('operators').fetchSockets() // console.log(opers) return this.io.to('operators').emit(event, param) } SendToOperatorsByBranch = async (branchId, event, param) => { return this.io.to(`operators-branch-${branchId}`).emit(event, param) } SendToWaiters = async (event, param) => { return this.io.to('waiters').emit(event, param) } SendToWaitersByBranch = async (branchId, event, param) => { return this.io.to(`waiters-branch-${branchId}`).emit(event, param) } SendToClient = async (userId, event, param) => { const sockets = (await this.io.in('clients').fetchSockets())?.filter( (p) => p.userId == userId ) if (sockets.length == 0) { return false } for (const socket of sockets) { socket.emit(event, param) } return true } SendToDriver = async (userId, event, param) => { const sockets = (await this.io.in('drivers').fetchSockets())?.filter( (p) => p.userId == userId ) if (sockets.length == 0) { return false } for (const socket of sockets) { socket.emit(event, param) } return true } SendToOperator = async (userId, event, param) => { const sockets = (await this.io.in('operators').fetchSockets())?.filter( (p) => p.userId == userId ) if (sockets.length == 0) { return false } for (const socket of sockets) { socket.emit(event, param) } return true } SendToWaiter = async (userId, event, param) => { const sockets = (await this.io.in('waiters').fetchSockets())?.filter( (p) => p.userId == userId ) if (sockets.length == 0) { return false } for (const socket of sockets) { socket.emit(event, param) } return true } }