示例#1
0
 /// <summary>
 /// Provides the observer with new data.
 /// </summary>
 /// <param name="publishedEvent"></param>
 public void OnNext(StreamInputEvent <TPayloadType> publishedEvent)
 {
     if (AdapterState == AdapterState.Running)
     {
         EnqueueEvent(publishedEvent);
     }
 }
示例#2
0
        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;
                }
            }
        }