2014-09-10 39 views
1

我有一個井字遊戲,將動作發送到所有連接,我也有一個復位按鈕,可以在遊戲結束時重置遊戲。韓元。如何將socket.io中的按鈕的功能發送到所有連接

這些舉措工作正常,他們被看到。但是,當按下重置按鈕時,只有按下該按鈕的連接才能看到該按鈕,因此該功能正確觸發,但不會發光。

這是我的服務器端代碼:

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所看到的作爲所有連接發射的函數。任何援助將非常感激。

+0

嘗試'io.sockets.emit'而不是'io.emit' – ovi 2014-09-10 17:57:41

+0

感謝您的建議,但仍然沒有發射到第二個連接。 – Jolie 2014-09-10 18:13:07

+0

是_reset_保留還是什麼? (文檔不作任何說明) – dandavis 2014-09-10 18:26:26

回答

0

好吧,我想通了。以下是可能遇到同樣問題的人的答案。 我不必在服務器端改變任何東西。在客戶端,我改變了以下內容:

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

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

基本上只需要發射按鈕被點擊,然後使用socket.on火的功能。

+0

無論如何,您可以共享完整的文件 - 或者至少您的完整的HTML /服務器端。我遇到了同樣的問題。 – DRB 2015-05-21 08:26:00

相關問題