#javascript #node.js #express #server
Вопрос:
Итак, у меня есть эта игра, сервер которой построен на colyseus v0.12.0. Я хочу выяснить, убил ли игрок игровой экземпляр или он потерял подключение к Интернету.
- если он убьет игру — отобразится табло других игроков, и все игроки покинут комнату, и она будет удалена.
- если у его телефона проблемы с Интернетом — мы пытаемся подключиться в течение определенного времени, если он вернется, мы возобновляем игру, если он не вернется, мы заставляем выйти из игры и показываем табло.
Вот код onLeave на сервере.
onLeave(consented)
является логическим параметром, если он возвращает значение true, то это означает, что игрок вышел из
игры из опции «Выход из игр» в игре. если согласие является ложным, это означает, что либо экземпляр игры был убит пользователем, либо у него проблемы с Интернетом. Я хочу провести различие между этими двумя — «чтобы я мог заставить других игроков ждать, если это проблема с повторным подключением, или завершить игру, если он убил экземпляр игры».
async onLeave(client, consented) {
console.log("===============Leave ================");
console.log(consented, "----Client Left----", client.sessionId);
console.log(consented, "---------- Left----",
this.state.players[client.sessionId].name);
console.log(consented, "---------- player----",
this.ClientUserName);
//this.state.players[client.sessionId].connected = false;
try {
// //Reconnection of client
if (consented) {
//this.allowReconnection(client,70);
console.log("----consented true----", client.sessionId);
console.log("--------ROOM DISOPOSED------consented",
this.ourRoomName);
if (this.ClientUserName[0] ===
this.state.players[client.sessionId].name) {
this.playersInRoom = 0;
console.log("1111111111111111111111");
this.broadcast(
{
en: "QuitLobby",
value: "host quit the lobby",
}, { except: client });
/* for (var i = 0; i < this.ClientId.length; i ) {
delete this.state.players[this.ClientId[i]];
}*/
this.disconnect();
this.ClientId = [];
this.ClientAvatar = [];
this.setState(this.state);
}
else {
this.playersInRoom--;
this.playerCount--;
console.log(this.users.length)
for (let i = 0; i < this.ClientUserName.length; i ) {
if (this.ClientUserName[i] ===
this.state.players[client.sessionId].name) {
this.ClientUserName.splice(i, 1);
this.ClientId.splice(i, 1);
this.ClientAvatar.splice(i, 1);
this.users.splice(i 1, 1);
}
}
console.log(this.playersInRoom)
console.log(this.users.length)
this.broadcast({
en: 'playerInfo',
playerData: {
idArr: this.ClientId,
nameArr: this.ClientUserName,
avatarArr: this.ClientAvatar // added avtar
}
})
}
}
else {
await this.allowReconnection(client, 20);
this.state.players[client.sessionId].connected = true;
// delete this.state.players[client.sessionId]; //after
reconnection the player is not able to see anybody else's card
this.broadcast({
en: 'DisconnectedTemp',
value: client.sessionId,
})
console.log("----Client Reconnect----", client.sessionId);
}
} catch (e) {
delete this.state.players[client.sessionId];
}
}