2014-10-25 2 views
0

Я следую за эту прекрасную 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);  
} 

ответ

2

ли вам не нужно, чтобы добавить событие разъединения на самом сокете?

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

    initGame(io, socket); 
    socket.on('disconnect', function() { 
     //socket.broadcast.emit('playerDisconnected', 'x has disconnected'); 
     socket.broadcast.emit('playerDisconnected', this.id + ' has disconnected'); 
     //if you want to emit in particular room 
     io.sockets.in('roomName').emit('playerDisconnected', this.id +' has disconnected'); 
    }); 
}); 
+0

Могу ли я знать Что такое x? Я написал, потому что я не знаю, кто отключен. Но есть ли способ узнать и рассказать, кто отключен. Значит, кто х? – Sami

+0

Вам необходимо сохранить данные, идентифицирующие пользователя. Например, когда они подключаются, если они аутентифицированы, вы можете сохранить идентификатор пользователя в объекте сокета. Затем вы можете сообщить другим пользователям, которые отключены, используя этот идентификатор пользователя. –

+0

Да. спасибо, но он транслируется всем клиентам. Мне нужно только конкретным игрокам в комнате/игре. См. Мое редактирование plz – Sami

Смежные вопросы