节点套接字io定时器实现

时间:2014-10-15 06:30:34

标签: javascript node.js socket.io socket.io-1.0

我正在节点&中创建一个绘图/猜测游戏插座。 简单地说: 我有一个 Room 游戏(扩展Room)和一个 Round (每场10个)。 每轮用户被指定为抽屉,猜测者有 45秒来猜测这个词。

首次猜测计时器是否高于20秒时,计时器 减少 至20秒

我不确定,但这就是我的开始:

课程回合:

function Round(id, game){
  var ROUNDTIME = 45,
      timer = new Date();
  this.id = id;
  this.game = game;
  this.endTime = timer.setSeconds(timer.getSeconds() + ROUNDTIME);
  ...
}

课程游戏:

function Game(){
  this.MAX_ROUNDS = 10;
  this.rounds = [];
  this.currentRound = null;
  ...
}

Game.prototype.start = function(){
  this.nextRound;
}

Game.prototype.nextRound = function(){
  if(this.rounds.length <= this.MAX_ROUNDS){
    this.currentRound = new Round(this.rounds.length + 1, this);
    ...
  } else {
    this.endGame();
  }
}

Game.prototype.endGame = function(){
  ...
}

之后我有一个Round函数,每次提交答案/消息时都会检查答案。在第一次回答时,我将endTime减少到20秒。

所以有2个问题:

  1. 这是正确/良好的实践方法吗?
  2. 我应该如何进一步将其应用到应用程序本身? (setInterval为1秒,发出?或者只是在达到endDate时发出?或者其他方式?)

1 个答案:

答案 0 :(得分:1)

你可以做点什么

function Round(id, game,loseCallbackFn){
var ROUNDTIME = 45, startTime = new Date();
this.id = id;
this.game = game;
this.endTime = startTime.getTime()+45*1000;
this.timerId = setTimeout(loseCallbackFn,45*1000);
...
}
...
Round.onWrongGuess(){
    if((this.endTime-(new Date()).getTime())>20*1000) {// he has more than 20s left
        clearTimeout(this.timerId);
        this.timerId = setTimeout(loseCallbackFn,20*1000);
        ...
    }else{
        loseCallbackFn();
    }
}
...