OctoTorrent.Client.LocalPeerListener.OnReceiveCallBack C# (CSharp) Method

OnReceiveCallBack() private method

private OnReceiveCallBack ( IAsyncResult asyncResult ) : void
asyncResult IAsyncResult
return void
        private void OnReceiveCallBack(IAsyncResult asyncResult)
        {
            var udpClient = (UdpClient) asyncResult.AsyncState;
            var endPoint = new IPEndPoint(IPAddress.Any, 0);
            try
            {
                var receiveBytes = udpClient.EndReceive(asyncResult, ref endPoint);
                var receiveString = Encoding.ASCII.GetString(receiveBytes);

                var exp = new Regex("BT-SEARCH \\* HTTP/1.1\\r\\nHost: 239.192.152.143:6771\\r\\nPort: (?<port>[^@]+)\\r\\nInfohash: (?<hash>[^@]+)\\r\\n\\r\\n\\r\\n");
                var match = exp.Match(receiveString);

                if (!match.Success)
                    return;

                var portcheck = Convert.ToInt32(match.Groups["port"].Value);
                if (portcheck < 0 || portcheck > 65535)
                    return;

                TorrentManager manager = null;
                var matchHash = InfoHash.FromHex(match.Groups["hash"].Value);
                for (var i = 0; manager == null && i < _engine.Torrents.Count; i++)
                    if (_engine.Torrents[i].InfoHash == matchHash)
                        manager = _engine.Torrents[i];

                if (manager == null)
                    return;

                var uri = new Uri(string.Format("tcp://{0}{1}{2}", endPoint.Address, ':', match.Groups["port"].Value));
                var peer = new Peer("", uri, EncryptionTypes.All);

                // Add new peer to matched Torrent
                if (!manager.HasMetadata || !manager.Torrent.IsPrivate)
                {
                    ClientEngine.MainLoop.Queue(() =>
                                                    {
                                                        var count = manager.AddPeersCore(peer);
                                                        manager.RaisePeersFound(new LocalPeersAdded(manager, count, 1));
                                                    });
                }
            }
            catch
            {
                // Failed to receive data, ignore
            }
            finally
            {
                try
                {
                    udpClient.BeginReceive(OnReceiveCallBack, asyncResult.AsyncState);
                }
                catch
                {
                    // It's closed
                }
            }
        }