Я узнаю о Reactive расширениях и пытаюсь переформулировать часть моего кода.
UDPClient.EndReceive
принимает параметр ref IPEndPoint
, поэтому у меня в данный момент работает:
UdpClient receiverUDP = new UdpClient();
receiverUDP.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
receiverUDP.EnableBroadcast = true;
receiverUDP.Client.ExclusiveAddressUse = false;
receiverUDP.Client.Bind(new IPEndPoint(IPAddress.Any, 1234));
IPEndPoint ep = null;
var async = Observable.FromAsyncPattern<byte[]>(receiverUDP.BeginReceive, (i) => receiverUDP.EndReceive(i, ref ep));
var subscr = async().Subscribe(x => Console.WriteLine(ASCIIEncoding.ASCII.GetString(x)));
Что если моим подписчикам нужен доступ к удаленному IPEndPoint? В моем текущем воплощении я использую события и возвращаю пользовательский класс, который включает byte[]
и IPEndPoint
. Я не могу ради своей жизни понять, как это сделать с помощью Rx.