简体   繁体   English

socket.io-检查客户是否在特定房间内

[英]socket.io - check if a client is in an specific room

I would like to check if an client is subscribed to an specific room. 我想检查客户是否订阅了特定房间。 I have an array where I saved the sockets and as index the username. 我有一个数组,用于保存套接字,并将用户名作为索引。 I already have an if clause but it don't work : 我已经有一个if子句,但是它不起作用:

if(io.sockets.manager.rooms['/' + data.to].indexOf(users[partner].socket.id) >= 0) {

So maybe someone have an working code. 因此,也许有人拥有有效的代码。

UPDATE: code: 更新:代码:

/* MYSQL SETUP HERE FOR CONNECTION */
var count = 0;
var messages = 0;
var users = {};

var io = require('socket.io')(3000);

io.sockets.on('connection', function(client) {
    count++;
    client.emit('send login');
    client.on('login user',function (data) {
        if(data.name in users) {

        } else {
            client.u_name = data.name;
            client.u_id = data.id;
            users[client.u_id] = {'name':client.username,'socket':client};
            io.sockets.emit('online users', { 'count': count });
        }
    });
  client.on('disconnect', function(){
    count--;
    delete users[client.username];
    io.sockets.emit('online users', { 'count': count });
  });
  client.on('join',function(room){
    client.join(room);
  });
  client.on('leave',function(room){
    client.leave(room);
  });
  client.on('new message',function (data) {
    if(client.u_id in users) {
          connection.query('INSERT INTO chats_msg(u_from,chat_id,msg) VALUES(?,?,?)', [client.u_id,data.to,data.msg], function(err, rows, fields) {
              if (err) console.log(colors.red('ERROR at Query'));
              query('UPDATE chats SET last_msg=?,last_time=CURRENT_TIMESTAMP,last_from=? WHERE id=?',[data.msg,client.u_id,data.to]);
            });
        io.sockets.in(data.to).emit('message',{'msg':data.msg,'from':client.u_name});
        connection.query('SELECT * FROM chats WHERE id=? LIMIT 1', data.to, function(err, rows, fields) {
              if (err) console.log(colors.red('ERROR at QUERY'));
              if(rows[0].u_1 == client.u_id) {
                var partner = rows[0].u_2;
              } else {
                var partner = rows[0].u_1;
              }
              if(io.sockets.manager.rooms['/' + data.to].indexOf(users[partner].socket.id) >= 0) {
                  users[partner].socket.emit('error msg','New message');
                } else {
                    users[partner].socket.emit('error msg','YEAHH');
                }
            });
        messages++;
      } else {
        client.emit('error msg','Client or you are not online');
      }
  });
});

Using the socket id you can do: 使用套接字ID,您可以执行以下操作:

io.sockets.adapter.sids[socket.id][roomname]

it will be true if is the socket is in room and undefined if it is not 如果插座在室内,则为true;否则,则为undefined

(version 1.4.5) (版本1.4.5)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM