/// <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()); }
/// <summary>オブザーバーが通知を受け取ることをプロバイダーに通知します。</summary> /// <returns>プロバイダーが通知の送信を完了する前に、オブザーバーが通知の受信を停止できるインターフェイスへの参照。</returns> /// <param name="observer">通知を受け取るオブジェクト。</param> IDisposable IObservable <SenderModel> .Subscribe(IObserver <SenderModel> observer) => SenderSubject.Subscribe(observer);