Example #1
0
 public Camera([NotNull] ILogger <Camera> logger, [NotNull] ILogger <CameraStream> streamLogger, [NotNull] CaptureSettings settings, [NotNull] Func <CaptureSettings, VideoCapture> createVideoCaptureFunc)
 {
     this.logger                 = logger ?? throw new ArgumentNullException(nameof(logger));
     this.streamLogger           = streamLogger ?? throw new ArgumentNullException(nameof(streamLogger));
     this.settings               = settings ?? throw new ArgumentNullException(nameof(settings));
     this.createVideoCaptureFunc = createVideoCaptureFunc ?? throw new ArgumentNullException(nameof(createVideoCaptureFunc));
     this.errorObserver          = new ErrorObserver(this);
 }
        public void Subscribe(ISubscriber <T> s)
        {
            switch (backpressure)
            {
            case BackpressureHandling.Error:
            {
                ErrorObserver o = new ErrorObserver(s);
                s.OnSubscribe(o);
                emitter(o);
            }
            break;

            case BackpressureHandling.Drop:
            {
                ErrorObserver o = new ErrorObserver(s);
                s.OnSubscribe(o);
                emitter(o);
            }
            break;

            case BackpressureHandling.Latest:
            {
                if (s is IConditionalSubscriber <T> )
                {
                    LatestConditionalObserver o = new LatestConditionalObserver((IConditionalSubscriber <T>)s);
                    s.OnSubscribe(o);
                    emitter(o);
                }
                else
                {
                    LatestObserver o = new LatestObserver(s);
                    s.OnSubscribe(o);
                    emitter(o);
                }
            }
            break;

            case BackpressureHandling.Buffer:
            {
                if (s is IConditionalSubscriber <T> )
                {
                    BufferConditionalObserver o = new BufferConditionalObserver((IConditionalSubscriber <T>)s, Flux.BufferSize);
                    s.OnSubscribe(o);
                    emitter(o);
                }
                else
                {
                    BufferObserver o = new BufferObserver(s, Flux.BufferSize);
                    s.OnSubscribe(o);
                    emitter(o);
                }
            }
            break;

            default:
            {
                NoneObserver o = new NoneObserver(s);
                s.OnSubscribe(o);
                emitter(o);
            }
            break;
            }
        }