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;
            }
        }
Exemple #2
0
        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));
        }