Dan P.
Dan P.

Reputation: 1775

Socket.io broadcast.to not working but broadcast.emit does

I'm trying to make a chat app work via rooms.

On the server side I have something like:

io.sockets.on('connection', function (socket) {
  socket.emit('connection', { userId: socket.id});
  socket.room = 'General';
  console.log(socket.room);

  socket.on('sendMessage', function (data) {
    console.log(data.room);
    // socket.broadcast.emit('receiveMessage', { data: data });
    socket.broadcast.to(data.room).emit('receiveMessage', { data: data });
  });

  socket.on('disconnect', function () {
    console.log("DISCONNECT");
    socket.emit('disconnect');
  });

});

Client-side:

  var room = 'General';
  var message  = 'test';

  socket.emit('sendMessage', { room : room, message: message });

  socket.on('receiveMessage', function (data) {
    console.log(data);
  });

When using socket.broadcast.emit, I see the console logs on the client side for all connected users. When using socket.broadcast.to(data.room), I don't see the console logs.

Room is set to 'General' for all clients upon connection.

Ideas?

Ps.: Made a mistake thinking I had to do socket.room = 'room'. It's actually socket.join('room');

Upvotes: 1

Views: 2298

Answers (1)

Dan P.
Dan P.

Reputation: 1775

socket.join('General'); instead of socket.room fixed it.

Upvotes: 2

Related Questions