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());
     })));
 }
Exemplo n.º 2
0
 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);
     });
 }
Exemplo n.º 3
0
    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);
        });
    }