/// <summary> /// Provides the observer with new data. /// </summary> /// <param name="publishedEvent"></param> public void OnNext(StreamInputEvent <TPayloadType> publishedEvent) { if (AdapterState == AdapterState.Running) { EnqueueEvent(publishedEvent); } }
protected virtual void EnqueueEvent(StreamInputEvent <TPayloadType> publishedEvent) { if (!_canEnqueue) { return; } if (publishedEvent.Start < _lastCti) { return; } lock (_lockObject) { if (this.AdapterState != AdapterState.Running) { return; } var point = publishedEvent.GetPointEvent(); try { var enqueueResult = this.Enqueue(ref point); if (enqueueResult == EnqueueOperationResult.Success && publishedEvent.EventKind == EventKind.Cti) { _lastCti = point.StartTime; } if (enqueueResult == EnqueueOperationResult.Full) { //Queue full!!! Pause enqueueing. _canEnqueue = false; ReleaseEvent(ref point); //Let StreamInsight know we're ready to resume. Ready(); } } catch { ReleaseEvent(ref point); throw; } } }