mirror of
https://github.com/rafi1212122/PemukulPaku
synced 2026-02-04 12:55:06 +01:00
proper message processing and avatar team data
This commit is contained in:
22
GameServer/Handlers/GetAvatarTeamDataReqHandler.cs
Normal file
22
GameServer/Handlers/GetAvatarTeamDataReqHandler.cs
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
using Common.Resources.Proto;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace PemukulPaku.GameServer.Handlers
|
||||||
|
{
|
||||||
|
[PacketCmdId(CmdId.GetAvatarTeamDataReq)]
|
||||||
|
internal class GetAvatarTeamDataReqHandler : IPacketHandler
|
||||||
|
{
|
||||||
|
public void Handle(Session session, Packet packet)
|
||||||
|
{
|
||||||
|
GetAvatarTeamDataRsp Rsp = new()
|
||||||
|
{
|
||||||
|
retcode = GetAvatarTeamDataRsp.Retcode.Succ
|
||||||
|
};
|
||||||
|
|
||||||
|
Rsp.AvatarTeamLists.AddRange(session.Player.User.AvatarTeamList);
|
||||||
|
Rsp.CustomAvatarTeamLists.AddRange(session.Player.User.CustomAvatarTeamList);
|
||||||
|
|
||||||
|
session.Send(Packet.FromProto(Rsp, CmdId.GetAvatarTeamDataRsp));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -28,9 +28,6 @@ namespace PemukulPaku.GameServer
|
|||||||
{
|
{
|
||||||
NetworkStream stream = Client.GetStream();
|
NetworkStream stream = Client.GetStream();
|
||||||
|
|
||||||
byte[] packetMagic = { 0x01, 0x23, 0x45, 0x67 }; // Magic start pattern
|
|
||||||
byte[] packetEnd = { 0x89, 0xAB, 0xCD, 0xEF }; // Magic end pattern
|
|
||||||
|
|
||||||
byte[] msg = new byte[1 << 16];
|
byte[] msg = new byte[1 << 16];
|
||||||
|
|
||||||
while (Client.Connected)
|
while (Client.Connected)
|
||||||
@@ -42,24 +39,29 @@ namespace PemukulPaku.GameServer
|
|||||||
{
|
{
|
||||||
List<byte[]> packets = new ();
|
List<byte[]> packets = new ();
|
||||||
|
|
||||||
string CursedMsg = BitConverter.ToString(msg).Replace("-", "");
|
ReadOnlySpan<byte> prefix = new byte[] { 0x01, 0x23, 0x45, 0x67 };
|
||||||
string CursedMagic = BitConverter.ToString(packetMagic).Replace("-", "");
|
ReadOnlySpan<byte> suffix = new byte[] { 0x89, 0xAB, 0xCD, 0xEF };
|
||||||
string CursedEnd = BitConverter.ToString(packetEnd).Replace("-", "");
|
|
||||||
|
|
||||||
int MagicIndex = 0;
|
Span<byte> message = msg.AsSpan();
|
||||||
int EndIndex = 0;
|
|
||||||
|
|
||||||
while ((MagicIndex = CursedMsg.IndexOf(CursedMagic, MagicIndex)) != -1 && (EndIndex = CursedMsg.IndexOf(CursedEnd, EndIndex)) != -1)
|
for (int offset = 0; offset < message.Length;)
|
||||||
{
|
{
|
||||||
EndIndex += 8;
|
var segment = message[offset..];
|
||||||
byte[] packet = new byte[EndIndex / 2 - MagicIndex / 2];
|
int start = segment.IndexOf(prefix);
|
||||||
Array.Copy(msg, MagicIndex / 2, packet, 0, EndIndex / 2 - MagicIndex / 2);
|
|
||||||
packets.Add(packet);
|
|
||||||
MagicIndex += MagicIndex;
|
|
||||||
EndIndex += EndIndex;
|
|
||||||
}
|
|
||||||
|
|
||||||
c.Debug($"Found {packets.Count} packet");
|
if (start == -1)
|
||||||
|
break;
|
||||||
|
|
||||||
|
int end = segment.IndexOf(suffix);
|
||||||
|
|
||||||
|
if (end == -1)
|
||||||
|
break;
|
||||||
|
|
||||||
|
end += suffix.Length;
|
||||||
|
|
||||||
|
packets.Add(segment[start..end].ToArray());
|
||||||
|
offset += end;
|
||||||
|
}
|
||||||
|
|
||||||
foreach (byte[] packet in packets)
|
foreach (byte[] packet in packets)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user