mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-05-20 08:26:59 -04:00
Reorganized the packets to follow the format the map server follows.
This commit is contained in:
@@ -1,90 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FFXIVClassic_Lobby_Server.packets
|
||||
{
|
||||
class PacketStructs
|
||||
{
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
public unsafe struct SessionPacket
|
||||
{
|
||||
[FieldOffset(0)]
|
||||
public UInt64 sequence;
|
||||
[FieldOffset(0x10)]
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x40)]
|
||||
public String session;
|
||||
[FieldOffset(0x50)]
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x20)]
|
||||
public String version;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public unsafe struct CharacterRequestPacket
|
||||
{
|
||||
public UInt64 sequence;
|
||||
public uint characterId;
|
||||
public uint personType;
|
||||
public byte slot;
|
||||
public byte command;
|
||||
public ushort worldId;
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x20)]
|
||||
public String characterName;
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x190)]
|
||||
public String characterInfoEncoded;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public unsafe struct SelectCharRequestPacket
|
||||
{
|
||||
public UInt64 sequence;
|
||||
public uint characterId;
|
||||
public uint unknownId;
|
||||
public UInt64 ticket;
|
||||
}
|
||||
|
||||
public static unsafe CharacterRequestPacket toCharacterRequestStruct(byte[] bytes)
|
||||
{
|
||||
fixed (byte* pdata = &bytes[0])
|
||||
{
|
||||
return (CharacterRequestPacket)Marshal.PtrToStructure(new IntPtr(pdata), typeof(CharacterRequestPacket));
|
||||
}
|
||||
}
|
||||
|
||||
public static unsafe SessionPacket toSessionStruct(byte[] bytes)
|
||||
{
|
||||
fixed (byte* pdata = &bytes[0])
|
||||
{
|
||||
return (SessionPacket)Marshal.PtrToStructure(new IntPtr(pdata), typeof(SessionPacket));
|
||||
}
|
||||
}
|
||||
|
||||
public static unsafe SelectCharRequestPacket toSelectCharRequestStruct(byte[] bytes)
|
||||
{
|
||||
fixed (byte* pdata = &bytes[0])
|
||||
{
|
||||
return (SelectCharRequestPacket)Marshal.PtrToStructure(new IntPtr(pdata), typeof(SelectCharRequestPacket));
|
||||
}
|
||||
}
|
||||
|
||||
public static byte[] StructureToByteArray(object obj)
|
||||
{
|
||||
int len = Marshal.SizeOf(obj);
|
||||
|
||||
byte[] arr = new byte[len];
|
||||
|
||||
IntPtr ptr = Marshal.AllocHGlobal(len);
|
||||
|
||||
Marshal.StructureToPtr(obj, ptr, true);
|
||||
|
||||
Marshal.Copy(ptr, arr, 0, len);
|
||||
|
||||
Marshal.FreeHGlobal(ptr);
|
||||
|
||||
return arr;
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,48 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FFXIVClassic_Lobby_Server.packets.receive
|
||||
{
|
||||
class CharacterModifyPacket
|
||||
{
|
||||
public UInt64 sequence;
|
||||
public uint characterId;
|
||||
public uint personType;
|
||||
public byte slot;
|
||||
public byte command;
|
||||
public ushort worldId;
|
||||
public String characterName;
|
||||
public String characterInfoEncoded;
|
||||
|
||||
public bool invalidPacket = false;
|
||||
|
||||
public CharacterModifyPacket(byte[] data)
|
||||
{
|
||||
using (MemoryStream mem = new MemoryStream(data))
|
||||
{
|
||||
using (BinaryReader binReader = new BinaryReader(mem))
|
||||
{
|
||||
try
|
||||
{
|
||||
sequence = binReader.ReadUInt64();
|
||||
characterId = binReader.ReadUInt32();
|
||||
personType = binReader.ReadUInt32();
|
||||
slot = binReader.ReadByte();
|
||||
command = binReader.ReadByte();
|
||||
worldId = binReader.ReadUInt16();
|
||||
|
||||
characterName = Encoding.ASCII.GetString(binReader.ReadBytes(0x20)).Trim(new[] { '\0' });
|
||||
characterInfoEncoded = Encoding.ASCII.GetString(binReader.ReadBytes(0x190)).Trim(new[] { '\0' });
|
||||
}
|
||||
catch (Exception){
|
||||
invalidPacket = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,40 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FFXIVClassic_Lobby_Server.packets.receive
|
||||
{
|
||||
class SelectCharacterPacket
|
||||
{
|
||||
public UInt64 sequence;
|
||||
public uint characterId;
|
||||
public uint unknownId;
|
||||
public UInt64 ticket;
|
||||
|
||||
public bool invalidPacket = false;
|
||||
|
||||
public SelectCharacterPacket(byte[] data)
|
||||
{
|
||||
using (MemoryStream mem = new MemoryStream(data))
|
||||
{
|
||||
using (BinaryReader binReader = new BinaryReader(mem))
|
||||
{
|
||||
try
|
||||
{
|
||||
sequence = binReader.ReadUInt64();
|
||||
characterId = binReader.ReadUInt32();
|
||||
unknownId = binReader.ReadUInt32();
|
||||
ticket = binReader.ReadUInt64();
|
||||
}
|
||||
catch (Exception){
|
||||
invalidPacket = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
38
FFXIVClassic_Lobby_Server/packets/receive/SessionPacket.cs
Normal file
38
FFXIVClassic_Lobby_Server/packets/receive/SessionPacket.cs
Normal file
@@ -0,0 +1,38 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FFXIVClassic_Lobby_Server.packets.receive
|
||||
{
|
||||
class SessionPacket
|
||||
{
|
||||
public bool invalidPacket = false;
|
||||
public UInt64 sequence;
|
||||
public String session;
|
||||
public String version;
|
||||
|
||||
public SessionPacket(byte[] data)
|
||||
{
|
||||
using (MemoryStream mem = new MemoryStream(data))
|
||||
{
|
||||
using (BinaryReader binReader = new BinaryReader(mem))
|
||||
{
|
||||
try
|
||||
{
|
||||
sequence = binReader.ReadUInt64();
|
||||
binReader.ReadUInt32();
|
||||
binReader.ReadUInt32();
|
||||
session = Encoding.ASCII.GetString(binReader.ReadBytes(0x40)).Trim(new[] { '\0' });
|
||||
version = Encoding.ASCII.GetString(binReader.ReadBytes(0x20)).Trim(new[] { '\0' });
|
||||
}
|
||||
catch (Exception){
|
||||
invalidPacket = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user