socket.io - 检查客户是否在特定房间
socket.io - check if a client is in an specific room
我想检查客户是否订阅了特定的房间。我有一个数组,我在其中保存了套接字并索引用户名。我已经有一个 if 子句,但它不起作用:
if(io.sockets.manager.rooms['/' + data.to].indexOf(users[partner].socket.id) >= 0) {
所以也许有人有一个工作代码。
更新:法典:
/* 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');
}
});
});
使用套接字 ID 可以执行以下操作:
io.sockets.adapter.sids[socket.id][roomname]
如果套接字在房间内,则为真,如果不是,则未定义
(版本 1.4.5)
相关文章:
- 访问布局信息是否也会导致浏览器重排
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 如何检测是否有溢出
- jQuery中是否内置了任何字符串格式化函数
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 测试索引值是否等于某个数字的倍数
- Fancybox是否将Click事件静音
- 主干-不管怎样,检查事件以前是否绑定过
- YUI3 IO实用程序是否可以根据给定的内容类型标头值自动序列化数据
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 是否可以禁用jquery中的单个单选按钮
- 是否可以从父类访问子类的属性
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- 检查给定的开始日期和结束日期之间是否有可用的房间时间
- socket.io - 检查客户是否在特定房间
- 如何验证房间号是否不在数据库中
- 是否可以监听房间的加入和离开事件?