mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-04-24 21:57:45 +00:00
Reorganized the packets to follow the format the map server follows.
This commit is contained in:
parent
8c73f6e926
commit
23dcc1dafe
14 changed files with 141 additions and 103 deletions
|
@ -71,17 +71,19 @@
|
||||||
<Compile Include="dataobjects\World.cs" />
|
<Compile Include="dataobjects\World.cs" />
|
||||||
<Compile Include="PacketProcessor.cs" />
|
<Compile Include="PacketProcessor.cs" />
|
||||||
<Compile Include="packets\BasePacket.cs" />
|
<Compile Include="packets\BasePacket.cs" />
|
||||||
<Compile Include="packets\CharaCreatorPacket.cs" />
|
<Compile Include="packets\receive\CharacterModifyPacket.cs" />
|
||||||
<Compile Include="packets\RetainerListPacket.cs" />
|
<Compile Include="packets\receive\SelectCharacterPacket.cs" />
|
||||||
<Compile Include="packets\ErrorPacket.cs" />
|
<Compile Include="packets\receive\SessionPacket.cs" />
|
||||||
|
<Compile Include="packets\send\CharaCreatorPacket.cs" />
|
||||||
|
<Compile Include="packets\send\RetainerListPacket.cs" />
|
||||||
|
<Compile Include="packets\send\ErrorPacket.cs" />
|
||||||
<Compile Include="packets\HardCoded_Packets.cs" />
|
<Compile Include="packets\HardCoded_Packets.cs" />
|
||||||
<Compile Include="packets\PacketStructs.cs" />
|
<Compile Include="packets\send\SelectCharacterConfirmPacket.cs" />
|
||||||
<Compile Include="packets\SelectCharacterConfirmPacket.cs" />
|
|
||||||
<Compile Include="packets\SubPacket.cs" />
|
<Compile Include="packets\SubPacket.cs" />
|
||||||
<Compile Include="packets\CharacterListPacket.cs" />
|
<Compile Include="packets\send\CharacterListPacket.cs" />
|
||||||
<Compile Include="packets\ImportListPacket.cs" />
|
<Compile Include="packets\send\ImportListPacket.cs" />
|
||||||
<Compile Include="packets\AccountListPacket.cs" />
|
<Compile Include="packets\send\AccountListPacket.cs" />
|
||||||
<Compile Include="packets\WorldListPacket.cs" />
|
<Compile Include="packets\send\WorldListPacket.cs" />
|
||||||
<Compile Include="Program.cs" />
|
<Compile Include="Program.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="Server.cs" />
|
<Compile Include="Server.cs" />
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
using FFXIVClassic_Lobby_Server.common;
|
using FFXIVClassic_Lobby_Server.common;
|
||||||
using FFXIVClassic_Lobby_Server.dataobjects;
|
using FFXIVClassic_Lobby_Server.dataobjects;
|
||||||
using FFXIVClassic_Lobby_Server.packets;
|
using FFXIVClassic_Lobby_Server.packets;
|
||||||
|
using FFXIVClassic_Lobby_Server.packets.receive;
|
||||||
using MySql.Data.MySqlClient;
|
using MySql.Data.MySqlClient;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
@ -79,7 +80,7 @@ namespace FFXIVClassic_Lobby_Server
|
||||||
|
|
||||||
private void ProcessSessionAcknowledgement(ClientConnection client, SubPacket packet)
|
private void ProcessSessionAcknowledgement(ClientConnection client, SubPacket packet)
|
||||||
{
|
{
|
||||||
PacketStructs.SessionPacket sessionPacket = PacketStructs.toSessionStruct(packet.data);
|
SessionPacket sessionPacket = new SessionPacket(packet.data);
|
||||||
String clientVersion = sessionPacket.version;
|
String clientVersion = sessionPacket.version;
|
||||||
|
|
||||||
Log.info(String.Format("Got acknowledgment for secure session."));
|
Log.info(String.Format("Got acknowledgment for secure session."));
|
||||||
|
@ -127,7 +128,7 @@ namespace FFXIVClassic_Lobby_Server
|
||||||
|
|
||||||
private void ProcessSelectCharacter(ClientConnection client, SubPacket packet)
|
private void ProcessSelectCharacter(ClientConnection client, SubPacket packet)
|
||||||
{
|
{
|
||||||
FFXIVClassic_Lobby_Server.packets.PacketStructs.SelectCharRequestPacket selectCharRequest = PacketStructs.toSelectCharRequestStruct(packet.data);
|
SelectCharacterPacket selectCharRequest = new SelectCharacterPacket(packet.data);
|
||||||
|
|
||||||
Log.info(String.Format("{0} => Select character id {1}", client.currentUserId == 0 ? client.getAddress() : "User " + client.currentUserId, selectCharRequest.characterId));
|
Log.info(String.Format("{0} => Select character id {1}", client.currentUserId == 0 ? client.getAddress() : "User " + client.currentUserId, selectCharRequest.characterId));
|
||||||
|
|
||||||
|
@ -156,8 +157,7 @@ namespace FFXIVClassic_Lobby_Server
|
||||||
|
|
||||||
private void ProcessModifyCharacter(ClientConnection client, SubPacket packet)
|
private void ProcessModifyCharacter(ClientConnection client, SubPacket packet)
|
||||||
{
|
{
|
||||||
|
CharacterModifyPacket charaReq = new CharacterModifyPacket(packet.data);
|
||||||
PacketStructs.CharacterRequestPacket charaReq = PacketStructs.toCharacterRequestStruct(packet.data);
|
|
||||||
var slot = charaReq.slot;
|
var slot = charaReq.slot;
|
||||||
var code = charaReq.command;
|
var code = charaReq.command;
|
||||||
var name = charaReq.characterName;
|
var name = charaReq.characterName;
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue