我在这里需要帮助。因此,现在,如果至少有两个大厅正在搜索匹配项,则当他们找到另一个正在搜索匹配项的大厅时,应该将它们重定向到匹配路线。问题在于,当另一个大厅已经在搜索比赛时,已经重定向到比赛路线的选手就是那些开始比赛的选手。因此,在结果只有游说开始第二次启动匹配的搜索将得到重定向到比赛路线。我需要以某种方式同时重定向两个大厅。有什么建议吗?
找到一个也在搜索比赛的大厅:
Lobby.findOne({searching: 1, title: {$ne: lobby.title}, in_game: 0}).then((enemyLobby) => {
if(enemyLobby){
let newMatch = Match({
lobby_one_title: lobby.title,
lobby_one_id: lobby._id,
lobby_two_title: enemyLobby.title,
lobby_two_id: enemyLobby._id
});
newMatch.save();
io.emit('match-found', {
lobbyID: lobby._id,
enemyID: enemyLobby._id
});
}
});
客户端:
socket.on('match-found', (data) => {
if(data.lobbyID === lobbyID) {
window.location.href = '/match';
}
});
这将重定向第二位开始搜索匹配项的用户。但是最初开始搜索的人不会被重定向。
编辑:
也许我可以在数据库文档中创建found
选项,以便在找到匹配项时将两个大厅found
设置为match ID
,然后可以将它们重定向?
好了,所以现在我'设置两个相同的ID的一个新的匹配的大厅:
lobby.in_game = newMatch._id;
lobby.save();
enemyLobby.in_game = newMatch._id;
enemyLobby.save();
io.emit('match-found', {
lobbyID: lobby._id,
enemyID: enemyLobby._id
});
现在我需要以某种方式既重定向没有,只是点击了搜索匹配的只有一个 我可能需要检查是否以某种方式填满了敌人大厅的in_game选项?
这很正常:
socket.on('match-found', (data) => {
if(data.lobbyID === lobbyID) {
window.location.href = '/match';
}
if(data.enemyID === lobbyID) {
window.location.href = '/match';
}
});