更新时间:2023-10-28 17:28:10
您应该这样设置可观察对象:
You should set up your observable like this:
var observable =
Observable
.Using(
() => new WebSocket(WsEndpoint),
ws =>
Observable
.FromEventPattern<EventHandler<MessageEventArgs>, MessageEventArgs>(
handler => ws.OnMessage += handler,
handler => ws.OnMessage -= handler));
这将正确创建套接字,然后在观察到的订阅时观察事件.取消订阅后,它将正确脱离事件并丢弃套接字.
This will correctly create the socket and then observe the event when the observable is subscribed to. When the subscription is disposed it will correctly detach from the event and dispose of the socket.
observable
的类型将为 IObservable< EventPattern< MessageEventArgs>>
.您可以通过以下方式消耗此可观察值:
The type of observable
will be IObservable<EventPattern<MessageEventArgs>>
. You consume this observable in this way:
IDisposable subscription = observable.Subscribe(ep =>
{
Console.WriteLine(ep.EventArgs.Data);
});
感谢您发布NuGet参考.
Thanks for posted the NuGet reference.
这是工作代码:
const string WsEndpoint = "wss://push.planetside2.com/streaming?environment=ps2&service-id=s:quicktesting";
Console.WriteLine("Defining Observable:");
IObservable<EventPattern<WebSocketSharp.MessageEventArgs>> observable =
Observable
.Using(
() =>
{
var ws = new WebSocketSharp.WebSocket(WsEndpoint);
ws.Connect();
return ws;
},
ws =>
Observable
.FromEventPattern<EventHandler<WebSocketSharp.MessageEventArgs>, WebSocketSharp.MessageEventArgs>(
handler => ws.OnMessage += handler,
handler => ws.OnMessage -= handler));
Console.WriteLine("Subscribing to Observable:");
IDisposable subscription = observable.Subscribe(ep =>
{
Console.WriteLine("Event Recieved");
Console.WriteLine(ep.EventArgs.Data);
});
Console.WriteLine("Writing to Source:");
using (var source = new WebSocketSharp.WebSocket(WsEndpoint))
{
source.Connect();
source.Send("test");
}