private void recv(IAsyncResult res) { int bytesRev = 0; try { bytesRev = UdpSocket.EndReceive(res); } catch (ObjectDisposedException) { return; } var endpoints = MasterUtil.ProcessPacket(recvData.Take(bytesRev).ToArray()); //ThreadPool.QueueUserWorkItem(x => Callback(endpoints)); Callback(endpoints); if (!endpoints.Last().Equals(SeedEndpoint)) { Msg = MasterUtil.BuildPacket(endpoints.Last().ToString(), RegionCode, Filter); UdpSocket.Send(Msg); UdpSocket.BeginReceive(recvData, 0, recvData.Length, SocketFlags.None, recv, null); } else { IsListening = false; } }
private ReadOnlyCollection <IPEndPoint> SendAndReceive(Socket udpSocket, byte[] recvData, Region region, IpFilter filter, IPEndPoint seed) { var msg = MasterUtil.BuildPacket(seed.ToString(), region, filter); udpSocket.Send(msg); int len = udpSocket.Receive(recvData, 0, recvData.Length, SocketFlags.None); byte[] data = new byte[len]; Array.Copy(recvData, data, data.Length); return(MasterUtil.ProcessPacket(data)); }