All files / src/models socket.model.js

12.76% Statements 6/47
0% Branches 0/2
13.33% Functions 2/15
13.33% Lines 6/45

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 894x                   4x     4x 4x       4x                                                                                                                                         4x  
const { checkJWT } = require('../helpers/jwt');
const {
  userConnected,
  userDisconnected,
  emitAllUsers,
  saveMessage,
  getAllMessagesChannel,
  saveThreadMessage,
  getAllThreadMessages,
  statusChanged,
} = require('../controllers/socket.controller');
class Socket {
  constructor(io) {
    this.io = io;
    this.socketEvent();
  }
 
  socketEvent() {
    this.io.on('connection', async (socket) => {
      console.log('client connect');
 
      const [check, uid] = checkJWT(socket.handshake.query['x-token']);
      if (!check) {
        console.log('client not valid');
        return socket.disconnect();
      }
 
      await userConnected(uid);
 
      socket.join(uid);
 
      this.io.emit('emitAllUsers', await emitAllUsers());
 
      socket.on('statusChange', async (req) => {
        await statusChanged(uid, req)
        this.io.emit('emitAllUsers', await emitAllUsers());
      })
 
      socket.on('join-channel', (room) => {
        room.forEach((item) => socket.join(item));
      });
      socket.on('join-thread-message', (room) => {
        room.forEach((item) => socket.join(item));
      });
 
      socket.on('sendMessageUser', async (data) => {
        const message = await saveMessage(data);
        this.io.to(data.to).emit('sendMessageUser', message);
        this.io.to(data.from).emit('sendMessageUser', message);
      });
 
      socket.on('emitAllUsers', async () => {
        this.io.emit('emitAllUsers', await emitAllUsers());
      });
 
      socket.on('sendMessageChannel', async (data) => {
        // socket.join(data.to);
        const message = await saveMessage(data);
        this.io.to(data.to).emit('sendMessageChannel', message);
      });
 
      socket.on('getMessagesChannel', async (room) => {
        socket.join(room);
        const roomMessages = await getAllMessagesChannel(room);
        socket.emit('getMessagesChannel', roomMessages);
      });
 
      socket.on('sendMessageThread', async (data) => {
        const threadMessage = await saveThreadMessage(data);
        this.io.to(data.to).emit('sendMessageThread', threadMessage);
      });
 
      socket.on('getThreadMessages', async (room) => {
        socket.join(room);
        const roomThreadMessages = await getAllThreadMessages(room);
        socket.emit('getThreadMessages', roomThreadMessages);
      });
 
      socket.on('disconnect', async () => {
        console.log('client disconnected', uid);
        await userDisconnected(uid);
        this.io.emit('emitAllUsers', await emitAllUsers());
      });
    });
  }
}
 
module.exports = Socket;