Firebase存在:onDisconnect进行交易

时间:2013-04-02 10:54:24

标签: javascript firebase

在auth回调中,我们在列表中添加了一名队长,因为我们有一个新玩家:

var cptns = new Firebase("http://allure.firebaseio.com/cptns");


cptns.transaction(function(current_value) {return current_value + 1;
}, function(error, committed, snapshot) {
$('#captains').text(snapshot.val());
});

我的目标是当玩家/队长离开页面时将current_value减少1。我确实尝试了什么文档建议没有运气,因为当我注销它不警报(“没有连接”)

var connectedRef = new Firebase('http://allure.firebaseio.com/.info/connected');
connectedRef.on('value', function(snap) {
  if (snap.val() === true) {
    alert('connected');
  } else {
    alert('not connected');
  }
});

这也不起作用:

     // Get a reference to my own presence status.
     var connectedRef = new Firebase("http://presence.allure.firebaseio.com/.info/connected");
      connectedRef.on("value", function(isOnline) {
        if (!isOnline.val()) {
          cptns.transaction(function(current_value) {return current_value -1;
    }, function(error, committed, snapshot) {
    $('#captains').text(snapshot.val());
    });

    alert("removed 1");


        } 

else{    alert("all good do nothing");

}
      });
我错过了什么? TIA

(感谢firebase为您构建的神奇平台!)

1 个答案:

答案 0 :(得分:2)

据我所知,你不能在断开连接时使用交易。另外,.info/connected会监控各个客户端与Firebase的连接,而不是其他用户的连接。

好消息是存在非常简单,并且假设每个“团队”不会有数十万用户,您实际上并不需要交易。相反,你可以:

  • 维护成员列表
  • 在onDisconnect上为每个成员设置一个在线字段:firebaseRef.child('member/status').onDisconnect().set('offline')
  • 计算客户端上的成员(相当简单)

如果您提供有关客户端结构的更多详细信息(团队的结构,团队中有多少玩家,那么我)可以提供更具体的示例。