【发布时间】:2016-07-26 17:00:15
【问题描述】:
所以我有一个聊天应用程序,其中一次只能有两个用户在一个房间里。
请注意,clientInfo 是一个全局变量,每当新用户加入房间时,都会将一个对象变量与用户名和房间名称一起传递给服务器。然后执行这段代码
socket.on('joinRoom', function(userDetails){
clientInfo[socket.id] = userDetails; //variable contains name and room joined.
socket.join(userDetails.room);
}
我添加了一个功能,用户可以输入“kick”作为调用此函数的聊天消息:
function kickUser(socket){
socket.leave(clientInfo[socket.id].room);
delete clientInfo[socket.id];
}
上面的代码可以正常工作,但是我怎样才能改变函数来踢房间里的其他用户呢?我尝试了下面的代码,但最终还是把自己踢了出去。我认为 socket.leave() 不关心套接字 ID,但它只使用房间名称和调用该函数的人。
function kickUser(socket){
var info = clientInfo[socket.id];
if (typeof info == 'undefined'){
return;
}
Object.keys(clientInfo).forEach(function(socketId){
if(info.room == clientInfo[socketId].room) {
if (info.name != clientInfo[socketId].name){
socket.leave(clientInfo[socketId].room);
delete clientInfo[socketId];
}
}
});
}
【问题讨论】:
-
你希望每个用户都可以踢另一个用户和自己吗?或者您是否需要通过服务器 (=admin) 踢用户?
-
我想我对这两个问题的回答都是肯定的。我基本上希望能够选择我想要踢出的两个用户中的哪一个。目前,如果任何用户试图把某人踢出去,那个人就是他自己。