private void OnReceived(WriteBehavior behavior, string data) { if (behavior == WriteBehavior.None) { return; } var callback = Received; if (callback != null) { JObject result = JObject.Parse(data); string dataValue = result["data"].Type == JTokenType.Null ? null : result["data"].ToString(); var args = new FirebaseEventReceivedEventArgs(new FirebaseMessage(behavior, new FirebasePath(result["path"].ToString()), dataValue, null, MessageSouce.Remote)); callback(this, args); } }
public FirebaseMessage(WriteBehavior behavior, FirebasePath path, string value, FirebasePriority priority, FirebaseStatusCallback callback, MessageSouce source) { Behavior = behavior; Path = path; Value = value; Callback = callback; Priority = priority; Source = source; }
void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) { writer.WriteStartObject(); writer.WritePropertyName("writeBehavior"); writer.WriteStringValue(WriteBehavior.ToString()); if (Optional.IsDefined(IgnoreNullValues)) { writer.WritePropertyName("ignoreNullValues"); writer.WriteObjectValue(IgnoreNullValues); } if (Optional.IsDefined(AlternateKeyName)) { writer.WritePropertyName("alternateKeyName"); writer.WriteObjectValue(AlternateKeyName); } writer.WritePropertyName("type"); writer.WriteStringValue(Type); if (Optional.IsDefined(WriteBatchSize)) { writer.WritePropertyName("writeBatchSize"); writer.WriteObjectValue(WriteBatchSize); } if (Optional.IsDefined(WriteBatchTimeout)) { writer.WritePropertyName("writeBatchTimeout"); writer.WriteObjectValue(WriteBatchTimeout); } if (Optional.IsDefined(SinkRetryCount)) { writer.WritePropertyName("sinkRetryCount"); writer.WriteObjectValue(SinkRetryCount); } if (Optional.IsDefined(SinkRetryWait)) { writer.WritePropertyName("sinkRetryWait"); writer.WriteObjectValue(SinkRetryWait); } if (Optional.IsDefined(MaxConcurrentConnections)) { writer.WritePropertyName("maxConcurrentConnections"); writer.WriteObjectValue(MaxConcurrentConnections); } foreach (var item in AdditionalProperties) { writer.WritePropertyName(item.Key); writer.WriteObjectValue(item.Value); } writer.WriteEndObject(); }
private async void ReceiveThread(CancellationToken cancel) { try { while (true) { cancel.ThrowIfCancellationRequested(); var uri = GetUri(new FirebasePath()); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, uri); request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("text/event-stream")); var response = await _client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancel) .ConfigureAwait(false); response.EnsureSuccessStatusCode(); using ( var stream = await response.Content.ReadAsStreamAsync().WithCancellation(cancel).ConfigureAwait(false)) using (var reader = new StreamReader(stream)) { WriteBehavior behavior = WriteBehavior.None; while (true) { cancel.ThrowIfCancellationRequested(); var line = await reader.ReadLineAsync().WithCancellation(cancel).ConfigureAwait(false); if (line == null) { continue; } Debug.WriteLine("RECV: {0}", line); if (line.StartsWith("event:")) { string eventName = line.Substring(6).Trim(); switch (eventName) { case "cancel": case "auth_revoked": case "keep-alive": OnReceived(WriteBehavior.None, null); behavior = WriteBehavior.None; break; case "put": behavior = WriteBehavior.Replace; break; case "patch": behavior = WriteBehavior.Merge; break; } } if (line.StartsWith("data:")) { OnReceived(behavior, line.Substring(5).Trim()); behavior = WriteBehavior.None; } } } } } catch (OperationCanceledException) { } }
public FirebaseMessage(WriteBehavior behavior, FirebasePath path, string value, FirebaseStatusCallback callback, MessageSouce source) : this(behavior, path, value, null, callback, source) { }