void GetTimeStamp(SimpleFirebaseUnity.Firebase sender, DataSnapshot snapshot) { long timeStamp = snapshot.Value <long>(); DateTime dateTime = SimpleFirebaseUnity.Firebase.TimeStampToDateTime(timeStamp); DebugLog("[OK] Get on timestamp key: <" + sender.FullKey + ">"); DebugLog("Date: " + timeStamp + " --> " + dateTime.ToString()); }
void GetOKHandler(SimpleFirebaseUnity.Firebase sender, DataSnapshot snapshot) { DebugLog("[OK] Get from key: <" + sender.FullKey + ">"); DebugLog("[OK] Raw Json: " + snapshot.RawJson); Dictionary <string, object> dict = snapshot.Value <Dictionary <string, object> >(); List <string> keys = snapshot.Keys; if (keys != null) { foreach (string key in keys) { DebugLog(key + " = " + dict[key].ToString()); } } }
// Initialize the Firebase database: void InitializeFirebase() { firebase = SimpleFirebaseUnity.Firebase.CreateNew(databaseUrl); peopleDB = firebase.Child(DBPath); // Init callbacks firebase.OnGetSuccess += GetOKHandler; firebase.OnGetFailed += GetFailHandler; firebase.OnSetSuccess += SetOKHandler; firebase.OnSetFailed += SetFailHandler; firebase.OnUpdateSuccess += UpdateOKHandler; firebase.OnUpdateFailed += UpdateFailHandler; firebase.OnPushSuccess += PushOKHandler; firebase.OnPushFailed += PushFailHandler; firebase.OnDeleteSuccess += DelOKHandler; firebase.OnDeleteFailed += DelFailHandler; // Get child node from firebase, if false then all the callbacks are not inherited. //SimpleFirebaseUnity.Firebase temporary = firebase.Child("temporary", true); SimpleFirebaseUnity.Firebase lastUpdate = firebase.Child("lastUpdate"); lastUpdate.OnGetSuccess += GetTimeStamp; peopleDB.OnGetSuccess += OnChangeDB; peopleDB.GetValue(); // Make observer on "last update" time stamp dbObserver = new FirebaseObserver(peopleDB, 1f); dbObserver.OnChange += this.OnChangeDB; dbObserver.Start(); //DoDebug("[OBSERVER] FirebaseObserver on " + lastUpdate.FullKey + " started!"); // Print details //DoDebug("Firebase endpoint: " + peopleDB.Endpoint); //DoDebug("Firebase key: " + peopleDB.Key); //DoDebug("Firebase fullKey: " + peopleDB.FullKey); //DoDebug("Firebase child key: " + peopleDB.Key); //DoDebug("Firebase child fullKey: " + peopleDB.FullKey); }
void OnChangeDB(SimpleFirebaseUnity.Firebase sender, DataSnapshot snapshot) { //Debug.Log("[OBSERVER] Last updated changed to: " + snapshot.RawJson); foreach (var key in snapshot.Keys) { string strItem = JsonHelper.GetJsonObject(snapshot.RawJson, key); DBManData item = JsonUtility.FromJson <DBManData>(strItem); if (manData.ContainsKey(key)) { DBManData oneman = manData[key]; oneman = item; } else { manData.Add(key, item); } if (OnManData != null) { OnManData.Invoke(key, item); } } }
void PushFailHandler(SimpleFirebaseUnity.Firebase sender, FirebaseError err) { DebugError("[ERR] Push from key: <" + sender.FullKey + ">, " + err.Message + " (" + (int)err.Status + ")"); }
void PushOKHandler(SimpleFirebaseUnity.Firebase sender, DataSnapshot snapshot) { DebugLog("[OK] Push from key: <" + sender.FullKey + ">"); }
IEnumerator Tests() { // README DebugLog("This plugin simply wraps Firebase's RealTime Database REST API.\nPlease read here for better understanding of the API: https://firebase.google.com/docs/reference/rest/database/\n"); // Inits Firebase using Firebase Secret Key as Auth // The current provided implementation not yet including Auth Token Generation // If you're using this sample Firebase End, // there's a possibility that your request conflicts with other simple-firebase-c# user's request SimpleFirebaseUnity.Firebase firebase = SimpleFirebaseUnity.Firebase.CreateNew("https://simple-firebase-unity.firebaseio.com", "WQV9t78OywD8Pp7jvGuAi8K6g0MV8p9FAzkJ7rWK"); // Init callbacks firebase.OnGetSuccess += GetOKHandler; firebase.OnGetFailed += GetFailHandler; firebase.OnSetSuccess += SetOKHandler; firebase.OnSetFailed += SetFailHandler; firebase.OnUpdateSuccess += UpdateOKHandler; firebase.OnUpdateFailed += UpdateFailHandler; firebase.OnPushSuccess += PushOKHandler; firebase.OnPushFailed += PushFailHandler; firebase.OnDeleteSuccess += DelOKHandler; firebase.OnDeleteFailed += DelFailHandler; // Get child node from firebase, if false then all the callbacks are not inherited. SimpleFirebaseUnity.Firebase temporary = firebase.Child("temporary", true); SimpleFirebaseUnity.Firebase lastUpdate = firebase.Child("lastUpdate"); lastUpdate.OnGetSuccess += GetTimeStamp; // Make observer on "last update" time stamp FirebaseObserver observer = new FirebaseObserver(lastUpdate, 1f); observer.OnChange += (SimpleFirebaseUnity.Firebase sender, DataSnapshot snapshot) => { DebugLog("[OBSERVER] Last updated changed to: " + snapshot.Value <long>()); }; observer.Start(); DebugLog("[OBSERVER] FirebaseObserver on " + lastUpdate.FullKey + " started!"); // Print details DebugLog("Firebase endpoint: " + firebase.Endpoint); DebugLog("Firebase key: " + firebase.Key); DebugLog("Firebase fullKey: " + firebase.FullKey); DebugLog("Firebase child key: " + temporary.Key); DebugLog("Firebase child fullKey: " + temporary.FullKey); // Unnecessarily skips a frame, really, unnecessary. yield return(null); // Create a FirebaseQueue FirebaseQueue firebaseQueue = new FirebaseQueue(true, 3, 1f); // if _skipOnRequestError is set to false, queue will stuck on request Get.LimitToLast(-1). // Test #1: Test all firebase commands, using FirebaseQueueManager // The requests should be running in order firebaseQueue.AddQueueSet(firebase, GetSampleScoreBoard(), FirebaseParam.Empty.PrintSilent()); firebaseQueue.AddQueuePush(firebase.Child("broadcasts", true), "{ \"name\": \"simple-firebase-csharp\", \"message\": \"awesome!\"}", true); firebaseQueue.AddQueueSetTimeStamp(firebase, "lastUpdate"); firebaseQueue.AddQueueGet(firebase, "print=pretty"); firebaseQueue.AddQueueUpdate(firebase.Child("layout", true), "{\"x\": 5.8, \"y\":-94}"); firebaseQueue.AddQueueGet(firebase.Child("layout", true)); firebaseQueue.AddQueueGet(lastUpdate); //Deliberately make an error for an example DebugWarning("[WARNING] There is one invalid request below (Get with invalid OrderBy) which will gives error, only for the sake of example on error handling."); firebaseQueue.AddQueueGet(firebase, FirebaseParam.Empty.LimitToLast(-1)); // (~~ -.-)~~ DebugLog("==== Wait for seconds 15f ======"); yield return(new WaitForSeconds(15f)); DebugLog("==== Wait over... ===="); // Test #2: Calls without using FirebaseQueueManager // The requests could overtake each other (ran asynchronously) firebase.Child("broadcasts", true).Push("{ \"name\": \"dikra\", \"message\": \"hope it runs well...\"}", false); firebase.GetValue(FirebaseParam.Empty.OrderByKey().LimitToFirst(2)); temporary.GetValue(); firebase.GetValue(FirebaseParam.Empty.OrderByKey().LimitToLast(2)); temporary.GetValue(); // Please note that orderBy "rating" is possible because I already defined the index on the Rule. // If you use your own endpoint, you might get an error if you haven't set it on your Rule. firebase.Child("scores", true).GetValue(FirebaseParam.Empty.OrderByChild("rating").LimitToFirst(2)); firebase.GetRules(GetRulesOKHandler, GetRulesFailHandler); // ~~(-.- ~~) yield return(null); DebugLog("==== Wait for seconds 15f ======"); yield return(new WaitForSeconds(15f)); DebugLog("==== Wait over... ===="); // We need to clear the queue as the queue is left with one error command (the one we deliberately inserted last time). // When the queue stuck with an error command at its head, the next (or the newly added command) will never be processed. firebaseQueue.ForceClearQueue(); yield return(null); // Test #3: Delete the frb_child and broadcasts firebaseQueue.AddQueueGet(firebase); firebaseQueue.AddQueueDelete(temporary); // Please notice that the OnSuccess/OnFailed handler is not inherited since Child second parameter not set to true. DebugLog("'broadcasts' node is deleted silently."); firebaseQueue.AddQueueDelete(firebase.Child("broadcasts")); firebaseQueue.AddQueueGet(firebase); // ~~(-.-)~~ yield return(null); DebugLog("==== Wait for seconds 15f ======"); yield return(new WaitForSeconds(15f)); DebugLog("==== Wait over... ===="); observer.Stop(); DebugLog("[OBSERVER] FirebaseObserver on " + lastUpdate.FullKey + " stopped!"); }
void DelOKHandler(SimpleFirebaseUnity.Firebase sender, DataSnapshot snapshot) { DoDebug("[OK] Del from key: <" + sender.FullKey + ">"); }
protected void OnFailed(Firebase sender, FirebaseError err) { --count; StartNextCommand(); ClearCallbacks(sender); }
void UpdateOKHandler(SimpleFirebaseUnity.Firebase sender, DataSnapshot snapshot) { DoDebug("[OK] Update from key: <" + sender.FullKey + ">"); DoDebug(snapshot.RawJson); }
void OnChangeDB(SimpleFirebaseUnity.Firebase sender, DataSnapshot snapshot) { DoDebug("[OBSERVER] Last updated changed to: " + snapshot.RawJson); foreach (var key in snapshot.Keys) { string strItem = JsonHelper.GetJsonObject(snapshot.RawJson, key); string numbersOnly = Regex.Replace(key, "[^0-9]", ""); if (string.IsNullOrEmpty(numbersOnly)) { continue; } int index = int.Parse(numbersOnly); OneItem item = JsonUtility.FromJson <OneItem>(strItem); if (zombieStatesMap.ContainsKey(index)) { ParseItem(item, index, zombieStatesMap[index]); } else { ZombieState zombie = new ZombieState(); if (ParseItem(item, index, zombie)) { zombieStatesMap[zombie.id] = zombie; zombieStateList.Add(zombie); } } } //Do something with the data in args.Snapshot //if (db != null && db.items.Count > 0) //{ // foreach (var item in db.items) // { // if (zombieStatesMap.ContainsKey(item.id)) // { // ParseItem(item, zombieStatesMap[item.id]); // } // else // { // ZombieState zombie = new ZombieState(); // if (ParseItem(item, zombie)) // { // zombieStatesMap[zombie.id] = zombie; // zombieStateList.Add(zombie); // } // } // } //} if (ZombieStateChanged != null) { foreach (var pair in zombieStatesMap) { ZombieStateChanged(this, new ZombieStateEventArgs(pair.Key, pair.Value)); } } }
internal Firebase() { parent = null; key = string.Empty; root = null; }
/// <summary> /// Adds Firebase Set Time Stamp request to queue. /// </summary> /// <param name="firebase">Firebase.</param> /// <param name="keyName">Time stamp key name.</param> public void AddQueueSetTimeStamp(Firebase firebase, string keyName) { Firebase temp = firebase.Child(keyName, false); AddQueueSet(temp, SERVER_VALUE_TIMESTAMP, true, "print=silent"); }
/// <summary> /// Adds Firebase Update request to queue. /// </summary> /// <param name="firebase">Firebase.</param> /// <param name="val">Value.</param> /// <param name="param">Parameter.</param> public void AddQueueUpdate(Firebase firebase, object val, string param = "") { firebase.OnUpdateSuccess += OnSuccess; firebase.OnUpdateFailed += OnFailed; AddQueue(firebase, FirebaseCommand.Update, param, val); }
void GetRulesOKHandler(SimpleFirebaseUnity.Firebase sender, DataSnapshot snapshot) { DebugLog("[OK] GetRules"); DebugLog("[OK] Raw Json: " + snapshot.RawJson); }
void UpdateFailHandler(SimpleFirebaseUnity.Firebase sender, FirebaseError err) { DoDebug("[ERR] Update from key: <" + sender.FullKey + ">, " + err.Message + " (" + (int)err.Status + ")"); }
void GetRulesFailHandler(SimpleFirebaseUnity.Firebase sender, FirebaseError err) { DebugError("[ERR] GetRules, " + err.Message + " (" + (int)err.Status + ")"); }
protected void OnSuccess(Firebase sender, DataSnapshot snapshot) { --count; StartNextCommand(); ClearCallbacks(sender); }