Как заставить сервер реагировать отдельно на click-событие, отправленное с разных клиентов? - PullRequest
0 голосов
/ 08 мая 2019

Я пишу игру в крестики-нолики, которая позволяет играть в игру между двумя пользователями в разных браузерах, используя 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);
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...