2017-09-09 26 views
0

我使用的是带有Node.js的Socket.io,我想将用户配对并将它们发送到新房间。将另一个用户移动到使用Socket.io的房间

当用户连接时,在io.on('connection')之内,我确定它们与等待在数组中配对的用户的兼容性。

如果加入的用户与等待的用户兼容,我想将他们都移到新房间。

这是我目前的做法。注意:[1029387,1983934,9243802]是一组用户标识。

var pendingPlayers = { 
    "spelling": { 
     "level1":[1029387,1983934,9243802], 
     "level2":[] 
    } 
} 


io.on('connection', function(socket) { 
    // check compatibility 
    // move current player and other queued player to new room 
}); 

我唯一的想法是socket.emit('room', 'new room name');从服务器到客户端,为排队的玩家这个ID发送回服务器,然后使用:

io.on('connection', function(socket) { 
    socket.on('room', function(room) { 
     socket.join(room); 
    }); 
}); 

然而,发送房间名称客户端,然后将其发送回服务器似乎非常牵强。我希望有一个更简单的方法。

您的建议,感激地收到。

+0

为什么从服务器发送室到客户端?只需将客户端从服务器移动到该房间即可。无需要求客户帮你做到这一点。 – jfriend00

+0

谢谢jfriend00,但我需要将另一个用户移动到另一个房间(而不是用户)。希望这是有道理的? – Joel

+0

没有理由不能在服务器上按照你想要的那样做 - 对于当前连接到服务器的任何用户。您使用哪些信息来识别您的用户? – jfriend00

回答

1

根据您的评论

如果已经没有球员在pendingPlayers对象为 各自的水平,谁被加入游戏添加到 pendingPlayers对象的用户。

而不是移动到对象,使一个新的房间只有这个级别的玩家。现在,当新的球员来按您的评论

那么,是谁请求加入相应级别的下一个玩家将 用即.push()'从对应的该级别的阵列 编玩家ID配对。

使下一个玩家加入上述房间。

1

也许你需要一些像在战列舰游戏中的逻辑。这是临时使用的“候诊室”。我在这里找到: https://github.com/inf123/NodeBattleship/blob/master/server.js

io.on('connection', function (socket) { 
 

 
    //firstly add player to room until opponent aren't come 
 
    socket.join('waiting room'); 
 

 
    joinWaitingPlayers(); 
 
}); 
 

 
function joinWaitingPlayers() { 
 
    var clients = []; 
 
    for (var id in io.sockets.adapter.rooms['waiting room']) { 
 
    clients.push(io.sockets.adapter.nsp.connected[id]); 
 
    } 
 

 
    if (clients.length >= 2) { 
 
    //if we have a couple, then start the game 
 
    var game = new Game(); 
 

 
    // live "waiting room" 
 
    clients[0].leave('waiting room'); 
 
    clients[1].leave('waiting room'); 
 
    // and then join both to another room 
 
    clients[0].join('game' + game.id); 
 
    clients[1].join('game' + game.id); 
 

 
    } 
 
}

相关问题