mirror of
https://github.com/MikuLeaks/KianaBH3.git
synced 2025-12-12 13:04:33 +01:00
67 lines
1.8 KiB
C#
67 lines
1.8 KiB
C#
using KianaBH.Util.Extensions;
|
|
using Google.Protobuf;
|
|
|
|
namespace KianaBH.KcpSharp;
|
|
|
|
public class BasePacket(ushort cmdId)
|
|
{
|
|
private const uint HEADER_CONST = 0x01234567;
|
|
private const uint TAIL_CONST = 0x89ABCDEF;
|
|
|
|
private uint HeadMagic { get; set; }
|
|
private ushort PacketVersion { get; set; } = 1;
|
|
private ushort ClientVersion { get; set; }
|
|
private uint PacketId { get; set; }
|
|
public uint UserId { get; set; }
|
|
private uint UserIp { get; set; }
|
|
private uint Sign { get; set; }
|
|
private ushort SignType { get; set; }
|
|
public ushort CmdId { get; set; } = cmdId;
|
|
private ushort HeaderLength { get; set; }
|
|
private uint BodyLength { get; set; }
|
|
private byte[] Header { get; set; } = [];
|
|
public byte[] Body { get; set; } = [];
|
|
private uint TailMagic { get; set; }
|
|
|
|
public void SetData(byte[] data)
|
|
{
|
|
Body = data;
|
|
}
|
|
|
|
public void SetData(IMessage message)
|
|
{
|
|
Body = message.ToByteArray();
|
|
}
|
|
|
|
public void SetData(string base64)
|
|
{
|
|
SetData(Convert.FromBase64String(base64));
|
|
}
|
|
|
|
public byte[] BuildPacket()
|
|
{
|
|
using MemoryStream? ms = new();
|
|
using BinaryWriter? bw = new(ms);
|
|
|
|
bw.WriteUInt32BE(HEADER_CONST);
|
|
bw.WriteUInt16BE(PacketVersion);
|
|
bw.WriteUInt16BE(ClientVersion);
|
|
bw.WriteUInt32BE(PacketId);
|
|
bw.WriteUInt32BE(UserId);
|
|
bw.WriteUInt32BE(UserIp);
|
|
bw.WriteUInt32BE(Sign);
|
|
bw.WriteUInt16BE(SignType);
|
|
bw.WriteUInt16BE(CmdId);
|
|
bw.WriteUInt16BE((ushort)(Header.Length));
|
|
bw.WriteUInt32BE((uint)(Body.Length));
|
|
|
|
bw.Write(Header.ToArray());
|
|
bw.Write(Body.ToArray());
|
|
|
|
bw.WriteUInt32BE(TAIL_CONST);
|
|
|
|
var packet = ms.ToArray();
|
|
|
|
return packet;
|
|
}
|
|
} |