如何使服务器对从不同客户端发送的点击事件分别做出反应?

时间:2019-05-08 18:33:17

标签: javascript node.js express socket.io

我正在编写一个井字游戏,该游戏允许使用HTML5,CSS,JavaScript(ES6),带有快速und socket.io模块的Node.js在不同浏览器中的2个用户之间玩游戏。

每次单击客户端都会提供一个字段号(0到8),服务器随后将使用该字段号来调用move方法并转到该字段。

问题是我需要使服务器对两个客户端的单击事件响应都不同,而我不知道该如何实现。

为了更清楚地说明移动方法,使用了2个参数-symbol(“ X”或“ O”)和字段(0到8),因此基本上是单击了谁和在何处。

客户端在连接时获得了分配的符号,因此当每个客户端单击一个字段时,服务器将调用移动方法,该方法使用客户端分配的符号和从客户端获得的字段编号作为参数。

但是,鉴于每个连接的客户端的套接字都被推送到一个数组Clients,因此我如何对来自不同客户端的点击做出两个单独的服务器响应,因此第一个客户端是clients [0],第二个客户端是clients [1] < / p>

这是服务器代码的一部分:

    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);
    });

0 个答案:

没有答案