【发布时间】:2016-12-13 03:43:52
【问题描述】:
我有一个我继承的应用程序,它的套接字 IO 已经在许多事件上工作。这是一款在棋盘上移动棋子并带有记录移动的符号的游戏。我正在构建符号。
我正在尝试为符号创建一个新的发射器/侦听器对,但它失败了。
我将发射器放在一个文件中,作为函数的一部分,该函数已经使用了我需要传递的两个对象(在我需要传递它们的时间/上下文中)...
function writeMoveLog(game,moveInfo){
socket.emit('notation', {game: game, moveInfo: moveInfo});
(...rest of the function which works ok)
而我的监听器就是主 js 文件中的这个...
socket.on('notation', function(gameState){
writeMoveLog(gameState.game, gameState.moveInfo);
});
基本上,我试图将这两个对象扔到套接字的另一个客户端,并让它也触发函数,更新符号。两个客户端使用相同的文件。
我正在使用与预先存在的“移动”事件相同的基本模式,它可以正常工作 - 由发射传递的未命名对象,然后在 on/listener 处命名和使用 - 这些都在相同的主 js 文件。
socket.emit('move', {
mInfo: result.mInfo,
mResult: result,
senString: gameGen.saveToSEN(game),
mGame: {contents : game}, //I added this, it works
});
socket.on('move', function (move) {
game = gameGen.loadFromSEN(move.senString);
gui.draw(game.board);
etc etc
我在调试器中没有得到任何东西,没有任何“符号”事件,但我可以很容易地看到“移动”事件的内容来回移动。我已经尝试使用该事件,但它没有我在该上下文中需要的对象(完全是 moveInfo,而且游戏似乎缺少我需要的细节)。
我将 Chrome 开发工具用于我的主要开发环境,并将 Firefox 用于其他连接的客户端。
什么给了?我需要在其他地方以某种方式注册活动吗?我看不到'move'事件已经完成了,我认为我需要做的就是拨打电话并配置监听器,无论哪个客户端进行移动都将成为'notation'事件的服务器.
附带说明,当我调试 socket.io 的东西时,Chrome Dev 断点似乎没有按预期工作 - 这正常吗?为什么我不能在 socket.emit 中设置断点,以便我可以像使用其他函数一样调查该上下文中可用的对象?
【问题讨论】:
标签: javascript angularjs node.js socket.io