public async Task <EventStreamResponse <T> > OnAsync <T>(string path, ObjectRootPatchReceivedEventHandler <T> objectRootPatchReceived = null, ObjectPropertyPatchReceivedEventHandler <T> objectPropertyPatchReceived = null, EventStreamingResponseEventHandler <T> eventStreamingResponse = null, EventStreamingResponseRawEventHandler <T> eventStreamingResponseRaw = null, EventStreamingEventHandler <T> eventStreaming = null, Action <Exception> exceptionHandler = null) { try { return(new EventStreamResponse <T>(this.Serializer, await _requestManager.ListenAsync(path).ConfigureAwait(false), objectRootPatchReceived, objectPropertyPatchReceived, eventStreamingResponse, eventStreamingResponseRaw, eventStreaming, exceptionHandler)); } catch (Exception e) { if (exceptionHandler == null) { throw new FirebaseException("Failed to establish OnAsync observer", e); } exceptionHandler(e); } return(null); }
internal EventStreamResponse(ISerializer serializer, HttpResponseMessage httpResponse, ObjectRootPatchReceivedEventHandler <T> rootPatchReceived = null, ObjectPropertyPatchReceivedEventHandler <T> propertyPatchReceived = null, EventStreamingResponseEventHandler <T> eventStreamingResponse = null, EventStreamingResponseRawEventHandler <T> eventStreamingResponseRaw = null, EventStreamingEventHandler <T> eventStreaming = null, Action <Exception> exceptionHandler = null) { _serializer = serializer; _fireCache = new FireCache(); _cache = new TemporaryCache(); this.CancellationToken = new CancellationTokenSource(); this.ExceptionHandler = exceptionHandler; if (rootPatchReceived != null) { this.OnObjectRootPatchReceived += rootPatchReceived; } if (propertyPatchReceived != null) { this.OnObjectPropertyPatchReceived += propertyPatchReceived; _jsonPatchManager = new JsonPatcher(_serializer); } if (eventStreamingResponse != null) { this.OnEventStreamingResponse += eventStreamingResponse; } if (eventStreamingResponseRaw != null) { this.OnEventStreamingResponseRaw += eventStreamingResponseRaw; } if (eventStreaming != null) { this.OnEventStreaming += eventStreaming; } _pollingTask = ReadLoop(httpResponse, CancellationToken.Token); }