4

在 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 为您构建的令人惊叹的平台!)

4

1 回答 1

2

据我了解,您不能在断开连接时使用事务。此外,.info/connected监控单个客户端与 Firebase 的连接,而不是其他用户的连接。

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

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

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

于 2013-04-02T14:09:34.843 回答