mirror of
https://github.com/MikuLeaks/KianaBH3.git
synced 2025-12-12 21:04:41 +01:00
Init enter game
This commit is contained in:
67
KcpSharp/BasePacket.cs
Normal file
67
KcpSharp/BasePacket.cs
Normal file
@@ -0,0 +1,67 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user