2016-05-30 16 views
9

Edit Netleştirmek için: İki sorunum var. 1. Düğüm neden üzerine yazılmıştır? 2. Geri aranan görünüşte neden yinelenen çağrılıyor?Firebase varlık sistemi: yazma işlemini durdurur

Web sunucuma bir varlık sistemi uygulamak için this guide numaralı telefonu takip ediyorum. Tüm diğer kullanıcıların, diğer tüm kullanıcıların çevrimiçi olup olmadığını her zaman bilmesini istiyorum.

currentGameRef = gamesInProgressRef.child(newState.currentTable); 
    var myConnectionsRef = currentGameRef.child("player" + newState.myPlayerNumber).child("connections"); 
    var lastOnlineRef = currentGameRef.child("player" + newState.myPlayerNumber).child("lastOnline"); 

    var connectedRef = firebase.database().ref('.info/connected'); 
    connectedRef.on("value", function(snap) { 
    if(snap.val() == true){ 
     var con = myConnectionsRef.push(true); 
     con.onDisconnect().remove(); 

     lastOnlineRef.onDisconnect().set(firebase.database.ServerValue.TIMESTAMP); 
    } 
    }); 

Ben Kodu sınamak için bu oyunculara "bağlantıları" -node her birine true binlerce yazıyor: İşte benim kodudur. Garip olan şey, her oyuncunun diğer tüm çocukların silinmesi. Bu neden oluyor? Bir oyuncu düğümü şöyle görünür: Benim kodunda "player1" -node, bunun sadece bir çocuk ayarlamayın

"player1" : { 
    "name": "Vladimir Putin", 
    "country": "Russia", 
    ..., 
    ..., 
    "connections" : { 
    ... 
    ... 
    } 
} 

. Bu davranışa neden olan yukarıdaki kodun% 100 olduğunu biliyorum, ancak nedenini anlayamıyorum. Birisi lütfen yukarıdaki kodun neden oyuncu düğümlerini temizlediğini söyler mi?

+0

'snap.val()' değerleri nedir? '===' yerine '==' değiştirmenin bir nedeni var mı? –

+0

Hayır, bunu yanlışlıkla yaptım. Şimdi değiştirdim. Aynı şey. Snap.val() değeri, kod snippet'ine girdiğinden ve jet dizisini bağlantılar dizisine başka bir doğruya iterdiğinden dolayı doğru olmalıdır. – hellogoodnight

+0

Kodunuzda bu "newState" değişkeni birden çok kez görünüyor? – vzsg

cevap

0

YeniState ile gelen değişkenlerle bir şeyler ters gitti gibi görünüyor. Bu testi burada yaptım:

// Initialize Firebase 
var config = { 
    apiKey: '<your-api-key>', 
    authDomain: '<your-auth-domain>', 
    databaseURL: '<your-database-url>', 
    storageBucket: '<your-storage-bucket>' 
}; 
firebase.initializeApp(config); 

// fixed values just for test 
var newState = { 
    myPlayerNumber: 1, 
    currentTable: 2 
}; 

var gamesInProgressRef = firebase.database().ref('games'); 
currentGameRef = gamesInProgressRef.child(newState.currentTable); 
var myConnectionsRef = currentGameRef.child("player" + newState.myPlayerNumber).child("connections"); 
var lastOnlineRef = currentGameRef.child("player" + newState.myPlayerNumber).child("lastOnline"); 

var connectedRef = firebase.database().ref('.info/connected'); 
connectedRef.on("value", function(snap) { 
    if(snap.val() == true){ 
    var con = myConnectionsRef.push(true); 
    con.onDisconnect().remove(); 
    lastOnlineRef.onDisconnect().set(firebase.database.ServerValue.TIMESTAMP); 
    } 
}); 

Ve bende aşağıdakiler oluyor.

1) ilk müşteri iki istemcileri

Both clients disconnected

bağlantısı)

First client connected

2) ikinci müşteri

Second client connected

bağlı

bağlı

Bana öyle geliyor ki bu istenen sonuçtur. Bu yüzden, newState olarak kullanılan şeyin hatalarını ayıklamaya çalışın, belki de 'undefined' ya da başka bir sabit değer elde edersiniz.

+1

Zaman ayırdığınız için teşekkür ederiz. Bu kodu bir süre sonra test edeceğim. Sana geri döneceğim! – hellogoodnight