/// <summary> /// Push a value (with random new key) on a key in Firebase. Calls OnPushSuccess on success, OnPushFailed on failed. /// OnPushSuccess action contains the corresponding Firebase and the response Snapshot /// OnPushFailed action contains the error exception /// </summary> /// <param name="val">Push value</param> /// <param name="priority">Priority.</param> /// <param name="query">REST call parameters wrapped in FirebaseQuery class</param> /// <returns></returns> public void Push(object val, float priority, FirebaseParam query) { Dictionary <string, object> tempDict = new Dictionary <string, object>(); tempDict.Add(".value", val); tempDict.Add(".priority", priority); root.StartCoroutine(JsonSerializeRoutine(tempDict, query, PushJson)); }
/// <summary> /// Creates an Observer that calls GetValue request at the given refresh rate (in seconds) and checks whether the value has changed. /// </summary> /// <param name="_firebase">Firebase.</param> /// <param name="_refreshRate">Refresh rate (in seconds).</param> /// <param name="_getParam">Parameter value for the Get request that will be called periodically.</param> public FirebaseObserver(Firebase _firebase, float _refreshRate, FirebaseParam _getParam) { active = false; lastSnapshot = null; firebase = _firebase; refreshRate = _refreshRate; getParam = _getParam.Parameter; target = _firebase.Copy(); }
/// <summary> /// Create new FirebaseQuery /// </summary> /// <param name="copy">Firebase parameter to copy.</param> public FirebaseParam(FirebaseParam copy) { param = copy.Parameter; header = new Dictionary <string, string>(); foreach (var kv in header) { header.Add(kv.Key, kv.Value); } }
/// <summary> /// Push a value (with random new key) on a key in Firebase. Calls OnPushSuccess on success, OnPushFailed on failed. /// OnPushSuccess action contains the corresponding Firebase and the response Snapshot /// OnPushFailed action contains the error exception /// </summary> /// <param name="val">Push value</param> /// <param name="isJson">True if string is an object parsed in a json string.</param> /// <param name="query">REST call parameters wrapped in FirebaseQuery class</param> /// <returns></returns> public void Push(string val, bool isJson, FirebaseParam query) { if (isJson) { PushJson(val, query); } else { root.StartCoroutine(JsonSerializeRoutine(val, query, PushJson)); } }
/// <summary> /// Set value of a key on Firebase. Calls OnUpdateSuccess on success, OnUpdateFailed on failed. /// OnSetSuccess action contains the corresponding Firebase and the response Snapshot /// OnSetFailed action contains the error exception /// </summary> /// <param name="val">Set value</param> /// <param name="isJson">True if string is an object parsed in a json string.</param> /// <param name="query">REST call parameters wrapped in FirebaseQuery class</param> /// <returns></returns> public void SetValue(string val, bool isJson, FirebaseParam query) { if (isJson) { SetValueJson(val, query); } else { root.StartCoroutine(JsonSerializeRoutine(val, query, SetValueJson)); } }
/*** SET ***/ /// <summary> /// Set value of a key on Firebase. Calls OnSetSuccess on success, OnSetFailed on failed. /// OnSetSuccess action contains the corresponding Firebase and the response Snapshot /// OnSetFailed action contains the error exception /// </summary> /// <param name="valJson">Set value in json format</param> /// <param name="query">REST call parameters wrapped in FirebaseQuery class</param> /// <returns></returns> void SetValueJson(string valJson, FirebaseParam query) { try { if (Credential != "") { query = new FirebaseParam(query).Auth(Credential); } string url = Endpoint; string param = WWW.EscapeURL(query.Parameter); if (param != "") { url += "?" + param; } Dictionary <string, string> headers = new Dictionary <string, string>(); foreach (var kv in query.HttpHeader) { headers.Add(kv.Key, kv.Value); } headers.Add("Content-Type", "application/json"); if (!headers.ContainsKey("X-HTTP-Method-Override")) { headers.Add("X-HTTP-Method-Override", "PUT"); } //UTF8Encoding encoding = new UTF8Encoding(); byte[] bytes = Encoding.GetEncoding("iso-8859-1").GetBytes(valJson); root.StartCoroutine(RequestCoroutine(url, bytes, headers, OnSetSuccess, OnSetFailed)); } catch (WebException webEx) { if (OnSetFailed != null) { OnSetFailed(this, FirebaseError.Create(webEx)); } } catch (Exception ex) { if (OnSetFailed != null) { OnSetFailed(this, new FirebaseError(ex.Message)); } } }
/// <summary> /// Update value of a key on Firebase. Calls OnUpdateSuccess on success, OnUpdateFailed on failed. /// OnUpdateSuccess action contains the corresponding Firebase and the response Snapshot /// OnUpdateFailed action contains the error exception /// </summary> /// <param name="val">Update value</param> /// <param name="query">REST call parameters wrapped in FirebaseQuery class</param> /// <returns></returns> internal void UpdateValueObject(object val, FirebaseParam query) { if (!(val is Dictionary <string, object>)) { if (OnUpdateFailed != null) { OnUpdateFailed(this, new FirebaseError((HttpStatusCode)400, "Invalid data; couldn't parse JSON object. Are you sending a JSON object with valid key names?")); } return; } root.StartCoroutine(JsonSerializeRoutine(val, query, UpdateValue)); }
IEnumerator JsonSerializeRoutine(object sourceObj, FirebaseParam query, Action <string, FirebaseParam> onCompleted) { ParserObjToJson parser = new ParserObjToJson(sourceObj); while (!parser.isDone) { yield return(null); } if (onCompleted != null) { onCompleted(parser.json, query); } }
/*** PUSH ***/ /// <summary> /// Push a value (with random new key) on a key in Firebase. Calls OnPushSuccess on success, OnPushFailed on failed. /// OnPushSuccess action contains the corresponding Firebase and the response Snapshot /// OnPushFailed action contains the error exception /// </summary> /// <param name="valJson">Push value in json format</param> /// <param name="query">REST call parameters wrapped in FirebaseQuery class</param> /// <returns></returns> void PushJson(string valJson, FirebaseParam query) { try { if (Credential != "") { query = new FirebaseParam(query).Auth(Credential); } string url = Endpoint; string param = WWW.EscapeURL(query.Parameter); if (param != string.Empty) { url += "?" + param; } //UTF8Encoding encoding = new UTF8Encoding(); byte[] bytes = Encoding.GetEncoding("iso-8859-1").GetBytes(valJson); root.StartCoroutine(RequestCoroutine(url, bytes, query.HttpHeader, OnPushSuccess, OnPushFailed)); } catch (WebException webEx) { if (OnPushFailed != null) { OnPushFailed(this, FirebaseError.Create(webEx)); } } catch (Exception ex) { if (OnPushFailed != null) { OnPushFailed(this, new FirebaseError(ex.Message)); } } }
/// <summary> /// Push a value (with random new key) on a key in Firebase. Calls OnPushSuccess on success, OnPushFailed on failed. /// OnPushSuccess action contains the corresponding Firebase and the response Snapshot /// OnPushFailed action contains the error exception /// </summary> /// <param name="val">Push value</param> /// <param name="query">REST call parameters wrapped in FirebaseQuery class</param> /// <returns></returns> public void Push(object val, FirebaseParam query) { root.StartCoroutine(JsonSerializeRoutine(val, query, PushJson)); }
/// <summary> /// Sets the time stamp with the time since UNIX epoch by server value (in milliseconds). /// </summary> /// <param name="OnSuccess">On success callback.</param> /// <param name="OnFailed">On failed callback.</param> /// <param name="keyName">Key name.</param> /// <param name="query">REST call parameters wrapped in FirebaseQuery class</param> public void SetTimeStamp(Action <Firebase, DataSnapshot> OnSuccess, Action <Firebase, FirebaseError> OnFailed, string keyName, FirebaseParam query) { Firebase temp = Copy(false); temp.OnSetSuccess += OnSuccess; temp.OnSetFailed += OnFailed; temp.Child(keyName).SetValue(SERVER_VALUE_TIMESTAMP, true, query); }
/// <summary> /// Adds Firebase Delete request to queue. /// </summary> /// <param name="firebase">Firebase node.</param> /// <param name="param">Parameter.</param> public void AddQueueDelete(Firebase firebase, FirebaseParam param) { AddQueueDelete(firebase, param.Parameter); }
/// <summary> /// Adds Firebase Push request to queue. /// </summary> /// <param name="firebase">Firebase node.</param> /// <param name="val">Value.</param> /// <param name="isJson">True if string is an object parsed in a json string.</param> /// <param name="param">Parameter.</param> public void AddQueuePush(Firebase firebase, string val, bool isJson, FirebaseParam param) { AddQueuePush(firebase, val, isJson, param.Parameter); }
/// <summary> /// Adds Firebase Push request to queue. /// </summary> /// <param name="firebase">Firebase node.</param> /// <param name="val">Value.</param> /// <param name="param">Parameter.</param> public void AddQueuePush(Firebase firebase, object val, FirebaseParam param) { AddQueuePush(firebase, val, param.Parameter); }
/// <summary> /// Adds Firebase Update request to queue. /// </summary> /// <param name="firebase">Firebase node.</param> /// <param name="valJson">Value in json format.</param> /// <param name="param">Parameter.</param> public void AddQueueUpdate(Firebase firebase, string valJson, FirebaseParam param) { AddQueueUpdate(firebase, valJson, param.Parameter); }
/// <summary> /// Adds Firebase Update request to queue. /// </summary> /// <param name="firebase">Firebase node.</param> /// <param name="val">Value.</param> /// <param name="param">Parameter.</param> public void AddQueueUpdate(Firebase firebase, Dictionary<string, object> val, FirebaseParam param) { AddQueueUpdate(firebase, val, param.Parameter); }
/// <summary> /// Sets the priority of the node. /// </summary> /// <param name="OnSuccess">On success callback.</param> /// <param name="OnFailed">On failed callback.</param> /// <param name="priority">Priority.</param> /// <param name="query">REST call parameters wrapped in FirebaseQuery class</param> public void SetPriority(Action <Firebase, DataSnapshot> OnSuccess, Action <Firebase, FirebaseError> OnFailed, float priority, FirebaseParam query) { Firebase temp = Copy(false); temp.OnSetSuccess += OnSuccess; temp.OnSetFailed += OnFailed; temp.Child(".priority").SetValue(priority, query); }
/// <summary> /// Sets the priority of the node. /// </summary> /// <param name="priority">Priority.</param> /// <param name="query">REST call parameters wrapped in FirebaseQuery class</param> public void SetPriority(float priority, FirebaseParam query) { Copy(false).Child(".priority").SetValue(priority, query); }
/// <summary> /// Set value of a key on Firebase. Calls OnUpdateSuccess on success, OnUpdateFailed on failed. /// OnSetSuccess action contains the corresponding Firebase and the response Snapshot /// OnSetFailed action contains the error exception /// </summary> /// <param name="val">Set value</param> /// <param name="query">REST call parameters wrapped in FirebaseQuery class</param> /// <returns></returns> public void SetValue(object val, FirebaseParam query) { root.StartCoroutine(JsonSerializeRoutine(val, query, SetValueJson)); }
/// <summary> /// Sets the time stamp with the time since UNIX epoch by server value (in milliseconds). /// </summary> /// <param name="keyName">Key name.</param> /// <param name="query">REST call parameters wrapped in FirebaseQuery class</param> public void SetTimeStamp(string keyName, FirebaseParam query) { Copy(false).Child(keyName).SetValue(SERVER_VALUE_TIMESTAMP, true, query); }
/// <summary> /// Update value of a key on Firebase. Calls OnUpdateSuccess on success, OnUpdateFailed on failed. /// OnUpdateSuccess action contains the corresponding Firebase and the response Snapshot /// OnUpdateFailed action contains the error exception /// </summary> /// <param name="val">Update value</param> /// <param name="query">REST call parameters wrapped in FirebaseQuery class</param> /// <returns></returns> public void UpdateValue(Dictionary <string, object> val, FirebaseParam query) { root.StartCoroutine(JsonSerializeRoutine(val, query, UpdateValue)); }