From e1ae589e93f6f5ea211fbc8c89adb83174769b22 Mon Sep 17 00:00:00 2001 From: SilicaAndPina Date: Mon, 21 Dec 2020 17:06:36 +1300 Subject: [PATCH] allow for graceful quitting --- .../Horse Isle Server/Server/GameClient.cs | 3 +++ .../Horse Isle Server/Server/GameServer.cs | 10 ++++++++++ .../Horse Isle Server/Server/PacketBuilder.cs | 1 + 3 files changed, 14 insertions(+) diff --git a/Horse Isle Server/Horse Isle Server/Server/GameClient.cs b/Horse Isle Server/Horse Isle Server/Server/GameClient.cs index 557c710..b69019c 100644 --- a/Horse Isle Server/Horse Isle Server/Server/GameClient.cs +++ b/Horse Isle Server/Horse Isle Server/Server/GameClient.cs @@ -183,6 +183,9 @@ namespace HISP.Server case PacketBuilder.PACKET_ITEM_INTERACTION: GameServer.OnItemInteraction(this,Packet); break; + case PacketBuilder.PACKET_QUIT: + GameServer.OnQuitPacket(this, Packet); + break; case PacketBuilder.PACKET_NPC: GameServer.OnNpcInteraction(this, Packet); break; diff --git a/Horse Isle Server/Horse Isle Server/Server/GameServer.cs b/Horse Isle Server/Horse Isle Server/Server/GameServer.cs index 163545c..245b334 100644 --- a/Horse Isle Server/Horse Isle Server/Server/GameServer.cs +++ b/Horse Isle Server/Horse Isle Server/Server/GameServer.cs @@ -394,6 +394,16 @@ namespace HISP.Server Update(sender); } + public static void OnQuitPacket(GameClient sender, byte[] packet) + { + if(!sender.LoggedIn) + { + Logger.ErrorPrint(sender.RemoteIp + " Sent quit packet when not logged in."); + return; + } + Logger.InfoPrint(sender.LoggedinUser.Username + " Clicked \"Quit Game\".. Disconnecting"); + sender.Disconnect(); + } public static void OnNpcInteraction(GameClient sender, byte[] packet) { if (!sender.LoggedIn) diff --git a/Horse Isle Server/Horse Isle Server/Server/PacketBuilder.cs b/Horse Isle Server/Horse Isle Server/Server/PacketBuilder.cs index 0aefec6..5452a73 100644 --- a/Horse Isle Server/Horse Isle Server/Server/PacketBuilder.cs +++ b/Horse Isle Server/Horse Isle Server/Server/PacketBuilder.cs @@ -33,6 +33,7 @@ namespace HISP.Server public const byte PACKET_KICK = 0x80; public const byte PACKET_LEAVE = 0x7D; public const byte PACKET_NPC = 0x28; + public const byte PACKET_QUIT = 0x7D; public const byte PACKET_PLAYERINFO = 0x16; public const byte PACKET_INFORMATION = 0x28;