예제 #1
0
        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="context"></param>
        /// <param name="channel"></param>
        public SenderClient(WebSocketContext context, string channel)
        {
            Context = context;
            Channel = channel;
            var receiveObservable = Observable
                                    .FromAsync(() => ReceiveAsync(context.WebSocket, _buffer))
                                    .Repeat()
                                    .Publish()
                                    .RefCount();

            receiveObservable.Subscribe(
                x =>
            {
                if (x.Item1.MessageType == WebSocketMessageType.Close)
                {
                    SenderSubject
                    .OnNext(new SenderModel(channel, x.Item1.MessageType == WebSocketMessageType.Binary, x.Item2,
                                            true));
                    SenderSubject.OnCompleted();
                }
                else
                {
                    SenderSubject
                    .OnNext(new SenderModel(channel, x.Item1.MessageType == WebSocketMessageType.Binary, x.Item2));
                }
            }
                , e => SenderSubject.OnError(e)
                , () => SenderSubject.OnCompleted());
        }
예제 #2
0
 /// <summary>オブザーバーが通知を受け取ることをプロバイダーに通知します。</summary>
 /// <returns>プロバイダーが通知の送信を完了する前に、オブザーバーが通知の受信を停止できるインターフェイスへの参照。</returns>
 /// <param name="observer">通知を受け取るオブジェクト。</param>
 IDisposable IObservable <SenderModel> .Subscribe(IObserver <SenderModel> observer)
 => SenderSubject.Subscribe(observer);