Socket.io сватовство

1

Я работаю над проектом, в котором я должен сделать многопользовательскую игру с линкором, я уже выполнил большую часть логики игры (Angular 6 для клиента и node.js + express для серверной части), но я в настоящее время застрял на этом, так как я новичок в socket.io, мне удалось получить это, чтобы попытаться подключить 2 игрока:

var waitingPlayer = null;

ios.on('connection', (socket) => {
    console.log('new user connected');
    if (waitingPlayer == null) {
        waitingPlayer = socket;
        waitingPlayer.emit('waitingOpponent', {
            text: "waiting for an opponent"
        });
    } else {
        console.log('Match Found');
        waitingPlayer.emit('matchFound', {
            text: "Match Found",
        });
        socket.emit('matchFound', {
            text: "Match Found"
        });
    }
});

Если я попробую это, кажется, более двух пользователей могут соединиться вместе, есть ли способ сделать какой-то вестибюль между двумя пользователями, которые будут играть в одной игре, а затем сделать больше для тех, которые будут подключаться после? Я искал документацию, но не мог найти много.

  • 1
    Похоже, вам нужно сбросить waitPlayer.
  • 0
    о, хорошо, я не осознавал этого, но тогда как я могу обмениваться данными только между двумя пользователями в игре?
Теги:
socket.io

1 ответ

1

Похоже, хорошая ситуация для использования комнаты с Socket IO. Вы можете создавать комнаты "на лету", а Socket IO в основном управляет ими для вас. Таким образом, вы можете создать комнату для каждой отдельной битвы или игры. Поместите двух пользователей в эту игровую комнату. После этого вы можете напрямую транслировать в эту комнату. Вам нужно будет каким-то образом отследить комнаты, но это должно дать вам отправную точку. Возможно, если каждая игра, которая имеет место, имеет свой собственный уникальный идентификатор, имя комнаты может быть этим ID. Затем вы можете транслировать этот идентификатор комнаты в случае необходимости.

Присоединение:

var gameId = "game_1234";
io.on('connection', function(socket){
  socket.join(gameId);
});

излучающие:

io.to(gameId).emit('some event');

https://socket.io/docs/rooms-and-namespaces/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню