0

FE

  useEffect(() => {
    socket.current = io(process.env.REACT_APP_BE_URL);
    socket.current.emit('new-user-add', user._id);
    socket.current.on('get-users', (users) => {
      console.log('GET USERS');
      dispatch(setOnlineUsers(users));
    });
    return () => {
      socket.current.off('new-user-add');
      socket.current.off('get-users');
      socket.current.disconnect();
    };
  }, [user._id]);

BE

socket.on("new-user-add", (newUserId:String) => {
     
          if (!activeUsers.some((user) => user.userId === newUserId)) {

          activeUsers.push({ userId: newUserId,socketId: socket.id });
        }
           socket.emit("get-users", activeUsers);
       
      });

    
      socket.on("disconnect" ,()=> {
        activeUsers = activeUsers.filter( user => user.socketId !== socket.id)
  
        socket.emit( "get-users", activeUsers)
        
      })

Hello, I would like to know where the problem is. I emit the 'get-users' in the BE when new user connects and also when they disconnect. I can confirm that is happening. However the FE never pics up on the 'get-users' event unless it is the FE itself connecting.

  • `socket` refers to the current socket. If you want to emit event to all users you have to use `io` object – Konrad Nov 06 '22 at 11:58
  • Does this answer your question? [Update all clients using Socket.io?](https://stackoverflow.com/questions/7352164/update-all-clients-using-socket-io) – Konrad Nov 06 '22 at 11:59
  • https://socket.io/docs/v3/emit-cheatsheet/ – Konrad Nov 06 '22 at 11:59

0 Answers0