Untitled

 avatar
unknown
plain_text
a year ago
2.2 kB
2
Indexable
const AppError = require('../utils/appError.js');
const User = require('../Models/userModel.js');
const mongoose = require('mongoose');


exports.socketIndex = (io) => {

   // var clients =[];
    var clients = new Map();
    io.use(async (socket, next) => {
        const token = socket.handshake.headers.token;
        if (!token) {
            return next(new AppError('Authentication error',401));
        }
        const currentUser = await User.findById(toObjectId(token,next));
        if (!currentUser) {
         return next(new AppError('The user not have access to socket', 401));
        }
        if(currentUser.role != 'retailer' && currentUser.role != 'salesman'){
          return next(new AppError('The user not have access to socket', 401));  
        }
        socket.user = currentUser
      next()
    });

      io.on('connection', socket => {
         
        clients.set(socket.user._id.toString(),socket.id)
  
          socket.on('disconnect', function (data) {
              clients.delete(socket.user._id.toString())
      
              console.log('USER DESCONECTED ',socket.id);
              console.log('clients ',clients);
  
          });
          
          console.log('USER CONECTED ',socket.id);
  
          socket.on('msg',data =>{
            
              const Id = clients.get(data.receiveId)
              console.log('this id',Id)
              if(Id){
                io.to(Id).emit('msg', { message: data.message})  
                socket.emit('response', { message: 'this client connected', code: 200 });
              }else{
                socket.emit('response', { message: 'this client not connected', code: 204 });
              }
            
          })
          

          socket.on('error', (err) => {
            console.error('Socket error:', err);
            socket.emit('errorEvent', { message: 'A socket error occurred', code: 400 });
          });
  
      });
  
  } 


const toObjectId = (id, next) => {
try {
    return new mongoose.Types.ObjectId(id);
} catch (e) {
    return next(new AppError('Invalid id.', 401));
}
};
Editor is loading...
Leave a Comment