コード例 #1
0
        public static IObservable <TSubscriptionDataResponse> GetDataObservable <TSubscriptionDataResponse>(
            this RpcStreamingSubscriptionEventResponseHandler <TSubscriptionDataResponse> rpcEventHandler) =>
        Observable
        .Create <TSubscriptionDataResponse>(o =>
        {
            var evt = Observable.FromEventPattern <StreamingEventArgs <TSubscriptionDataResponse> >(
                h => rpcEventHandler.SubscriptionDataResponse += h,
                h => rpcEventHandler.SubscriptionDataResponse -= h);

            var onSuccess = evt
                            .Where(e => e.EventArgs.Exception == null)
                            .Select(e => e.EventArgs.Response)
                            .Subscribe(o);

            var onError = evt
                          .Where(e => e.EventArgs.Exception != null)
                          .Select(e => e.EventArgs.Exception)
                          .Subscribe(o.OnError);

            var onCompleted = rpcEventHandler
                              .GetUnsubscribeObservable()
                              .Subscribe(
                _ => { },
                _ => { },
                o.OnCompleted);

            return(new CompositeDisposable {
                onSuccess, onError, onCompleted
            });
        })
        .Publish()
        .RefCount();
コード例 #2
0
        GetUnsubscribeObservable <TSubscriptionDataResponse>(this RpcStreamingSubscriptionEventResponseHandler <TSubscriptionDataResponse> rpcEventHandler) =>
        Observable
        .Create <bool>(o =>
        {
            var evt = Observable.FromEventPattern <StreamingEventArgs <bool> >(
                h => rpcEventHandler.UnsubscribeResponse += h,
                h => rpcEventHandler.UnsubscribeResponse -= h);

            var onSuccess = evt
                            .Where(e => e.EventArgs.Exception == null)
                            .Select(e => e.EventArgs.Response)
                            .Subscribe(o);

            var onError = evt
                          .Where(e => e.EventArgs.Exception != null)
                          .Select(e => e.EventArgs.Exception)
                          .Subscribe(o.OnError);

            return(new CompositeDisposable {
                onSuccess, onError
            });
        })
        .Take(1)
        .Publish()
        .RefCount();