Я следую за эту прекрасную Tutorial сделать мой первый тест игры в node.jsвещать отсоединение клиента к конкретной комнате
Все работает отлично. Даже когда я сменил его с двух игроков на трех игроков, все равно работал нормально. Но, к сожалению, учебник не охватывал disconnect event
. Каждое событие на сервере происходит против какого-либо действия клиента. например, присоединиться к игре, ответить на звонок и т. д.
Но я застреваю в эфире для всех клиентов в комнате, когда один из пользователей теряет свое интернет-соединение, потому что он не предпринимает никаких действий для этого. По некоторым данным я нашел что-то вроде следующих
// Listen for Socket.IO Connections. Once connected, start the game logic.
io.sockets.on('connection', function (socket)
{
//console.log('client connected');
initGame(io, socket);
io.sockets.on('disconnect', function()
{
socket.broadcast.emit('playerDisconnected', 'x has disconnected');
});
});
Это не работает. И я не могу понять, как узнать и как рассказать пользователям в комнате, кто выпил. Пожалуйста, расскажите мне, что я могу сделать, чтобы сделать вопрос понятным.
Редактировать
С помощью данного ответа я могу транслировать событие отключения для всех клиентов, подключенных к серверу. Но что я могу сделать, чтобы испускать только определенные игровые клиенты, означает , откуда я мог бы получить gameid/roomid в этом случае. Я вижу в своем рабочем коде что-то вроде игрового сокета/(вот оно). но я попытался простой socket.emit('playerDisconnected', 'x has disconnected');
он не работает и emit.broadcast
работы, но не как мне нужно
function initGame(sio, socket)
{
io = sio;
gameSocket = socket;
gameSocket.emit('app_ev_connected', { message: "You are connected!" });
gameSocket.on('serv_ev_playerJoinGame', playerJoinGame);
gameSocket.on('serv_ev_getRooms',getRooms);
}
Могу ли я знать Что такое x? Я написал, потому что я не знаю, кто отключен. Но есть ли способ узнать и рассказать, кто отключен. Значит, кто х? – Sami
Вам необходимо сохранить данные, идентифицирующие пользователя. Например, когда они подключаются, если они аутентифицированы, вы можете сохранить идентификатор пользователя в объекте сокета. Затем вы можете сообщить другим пользователям, которые отключены, используя этот идентификатор пользователя. –
Да. спасибо, но он транслируется всем клиентам. Мне нужно только конкретным игрокам в комнате/игре. См. Мое редактирование plz – Sami