Я использую socket.io для обработки некоторых взаимодействий между сервером и клиентом и создания матчей для простой многопользовательской игры.
(на данный момент) я автоматически объединяю двух игроков, добавляя их в сокет. моя комната. Когда в комнате 2 игрока, я посылаю событие «startGame» в комнату, используя socket.to(ROOM).emit(EVENT, EVENT_MSG)
после проверки
на стороне сервера nodeJS:
game_start_state = checkRooms(socket, freeRooms);
if (game_start_state){
console.log("told room", game_start_state, "to start their game!")
socket.to(game_start_state).emit("startGame", game_start_state);
}
, но пока только первый сокет, подключенный к комнате, получает сообщение о событии «startGame», я осмотрелся и не видел никого другого с такой же проблемой. Ниже приведен код, который запускается после того, как клиент отправляет событие, сообщающее, что он хочет присоединиться к комнате.
на стороне сервера nodeJS:
function checkRooms(socket, roomArray) {
// auto-matchmaking logic
if(!roomArray || !roomArray.length){
//if there is no room with space create a new one
const room = uuid();
r_list.push(room); // r_list is just an array used to keep track of opened rooms for displaying to the user through some html
freeRooms.push(room); // freeRooms is an array with rooms with just 1 socket connected
joinRoom(socket, room);
return(null);
} else {
// if there is a room with a space, try to connect the client to it
const room = freeRooms[0];
console.log(socket.id, "wants to join", room);
// connect client to rooms
joinRoom(socket, room);
// room is now full so start the game
freeRooms.pop(room);
return(room);
}
}
, поскольку на данный момент существует только автоматическое сопоставление , в массиве freeRooms будет только 1 комната, так что я не беспокоюсь об этом.
Кто-нибудь знает, где я могу испортить? При необходимости может предоставить больше примеров кода.