2013-11-27 3 views
0
var connectionHandler = function(socket) { 
var player = null; 

socket.on('login', function(data) { 
    player = { 
     data: okeyServer.playerJoin(data), 
     socket: socket 
      }; 
    socket.emit('welcome'); 
}); 

socket.on('info server', function(data) { 
    var info = okeyServer.Info(); 
    socket.emit('info server', info); 
}); 

socket.on('join game', function (data) { 
    var gameid = data.gameid; 
    var side = data.side; 
    okeyServer.playerJoinGame(player, gameid, side); 
}); 

socket.on('disconnect', function() { 
    okeyServer.playerLeave(player); 
    io.sockets.emit('player leave', player); 
}); 
} 

Я пытаюсь сделать многопользовательское игровое приложение с socket.io. Когда игрок подключается, я хочу сначала отправить сообщение «login». и я инициализирую переменную игрока для дальнейшего использования. Другие сообщения используют переменную игрока позже.Socket io многопользовательская игровая инфраструктура

Как я могу убедиться, что клиент отправил сообщение 'login' перед другими запросами. Я могу проверить, является ли игрок нулевым по каждому запросу, где мне нужен игрок, но это кажется уродливым.

ответ

0

Вы можете установить другие слушатель внутри login слушателя:

var connectionHandler = function(socket) { 
    var player = null; 

    socket.on('login', function(data) { 
    // If we already have a player, just return a `welcome` message. 
    if (player !== null) { 
     return socket.emit('welcome'); 
    } 

    // Store player. 
    player = { 
     data: okeyServer.playerJoin(data), 
     socket: socket 
    }; 

    // Emit welcome message. 
    socket.emit('welcome'); 

    // Set up the rest of the listeners. 
    socket.on('info server', function(data) { 
     var info = okeyServer.Info(); 
     socket.emit('info server', info); 
    }); 

    socket.on('join game', function (data) { 
     var gameid = data.gameid; 
     var side = data.side; 
     okeyServer.playerJoinGame(player, gameid, side); 
    }); 

    socket.on('disconnect', function() { 
     okeyServer.playerLeave(player); 
     io.sockets.emit('player leave', player); 
    }); 
    }); 
}; 

Это предполагает, что login сообщения только когда выработан один раз клиента в течение всего срока службы соединения. Если это не так, вам нужно внести некоторые изменения.

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