RatioMaster_source.RM.GETDATA C# (CSharp) Method

GETDATA() private method

private GETDATA ( string client, string pversion, string SearchString, long startoffset, long maxoffset ) : bool
client string
pversion string
SearchString string
startoffset long
maxoffset long
return bool
        internal bool GETDATA(string client, string pversion, string SearchString, long startoffset, long maxoffset)
        {
            try
            {
                ProcessMemoryReader pReader;
                long absoluteEndOffset = maxoffset;
                long absoluteStartOffset = startoffset;
                string clientSearchString = SearchString;
                uint bufferSize = 0x10000;
                string currentClientProcessName = client.ToLower();
                long currentOffset;
                Encoding enc = Encoding.ASCII;
                Process process1 = FindProcessByName(currentClientProcessName);
                if (process1 == null)
                {
                    return false;
                }

                currentOffset = absoluteStartOffset;
                pReader = new ProcessMemoryReader();
                pReader.ReadProcess = process1;
                bool flag1 = false;

                // AddLogLine("Debug: before pReader.OpenProcess();");
                pReader.OpenProcess();

                // AddLogLine("Debug: pReader.OpenProcess();");
                while (currentOffset < absoluteEndOffset)
                {
                    long num2;

                    // AddLogLine("Debug: " + currentOffset.ToString());
                    int num1;
                    byte[] buffer1 = pReader.ReadProcessMemory((IntPtr)currentOffset, bufferSize, out num1);

                    // pReader.saveArrayToFile(buffer1, @"D:\Projects\NRPG Ratio\NRPG RatioMaster MULTIPLE\RatioMaster source\bin\Release\tests\test" + currentOffset.ToString() + ".txt");
                    num2 = getStringOffsetInsideArray(buffer1, enc, clientSearchString);
                    if (num2 >= 0)
                    {
                        flag1 = true;
                        string text1 = enc.GetString(buffer1);
                        Match match1 = new Regex("&peer_id=(.+?)(&| )", RegexOptions.Compiled).Match(text1);
                        if (match1.Success)
                        {
                            currentClient.PeerID = match1.Groups[1].ToString();
                            AddLogLine("====> PeerID = " + currentClient.PeerID);
                        }

                        match1 = new Regex("&key=(.+?)(&| )", RegexOptions.Compiled).Match(text1);
                        if (match1.Success)
                        {
                            currentClient.Key = match1.Groups[1].ToString();
                            AddLogLine("====> Key = " + currentClient.Key);
                        }

                        match1 = new Regex("&port=(.+?)(&| )", RegexOptions.Compiled).Match(text1);
                        if (match1.Success)
                        {
                            currentTorrent.port = match1.Groups[1].ToString();
                            AddLogLine("====> Port = " + currentTorrent.port);
                        }

                        match1 = new Regex("&numwant=(.+?)(&| )", RegexOptions.Compiled).Match(text1);
                        if (match1.Success)
                        {
                            currentTorrent.numberOfPeers = match1.Groups[1].ToString();
                            AddLogLine("====> NumWant = " + currentTorrent.numberOfPeers);
                            int res;
                            if (!int.TryParse(currentTorrent.numberOfPeers, out res)) currentTorrent.numberOfPeers = currentClient.DefNumWant.ToString();
                        }

                        num2 += currentOffset;
                        AddLogLine("currentOffset = " + currentOffset);
                        break;
                    }

                    currentOffset += (int)bufferSize;
                }

                pReader.CloseHandle();
                if (flag1)
                {
                    AddLogLine("Search finished successfully!");
                    return true;
                }
                else
                {
                    AddLogLine("Search failed. Make sure that torrent client {" + GetClientName() + "} is running and that at least one torrent is working.");
                    return false;
                }
            }
            catch(Exception ex)
            {
                AddLogLine("Error when parsing: " + ex.Message);
                return false;
            }
        }