Я пишу игру в крестики-нолики, которая позволяет играть в игру между двумя пользователями в разных браузерах, используя HTML5, CSS, JavaScript (ES6), Node.js с модулями express und socket.io.
Каждый щелчок Клиента предоставляет номер поля (от 0 до 8), который затем используется сервером для вызова метода move и перемещения в это поле.
Проблема в том, что мне нужнозаставьте сервер по-разному реагировать на событие click для обоих клиентов, и я не могу понять, как это сделать.
Чтобы сделать его более понятным, метод move использует 2 аргумента - символ («X» или «O»)и поле (от 0 до 8), поэтому, в основном, кто щелкнул и где.
Клиенты получают свой назначенный символ при соединении, поэтому, когда каждый из них нажимает одно поле, сервер вызывает метод move, который использует клиентназначенный символ и номер поля, которые он получает от клиента в качестве аргументов.
Но как мне сделать два отдельных ответа сервера на клики от разных клиентов, учитывая, что каждый подключенный клиентский носокet помещается в массив Clients, поэтому первый клиент - это клиенты [0], а второй - клиенты [1]
Вот часть кода сервера:
let clients = [];
io.on("connection", socket => {
clients.push(socket);
if (clients.length === 1) {
io.emit("message", "Please wait for your Opponent!");
};
if (clients.length === 2) {
io.emit("message", "Two players are connected. The game can start now!");
io.to(clients[0]).emit("symbolMessage", `You play as ${player}.`);
io.to(clients[1]).emit("symbolMessage", `You play as ${nextPlayer}.`);
io.emit("turnMessage", `Next move by: ${player}`);
};
socket.on("myClick", (data) => {
myGame.move(player, data);
});
socket.on("myClick", (data) => {
myGame.move(nextPlayer, data)
});
Исоответствующая часть кода клиента:
const field = $$("td");
field.on("click", event => {
const id = event.target.id;
const fieldNumber = id.match(/\d/g).join("");
console.log(fieldNumber);
socket.emit("myClick", fieldNumber);
});