public PacketIn DeCrypt(PacketIn packet) { if (m_crypts.Count <= 0) { return(packet); } ulong opcode = packet.Opcode; ulong size = packet.Size; long StartPos = packet.Position; foreach (KeyValuePair <ICryptHandler, CryptKey[]> Entry in m_crypts) { try { Log.Debug("Decrypt", "Decrypt with " + Entry.Key + ",Size=" + packet.Size); byte[] Buf = new byte[size]; long Pos = packet.Position; packet.Read(Buf, 0, (int)Buf.Length); packet.Position = Pos; PacketIn Pack = Entry.Key.Decrypt(Entry.Value[1], Buf); packet.Write(Pack.ToArray(), 0, Pack.ToArray().Length); packet.Opcode = opcode; packet.Size = size; } catch (Exception e) { Log.Error("BaseClient", "Decrypt Error : " + e.ToString()); continue; } } Log.Tcp("Decrypt", packet.ToArray(), 0, packet.ToArray().Length); packet.Position = StartPos; return(packet); }