From f566c14ea0a195de78e1cce4004b89b19a58d737 Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Tue, 8 Sep 2015 00:42:02 -0400 Subject: [PATCH] Fixed "getServer" bug in DB class. Cleaned up chara creator function. Fixed bug in error packet. --- FFXIVClassic_Lobby_Server/Database.cs | 27 ++++--- .../FFXIVClassic_Lobby_Server.csproj | 3 +- FFXIVClassic_Lobby_Server/PacketProcessor.cs | 79 +++++++++---------- .../packets/ErrorPacket.cs | 2 +- 4 files changed, 59 insertions(+), 52 deletions(-) diff --git a/FFXIVClassic_Lobby_Server/Database.cs b/FFXIVClassic_Lobby_Server/Database.cs index 11c62ae6..7a3eaec2 100644 --- a/FFXIVClassic_Lobby_Server/Database.cs +++ b/FFXIVClassic_Lobby_Server/Database.cs @@ -41,7 +41,7 @@ namespace FFXIVClassic_Lobby_Server return id; } - public static bool reserveCharacter(uint userId, uint slot, uint serverId, String name) + public static bool reserveCharacter(uint userId, uint slot, uint serverId, String name, out uint pid, out uint cid) { bool alreadyExists = false; using (MySqlConnection conn = new MySqlConnection(String.Format("Server={0}; Port={1}; Database={2}; UID={3}; Password={4}", ConfigConstants.DATABASE_HOST, ConfigConstants.DATABASE_PORT, ConfigConstants.DATABASE_NAME, ConfigConstants.DATABASE_USERNAME, ConfigConstants.DATABASE_PASSWORD))) @@ -57,7 +57,9 @@ namespace FFXIVClassic_Lobby_Server using (MySqlDataReader Reader = cmd.ExecuteReader()) { if (Reader.HasRows) - alreadyExists = true; + { + alreadyExists = true; + } } //Reserve @@ -72,12 +74,20 @@ namespace FFXIVClassic_Lobby_Server cmd2.Parameters.AddWithValue("@serverId", serverId); cmd2.Parameters.AddWithValue("@name", name); cmd2.ExecuteNonQuery(); - } + pid = 1; + cid = 1; + } + else + { + pid = 0; + cid = 0; + } } catch (MySqlException e) { - + pid = 0; + cid = 0; } finally { @@ -181,7 +191,7 @@ namespace FFXIVClassic_Lobby_Server conn.Open(); MySqlCommand cmd = new MySqlCommand(); cmd.Connection = conn; - cmd.CommandText = "SELECT * FROM ffxiv_servers WHERE isActive=true"; + cmd.CommandText = "SELECT * FROM servers WHERE isActive=true"; cmd.Prepare(); MySqlDataReader Reader = cmd.ExecuteReader(); @@ -236,7 +246,7 @@ namespace FFXIVClassic_Lobby_Server conn.Open(); MySqlCommand cmd = new MySqlCommand(); cmd.Connection = conn; - cmd.CommandText = "SELECT * FROM ffxiv_servers WHERE id=%serverId"; + cmd.CommandText = "SELECT * FROM servers WHERE id='%serverId'"; cmd.Prepare(); cmd.Parameters.AddWithValue("@serverId", serverId); @@ -270,12 +280,11 @@ namespace FFXIVClassic_Lobby_Server } catch (MySqlException e) - { - + { } finally { - conn.Close(); + conn.Dispose(); } return world; diff --git a/FFXIVClassic_Lobby_Server/FFXIVClassic_Lobby_Server.csproj b/FFXIVClassic_Lobby_Server/FFXIVClassic_Lobby_Server.csproj index 3dd9aa16..009dbfd7 100644 --- a/FFXIVClassic_Lobby_Server/FFXIVClassic_Lobby_Server.csproj +++ b/FFXIVClassic_Lobby_Server/FFXIVClassic_Lobby_Server.csproj @@ -63,8 +63,7 @@ - - + diff --git a/FFXIVClassic_Lobby_Server/PacketProcessor.cs b/FFXIVClassic_Lobby_Server/PacketProcessor.cs index 25e54f6e..373e86f1 100644 --- a/FFXIVClassic_Lobby_Server/PacketProcessor.cs +++ b/FFXIVClassic_Lobby_Server/PacketProcessor.cs @@ -198,75 +198,74 @@ namespace FFXIVClassic_Lobby_Server var name = charaReq.characterName; var worldId = charaReq.worldId; + uint pid = 0, cid = 0; + + World world = Database.getServer(worldId); + string worldName = null; + + if (world != null) + worldName = world.name; + + if (worldName == null) + { + ErrorPacket errorPacket = new ErrorPacket(charaReq.sequence, 0, 0, 13001, "World does not exist or is inactive."); + SubPacket subpacket = errorPacket.buildPacket(); + BasePacket basePacket = BasePacket.createPacket(subpacket, true, false); + BasePacket.encryptPacket(client.blowfish, basePacket); + client.queuePacket(basePacket); + + Console.WriteLine("User {0} => Error; invalid server id: \"{1}\"", client.currentUserId, worldId); + return; + } + switch (code) { case 0x01://Reserve - var alreadyTaken = Database.reserveCharacter(client.currentUserId, slot, worldId, name); + + var alreadyTaken = Database.reserveCharacter(client.currentUserId, slot, worldId, name, out pid, out cid); if (alreadyTaken) { - ErrorPacket errorPacket = new ErrorPacket(charaReq.sequence, 13005, 0, 0, ""); + ErrorPacket errorPacket = new ErrorPacket(charaReq.sequence, 0, 0, 13005, ""); SubPacket subpacket = errorPacket.buildPacket(); BasePacket basePacket = BasePacket.createPacket(subpacket, true, false); - basePacket.debugPrintPacket(); BasePacket.encryptPacket(client.blowfish, basePacket); client.queuePacket(basePacket); Console.WriteLine("User {0} => Error; name taken: \"{1}\"", client.currentUserId, charaReq.characterName); return; - } + } - //Confirm Reserve - CharaCreatorPacket confirmReserve = new CharaCreatorPacket(charaReq.sequence, CharaCreatorPacket.RESERVE, 1, 1, 1, name, "World Name"); - BasePacket confirmReservePacket = BasePacket.createPacket(confirmReserve.buildPacket(), true, false); - BasePacket.encryptPacket(client.blowfish, confirmReservePacket); - client.queuePacket(confirmReservePacket); - - Console.WriteLine("User {0} => Reserving character \"{1}\"", client.currentUserId, charaReq.characterName); + Console.WriteLine("User {0} => Character reserved \"{1}\"", client.currentUserId, charaReq.characterName); break; case 0x02://Make Character character = Character.EncodedToCharacter(charaReq.characterInfoEncoded); Database.makeCharacter(client.currentUserId, name, character); - //Confirm - CharaCreatorPacket makeChara = new CharaCreatorPacket(charaReq.sequence, CharaCreatorPacket.MAKE, 1, 1, 1, name, "World Name"); - BasePacket confirmMakePacket = BasePacket.createPacket(makeChara.buildPacket(), true, false); - BasePacket.encryptPacket(client.blowfish, confirmMakePacket); - client.queuePacket(confirmMakePacket); - - Console.WriteLine("User {0} => Character created!", client.currentUserId); + Console.WriteLine("User {0} => Character created \"{1}\"", client.currentUserId, charaReq.characterName); break; case 0x03://Rename - - //Confirm - CharaCreatorPacket renameChara = new CharaCreatorPacket(charaReq.sequence, CharaCreatorPacket.RENAME, 1, 1, 1, name, "World Name"); - BasePacket confirmRenamePacket = BasePacket.createPacket(renameChara.buildPacket(), true, false); - BasePacket.encryptPacket(client.blowfish, confirmRenamePacket); - client.queuePacket(confirmRenamePacket); - - Console.WriteLine("User {0} => Character renamed to \"{1}\"", client.currentUserId, charaReq.characterName); + + Console.WriteLine("User {0} => Character renamed \"{1}\"", client.currentUserId, charaReq.characterName); break; case 0x04://Delete Database.deleteCharacter(charaReq.characterId, charaReq.characterName); - - //Confirm - CharaCreatorPacket deleteChara = new CharaCreatorPacket(charaReq.sequence, CharaCreatorPacket.MAKE, 1, 1, 1, name, "World Name"); - BasePacket confirmDeletePacket = BasePacket.createPacket(deleteChara.buildPacket(), true, false); - BasePacket.encryptPacket(client.blowfish, confirmDeletePacket); - client.queuePacket(confirmDeletePacket); - + Console.WriteLine("User {0} => Character deleted \"{1}\"", client.currentUserId, charaReq.characterName); break; case 0x06://Rename Retainer - //Confirm - CharaCreatorPacket renameRetainerChara = new CharaCreatorPacket(charaReq.sequence, CharaCreatorPacket.RENAME_RETAINER, 1, 1, 1, name, "World Name"); - BasePacket confirmRenameRetainerPacket = BasePacket.createPacket(renameRetainerChara.buildPacket(), true, false); - BasePacket.encryptPacket(client.blowfish, confirmRenameRetainerPacket); - client.queuePacket(confirmRenameRetainerPacket); + Console.WriteLine("User {0} => Retainer renamed \"{1}\"", client.currentUserId, charaReq.characterName); break; - } + } + + CharaCreatorPacket charaCreator = new CharaCreatorPacket(charaReq.sequence, code, pid, cid, 1, name, worldName); + BasePacket charaCreatorPacket = BasePacket.createPacket(charaCreator.buildPacket(), true, false); + charaCreatorPacket.debugPrintPacket(); + BasePacket.encryptPacket(client.blowfish, charaCreatorPacket); + client.queuePacket(charaCreatorPacket); + } private void sendWorldList(ClientConnection client, SubPacket packet) @@ -281,7 +280,7 @@ namespace FFXIVClassic_Lobby_Server } - private void sendUnknownList(ClientConnection client, SubPacket packet) + private void sendImportList(ClientConnection client, SubPacket packet) { } diff --git a/FFXIVClassic_Lobby_Server/packets/ErrorPacket.cs b/FFXIVClassic_Lobby_Server/packets/ErrorPacket.cs index 949b483f..2b9b2e53 100644 --- a/FFXIVClassic_Lobby_Server/packets/ErrorPacket.cs +++ b/FFXIVClassic_Lobby_Server/packets/ErrorPacket.cs @@ -35,7 +35,7 @@ namespace FFXIVClassic_Lobby_Server.packets binWriter.Write(errorCode); binWriter.Write(statusCode); binWriter.Write(textId); - binWriter.Write(message); + binWriter.Write(Encoding.ASCII.GetBytes(message)); byte[] data = memStream.GetBuffer(); binWriter.Dispose();