Я хочу использовать linq для обработки событий, полученных через соединение с веб-разъемом. Это то, что я до сих пор:Наблюдение входящих сообщений веб-памяти с реактивными расширениями?
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-объектах, а затем фильтровать их и агрегировать.
Может ли кто-нибудь предоставить пример создания наблюдаемого из сообщений веб-камеры и подписаться на него?
Edit: Заключительный рабочий код
Единственное отличие от выбранного ответа заключается в том, что я инициализирован WebSocket перед передачей его в 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() '? Это предотвратит все значения, пока вы не назовете '.Connect()' на наблюдаемое. Вероятно, вы можете просто удалить '.Publish()'. – Enigmativity