/
NLObP
/
AAEmu
Обзор
Документация
Войти
/
NLObP
/
AAEmu
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
AAEmu.Game/Core/Network/Game/GamePacket.cs
125 строк
3 KB
NLObP
Feature/indun2 (#790)
16 дек 2023, 22:20
Не верифицирован
16 дек 2023, 22:20
938147b
Код
Авторство
О чём код?
using System; using AAEmu.Commons.Network; using AAEmu.Game.Core.Network.Connections; namespace AAEmu.Game.Core.Network.Game; public abstract class GamePacket : PacketBase<GameConnection> { public byte Level { get; set; } protected GamePacket(ushort typeId, byte level) : base(typeId) { Level = level; } /// <summary> /// This is called in Encode after Read() in the case of GamePackets /// The purpose is to separate packet data from packet behavior /// </summary> public virtual void Execute() { } public override PacketStream Encode() { var ps = new PacketStream(); try { var packet = new PacketStream() .Write((byte)0xdd) .Write(Level); var body = new PacketStream() .Write(TypeId) .Write(this); if (Level == 1) { packet .Write((byte)0) // hash .Write((byte)0); // count } packet.Write(body, false); ps.Write(packet); } catch (Exception ex) { Logger.Fatal(ex); throw; } var logString = $"GamePacket: S->C type {TypeId:X3} {ToString()?.Substring(23)}{Verbose()}"; switch (LogLevel) { case PacketLogLevel.Trace: Logger.Trace(logString); break; case PacketLogLevel.Debug: Logger.Debug(logString); break; case PacketLogLevel.Info: Logger.Info(logString); break; case PacketLogLevel.Warning: Logger.Warn(logString); break; case PacketLogLevel.Error: Logger.Error(logString); break; case PacketLogLevel.Fatal: Logger.Fatal(logString); break; case PacketLogLevel.Off: default: break; } return ps; } public override PacketBase<GameConnection> Decode(PacketStream ps) { try { Read(ps); var logString = $"GamePacket: C->S type {TypeId:X3} {ToString()?.Substring(23)}{Verbose()}"; switch (LogLevel) { case PacketLogLevel.Trace: Logger.Trace(logString); break; case PacketLogLevel.Debug: Logger.Debug(logString); break; case PacketLogLevel.Info: Logger.Info(logString); break; case PacketLogLevel.Warning: Logger.Warn(logString); break; case PacketLogLevel.Error: Logger.Error(logString); break; case PacketLogLevel.Fatal: Logger.Fatal(logString); break; case PacketLogLevel.Off: default: break; } Execute(); } catch (Exception ex) { Logger.Error("GamePacket: C->S type {0:X3} {1}", TypeId, ToString()?.Substring(23)); Logger.Fatal(ex); throw; } return this; } }