public void ReadDnsFile(string FilePath) { DnsNames.Clear(); if (File.Exists(FilePath) && new FileInfo(FilePath).Length > 0) { PayloadReader pr = new PayloadReader(File.ReadAllBytes(FilePath)); for (int i = 0; pr.Offset < pr.Length; i++) { string name = pr.ReadString(); uint DnsId = pr.ReadUInteger(); DnsNames.Add(DnsId, new RootDnsInfo(name, DnsId)); } } }
public object Deserialize(byte[] data) { PayloadReader pr = new PayloadReader(data); ObjectTypes Id = (ObjectTypes)pr.ReadByte(); switch (Id) { case ObjectTypes.Null: return null; case ObjectTypes.Other: { BinaryFormatter bf = new BinaryFormatter(); bf.Binder = new DeserializationBinder(); return bf.Deserialize(new MemoryStream(pr.ReadBytes(pr.Length - pr.Position))); } case ObjectTypes.Byte: return pr.ReadByte(); case ObjectTypes.Short: return pr.ReadShort(); case ObjectTypes.UShort: return pr.ReadUShort(); case ObjectTypes.Int: return pr.ReadInteger(); case ObjectTypes.UINT: return pr.ReadUInteger(); case ObjectTypes.Long: return pr.ReadLong(); case ObjectTypes.Bool: return pr.ReadByte() == 1; case ObjectTypes.String: return pr.ReadString(); case ObjectTypes.SolidBrush: return new SolidBrush(Color.FromArgb(pr.ReadByte(), pr.ReadByte(), pr.ReadByte(), pr.ReadByte())); case ObjectTypes.Rectangle: return new Rectangle(pr.ReadInteger(), pr.ReadInteger(), pr.ReadInteger(), pr.ReadInteger()); case ObjectTypes.Size: return new Size(pr.ReadInteger(), pr.ReadInteger()); case ObjectTypes.ByteArray: return pr.ReadBytes(pr.ReadInteger()); case ObjectTypes.Bitmap: { using (MemoryStream stream = new MemoryStream(pr.Buffer, pr.Position, pr.Length - pr.Position)) { long oldPos = stream.Position; Bitmap bmp = (Bitmap)Bitmap.FromStream(stream); pr.Position += (int)(stream.Position - oldPos); return bmp; } } default: throw new Exception("Error deserializing"); } }
public void OnLogin(ClientSession cs, InPacket ip) { PayloadReader pReader = new PayloadReader(ip.Payload); Database db = new Database(); pReader.Skip(7); byte IDLength = pReader.ReadByte(); UID = pReader.ReadString(IDLength); pReader.Skip(3); byte PWLength = pReader.ReadByte(); UPW = pReader.ReadString(PWLength); if (db.OpenDB()) { try { MySqlDataReader sReader = db.Query("SELECT * FROM users WHERE LOGIN = @0 AND PASS = @1", UID, UPW); Log.SqlQuerys(db.dbcmd.CommandText); if (!sReader.HasRows) { Log.Inform("Falha no login. Usuário: {0}", UID); try { PayloadWriter pWriter = new PayloadWriter(); byte[] plContent = { 0x00, 0x00, 0x00, 0x14 }; pWriter.WriteData(plContent); pWriter.WriteData(IDLength * 2); pWriter.WriteUnicodeString(UID); byte[] plContent1 = { 0x00, 0x00, 0x00, 0x00, 0x00 }; pWriter.WriteData(plContent1); OutPacket oPacket = new OutPacket(pWriter.GetCompressedPayload(CenterOpcodes.ENU_VERIFY_ACCOUNT_ACK), cs._CryptoHandler, cs._AuthHandler, cs.Prefix, ++cs.Count); cs.Send(oPacket); } catch (Exception ex) { Log.Error(ex.Message); while (true) { ; } } } else { // Successful login. Log.Inform("Novo login. Usuário: {0}", UID); // Send server list first. Log.Inform("Enviando a lista de servidores."); SendServerList(cs); SendChannelNews(cs); SendShop(cs); SendClientContentOpen(cs); SendSocketTableInfo(cs); SendCashbackRatio(cs); //Log.Inform("로그인 성공 메시지를 전송합니다.", ID); PayloadWriter pWritter = new PayloadWriter(); byte[] plContent = { 0x00, 0x00, 0x00, 0x00 }; pWritter.WriteData(plContent); pWritter.WriteData(IDLength * 2); pWritter.WriteUnicodeString(UID); pWritter.WriteData(PWLength); pWritter.WriteData(UPW); byte[] plContent2 = Util.StringToByteArray("00 00 00 00 14 00 8E A7 C5 01 00 00 00 00 00 00 02 4B 52 00 05 A3 BD 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 00"); pWritter.WriteData(plContent2); pWritter.WriteData(cs.MyLoading.GuildMarkURL.Length * 2); pWritter.WriteUnicodeString(cs.MyLoading.GuildMarkURL); byte[] plContent3 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; pWritter.WriteData(plContent3); int SHAi = cs.MyLoading.SHAFileList.Length; pWritter.WriteData(SHAi); for (int i = 0; i <= cs.MyLoading.SHAFileList.Length - 1; i++) { pWritter.WriteData(cs.MyLoading.SHAFileList[i].Length * 2); pWritter.WriteUnicodeString(cs.MyLoading.SHAFileList[i]); pWritter.WriteData(true); } byte[] plContent4 = Util.StringToByteArray("00 00 00 01 00 00 00 03 00 00 00 00 00 00 00 00 64 01 00 00 00 00 00 00 00 64 02 00 00 00 00 00 00 00 64 01 BF 80 00 00 FC 04 97 FF 00 00 00 00 00 00 00 00 00 00 00 00"); pWritter.WriteData(plContent4); OutPacket oPacket = new OutPacket(pWritter.GetCompressedPayload(CenterOpcodes.ENU_VERIFY_ACCOUNT_ACK), cs._CryptoHandler, cs._AuthHandler, cs.Prefix, ++cs.Count); cs.Send(oPacket); } sReader.Close(); db.dbconn.Close(); } catch (MySql.Data.MySqlClient.MySqlException ex) { Log.Sql(ex.Message); while (true) { ; } } } }
public IMessage DeCacheMessage(IMessage message, PayloadReader pr, ref bool isCached, ref IMessage CachedMessage, MessageHandler msgHandler) { lock (Messages) { uint Id = msgHandler.GetMessageId(message.GetType()); isCached = pr.ReadBool(); if (!Messages.TryGetValue(Id, out CachedMessage) && !isCached) { CachedMessage = (IMessage)Activator.CreateInstance(message.GetType()); Messages.Add(Id, (IMessage)Activator.CreateInstance(message.GetType())); FieldInfo[] _fields = message.GetType().GetFields(); FieldInfo[] _cachedFields = CachedMessage.GetType().GetFields(); for (int i = 0; i < _fields.Length; i++) { //de-serialize objects int oldPos = pr.Offset; _fields[i].SetValue(message, pr.ReadObject()); pr.Offset = oldPos; _fields[i].SetValue(Messages[Id], pr.ReadObject()); } return(message); } FieldInfo[] fields = message.GetType().GetFields(); FieldInfo[] cacheFields = CachedMessage.GetType().GetFields(); for (int i = 0; i < fields.Length; i++) { MessageCacheType CacheType = (MessageCacheType)pr.ReadByte(); object NewValue = null; switch (CacheType) { case MessageCacheType.Bool: { NewValue = pr.ReadBool(); break; } case MessageCacheType.Byte: { NewValue = pr.ReadByte(); break; } case MessageCacheType.ByteArray: { uint size = pr.ReadUInteger(); NewValue = pr.ReadBytes((int)size); break; } case MessageCacheType.Decimal: { NewValue = pr.ReadDecimal(); break; } case MessageCacheType.Double: { NewValue = pr.ReadDouble(); break; } case MessageCacheType.Float: { NewValue = pr.ReadFloat(); break; } case MessageCacheType.Long: { NewValue = pr.ReadLong(); break; } case MessageCacheType.NULL: { NewValue = null; break; } case MessageCacheType.OtherObject: { NewValue = pr.ReadObject(); break; } case MessageCacheType.Short: { NewValue = pr.ReadShort(); break; } case MessageCacheType.String: { NewValue = pr.ReadString(); break; } case MessageCacheType.Integer: { NewValue = pr.ReadInteger(); break; } case MessageCacheType.UInteger: { NewValue = pr.ReadUInteger(); break; } case MessageCacheType.ULong: { NewValue = pr.ReadULong(); break; } case MessageCacheType.UShort: { NewValue = pr.ReadUShort(); break; } case MessageCacheType.NotUpdated: { NewValue = cacheFields[i].GetValue(CachedMessage); break; } } fields[i].SetValue(message, NewValue); } } return(message); }