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:
		| @@ -71,17 +71,19 @@ | ||||
|     <Compile Include="dataobjects\World.cs" /> | ||||
|     <Compile Include="PacketProcessor.cs" /> | ||||
|     <Compile Include="packets\BasePacket.cs" /> | ||||
|     <Compile Include="packets\CharaCreatorPacket.cs" /> | ||||
|     <Compile Include="packets\RetainerListPacket.cs" /> | ||||
|     <Compile Include="packets\ErrorPacket.cs" /> | ||||
|     <Compile Include="packets\receive\CharacterModifyPacket.cs" /> | ||||
|     <Compile Include="packets\receive\SelectCharacterPacket.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\PacketStructs.cs" /> | ||||
|     <Compile Include="packets\SelectCharacterConfirmPacket.cs" /> | ||||
|     <Compile Include="packets\send\SelectCharacterConfirmPacket.cs" /> | ||||
|     <Compile Include="packets\SubPacket.cs" /> | ||||
|     <Compile Include="packets\CharacterListPacket.cs" /> | ||||
|     <Compile Include="packets\ImportListPacket.cs" /> | ||||
|     <Compile Include="packets\AccountListPacket.cs" /> | ||||
|     <Compile Include="packets\WorldListPacket.cs" /> | ||||
|     <Compile Include="packets\send\CharacterListPacket.cs" /> | ||||
|     <Compile Include="packets\send\ImportListPacket.cs" /> | ||||
|     <Compile Include="packets\send\AccountListPacket.cs" /> | ||||
|     <Compile Include="packets\send\WorldListPacket.cs" /> | ||||
|     <Compile Include="Program.cs" /> | ||||
|     <Compile Include="Properties\AssemblyInfo.cs" /> | ||||
|     <Compile Include="Server.cs" /> | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| using FFXIVClassic_Lobby_Server.common; | ||||
| using FFXIVClassic_Lobby_Server.dataobjects; | ||||
| using FFXIVClassic_Lobby_Server.packets; | ||||
| using FFXIVClassic_Lobby_Server.packets.receive; | ||||
| using MySql.Data.MySqlClient; | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| @@ -79,7 +80,7 @@ namespace FFXIVClassic_Lobby_Server | ||||
|  | ||||
|         private void ProcessSessionAcknowledgement(ClientConnection client, SubPacket packet) | ||||
|         { | ||||
|             PacketStructs.SessionPacket sessionPacket = PacketStructs.toSessionStruct(packet.data);            | ||||
|             SessionPacket sessionPacket = new SessionPacket(packet.data); | ||||
|             String clientVersion = sessionPacket.version; | ||||
|  | ||||
|             Log.info(String.Format("Got acknowledgment for secure session."));          | ||||
| @@ -127,7 +128,7 @@ namespace FFXIVClassic_Lobby_Server | ||||
|  | ||||
|         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)); | ||||
|  | ||||
| @@ -156,8 +157,7 @@ namespace FFXIVClassic_Lobby_Server | ||||
|  | ||||
|         private void ProcessModifyCharacter(ClientConnection client, SubPacket packet) | ||||
|         { | ||||
|  | ||||
|             PacketStructs.CharacterRequestPacket charaReq = PacketStructs.toCharacterRequestStruct(packet.data); | ||||
|             CharacterModifyPacket charaReq = new CharacterModifyPacket(packet.data); | ||||
|             var slot = charaReq.slot; | ||||
|             var code = charaReq.command; | ||||
|             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; | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user