public static IObservable <Message> Create() { return (Observable.Using(() => new Producer(), p => Observable.Create <Message>(o => { ProducerMessageHandler handler = m => o.OnNext(m); p.Attach(handler); return Disposable.Create(() => o.OnCompleted()); }))); }
public Producer(ThirdPartyLib.Producer p) { _stream = Observable.Create(observer => { ProducerMessageHandler h = msg => observer.OnNext(msg); var unsubscribe = Disposable.Create(() => p.Detach(h)); p.Attach(h); p.Start(); return(unsubscribe); }); }
public ProducerObservable() { _Subject = new Subject <Message>(); ProducerMessageHandler fnHandler = m => _Subject.OnNext(m); _Producer = new Producer(); _Producer.Attach(fnHandler); _Producer.Start(); _Disposables = new CompositeDisposable(); _Disposables.Add(_Producer); _Disposables.Add(_Subject); }
public Producer(ThirdPartyLib.Producer p) { var c = Observable.Create(observer => { ProducerMessageHandler h = msg => observer.OnNext(msg); p.Attach(h); p.Start(); return(Disposable.Empty); }).Publish(); // Connect the observable the first time someone starts // observing _stream = Observable.Create(observer => { var subscription = c.Subscribe(observer); if (Interlocked.Exchange(ref _connected, 1) == 0) { c.Connect(); } return(subscription); }); }