linqを使用して、websocket接続を介して受信したイベントを処理します。私を切り株Reactive Extensionsで着信websocketメッセージを監視していますか?
private static void Main()
{
string WsEndpoint = "wss://push.planetside2.com/streaming?environment=ps2&service-id=s:quicktesting";
using (WebSocket ws = new WebSocket(WsEndpoint))
{
ws.OnMessage += Ws_OnMessage;
ws.Connect();
Console.ReadKey();
ws.Close();
}
}
private static void Ws_OnMessage(object sender, MessageEventArgs e)
{
Console.WriteLine(e.Data);
}
最初のシンクタンクは、イベント・ストリームのいくつかの並べ替えにws.OnMessage
を有効にする方法である:これは私がこれまで持っているものです。私は外部イベントソースを反応的な拡張子で観測するためのオンラインサンプルを見つけることができません。私はjsonオブジェクトにメッセージを解析し、それをフィルタリングして集約しようと考えています。
誰かがwebsocketメッセージからobservableを作成し、それにサブスクライブする例を提供できますか?
編集:選択した解答から最終的な作業コード
唯一の違いは、私はあなたがこのようなあなたに観察を設定する必要がありますObservable.Using
//-------------------------------------------------------
// Create websocket connection
//-------------------------------------------------------
const string wsEndpoint = "wss://push.planetside2.com/streaming?environment=ps2&service-id=s:quicktesting";
WebSocket socket = new WebSocket(wsEndpoint);
//-------------------------------------------------------
// Create an observable by wrapping ws.OnMessage
//-------------------------------------------------------
var globalEventStream = Observable
.Using(
() => socket,
ws =>
Observable
.FromEventPattern<EventHandler<MessageEventArgs>, MessageEventArgs>(
handler => ws.OnMessage += handler,
handler => ws.OnMessage -= handler));
//---------------------------------------------------------
// Subscribe to globalEventStream
//---------------------------------------------------------
IDisposable subscription = globalEventStream.Subscribe(ep =>
{
Console.WriteLine("Event Recieved");
Console.WriteLine(ep.EventArgs.Data);
});
//----------------------------------------------------------
// Send message over websocket
//----------------------------------------------------------
socket.Connect();
socket.Send("test message");
// When finished, close the connection.
socket.Close();
あなたは何 'WebSocket'ライブラリを使用している:
ここで作業コードですか? – Jacob
私は 'WebSocketSharp'を使用しています – mooglinux
@mooglinux - なぜ' .Publish() 'コールがありますか?それは、あなたがobservableで '.Connect()'を呼び出すまで、すべての値を防ぎます。おそらく '.Publish()'だけを削除することができます。 – Enigmativity