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");

}
      });

私は何が欠けていますか?ティア

(あなたが構築した素晴らしいプラットフォームを提供してくれた firebase に感謝します!)

4

1 に答える 1

2

私の知る限り、切断時にトランザクションを使用することはできません。また、.info/connected他のユーザーの接続ではなく、個々のクライアントの Firebase への接続を監視します。

幸いなことに、プレゼンスは非常に簡単です。各「チーム」に数十万人のユーザーがいないと仮定すると、実際にはトランザクションは必要ありません。代わりに、次のことができます。

  • メンバーのリストを維持する
  • onDisconnect の各メンバーにプレゼンス フィールドを設定します。 firebaseRef.child('member/status').onDisconnect().set('offline')
  • クライアントのメンバーを数えます (かなり些細なことです)

クライアントの構造 (チームがどのように構成されているか、チーム内のプレーヤーの数など) についてさらに詳細を提供していただければ、より具体的な例を提供できます。

于 2013-04-02T14:09:34.843 に答える