如何将socket.io中的按钮功能发送到所有连接

时间:2014-09-10 17:53:06

标签: javascript node.js socket.io

我有一个tic-tac-toe游戏,可以将动作发送到所有连接,我还有一个重置按钮,可以在游戏结束/赢得时重置游戏。

这些动作很好,他们被看到了。但是,当按下重置按钮时,只能通过按下按钮的连接看到它,因此该功能正确触发但不向所有按钮发射。

这是我的服务器端代码:

var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.use("/", express.static('public'));

io.on('connection', function(socket){
  socket.on('move', function(move){
    io.emit('move', move);
  });
  socket.on('reset', function(reset){
        io.emit('reset', reset);
      });
});

http.listen(3000, function(){
  console.log('listening on *:3000');
});

这是我的客户端代码部分,显示了移动和按钮功能。

function sendPickSquare(index) {
    return function() {
        if (gameover || buttons[index].innerHTML !== "")
            return;
        socket.emit('move', {
            'index' : index,
            'value' : selectTurn.value
        });
    };
}

socket.on('move', function(move) {
    buttons[move.index].innerHTML = move.value;

    if (move.value === 'X') {
        selectTurn.value = 'O';
    } else {
        selectTurn.value = 'X';
    }
    checkWin();
});

function resetGame() {
    for (var i = 0; i < buttons.length; i++) {
        buttons[i].style.backgroundColor = '';
        buttons[i].innerHTML = "";  
    }
    gameover = false;
}

for (var i = 0; i < buttons.length; i++) {
    buttons[i].onclick = sendPickSquare(i);
}
$("#replayButton").click(function(reset) {
    socket.emit('reset', resetGame());
});

我想我可能必须引用socket.io看作所有连接的发射函数。任何帮助都将非常感激。

1 个答案:

答案 0 :(得分:0)

好的,我明白了。对于那些可能遇到同样问题的人来说,这就是答案。 我没有必要在服务器端更改任何内容。在客户端,我更改了以下内容:

$('#replayButton').click(function() {
    socket.emit('reset', "");
});

socket.on('reset', function() {
    resetGame();
});

基本上只需要发出被点击的按钮然后使用socket.on来激活该功能。