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; } }