From e71d0b3a098fb8b3a796196a043e6265763c7355 Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Fri, 13 Feb 2015 23:34:34 +1100 Subject: [PATCH] Finished these server tweaks --- common/network/packet_types/text_packet.cpp | 12 +++++++ common/network/packet_types/text_packet.hpp | 5 +++ common/network/serial_packet_type.hpp | 2 ++ common/network/serial_utility.cpp | 4 +++ server/server_application.hpp | 2 ++ server/server_character_methods.cpp | 16 +++++---- server/server_chat.cpp | 34 ++++++++++++++++++ ...erver_data.cpp => server_data_queries.cpp} | 36 ++++++++++++------- server/server_logic.cpp | 6 ++++ server/server_methods.cpp | 4 +-- server/server_monster_methods.cpp | 3 ++ 11 files changed, 103 insertions(+), 21 deletions(-) create mode 100644 server/server_chat.cpp rename server/{server_data.cpp => server_data_queries.cpp} (80%) diff --git a/common/network/packet_types/text_packet.cpp b/common/network/packet_types/text_packet.cpp index 56a9836..2ec8ce2 100644 --- a/common/network/packet_types/text_packet.cpp +++ b/common/network/packet_types/text_packet.cpp @@ -29,6 +29,12 @@ void serializeText(void* buffer, TextPacket* packet) { //content serialCopy(&buffer, packet->name, PACKET_STRING_SIZE); serialCopy(&buffer, packet->text, PACKET_STRING_SIZE); + + //location + serialCopy(&buffer, &packet->roomIndex, sizeof(int)); + serialCopy(&buffer, &packet->origin.x, sizeof(double)); + serialCopy(&buffer, &packet->origin.y, sizeof(double)); + serialCopy(&buffer, &packet->range, sizeof(int)); } void deserializeText(void* buffer, TextPacket* packet) { @@ -37,4 +43,10 @@ void deserializeText(void* buffer, TextPacket* packet) { //content deserialCopy(&buffer, packet->name, PACKET_STRING_SIZE); deserialCopy(&buffer, packet->text, PACKET_STRING_SIZE); + + //location + deserialCopy(&buffer, &packet->roomIndex, sizeof(int)); + deserialCopy(&buffer, &packet->origin.x, sizeof(double)); + deserialCopy(&buffer, &packet->origin.y, sizeof(double)); + deserialCopy(&buffer, &packet->range, sizeof(int)); } \ No newline at end of file diff --git a/common/network/packet_types/text_packet.hpp b/common/network/packet_types/text_packet.hpp index 0e793b6..9b9ae4b 100644 --- a/common/network/packet_types/text_packet.hpp +++ b/common/network/packet_types/text_packet.hpp @@ -24,9 +24,14 @@ #include "serial_packet_base.hpp" +#include "vector2.hpp" + struct TextPacket : SerialPacketBase { char name[PACKET_STRING_SIZE]; char text[PACKET_STRING_SIZE]; + int roomIndex; + Vector2 origin; + int range; }; void serializeText(void* buffer, TextPacket* packet); diff --git a/common/network/serial_packet_type.hpp b/common/network/serial_packet_type.hpp index d8b76e7..cd798ab 100644 --- a/common/network/serial_packet_type.hpp +++ b/common/network/serial_packet_type.hpp @@ -131,6 +131,8 @@ enum class SerialPacketType { //general speech TEXT_BROADCAST, + TEXT_SPEECH, + TEXT_WHISPER, //rejection/error messages JOIN_REJECTION, diff --git a/common/network/serial_utility.cpp b/common/network/serial_utility.cpp index a584ad0..7159b10 100644 --- a/common/network/serial_utility.cpp +++ b/common/network/serial_utility.cpp @@ -92,6 +92,8 @@ void serializePacket(void* buffer, SerialPacketBase* packet) { serializeMonster(buffer, static_cast(packet)); break; case SerialPacketType::TEXT_BROADCAST: + case SerialPacketType::TEXT_SPEECH: + case SerialPacketType::TEXT_WHISPER: case SerialPacketType::JOIN_REJECTION: case SerialPacketType::LOGIN_REJECTION: case SerialPacketType::REGION_REJECTION: @@ -154,6 +156,8 @@ void deserializePacket(void* buffer, SerialPacketBase* packet) { deserializeMonster(buffer, static_cast(packet)); break; case SerialPacketType::TEXT_BROADCAST: + case SerialPacketType::TEXT_SPEECH: + case SerialPacketType::TEXT_WHISPER: case SerialPacketType::JOIN_REJECTION: case SerialPacketType::LOGIN_REJECTION: case SerialPacketType::REGION_REJECTION: diff --git a/server/server_application.hpp b/server/server_application.hpp index 42ea73b..d53ed32 100644 --- a/server/server_application.hpp +++ b/server/server_application.hpp @@ -107,6 +107,8 @@ private: //chat void hTextBroadcast(TextPacket* const); + void hTextSpeech(TextPacket* const); + void hTextWhisper(TextPacket* const); //utility methods void PumpPacket(SerialPacket* const); diff --git a/server/server_character_methods.cpp b/server/server_character_methods.cpp index 6a4d8b1..5c76f83 100644 --- a/server/server_character_methods.cpp +++ b/server/server_character_methods.cpp @@ -28,7 +28,7 @@ //Character Management //------------------------- -void ServerApplication::HandleCharacterCreate(CharacterPacket* const argPacket) { +void ServerApplication::hCharacterCreate(CharacterPacket* const argPacket) { int characterIndex = characterMgr.Create(argPacket->accountIndex, argPacket->handle, argPacket->avatar); if (characterIndex < 0) { @@ -55,7 +55,7 @@ void ServerApplication::HandleCharacterCreate(CharacterPacket* const argPacket) PumpPacket(&newPacket); } -void ServerApplication::HandleCharacterDelete(CharacterPacket* const argPacket) { +void ServerApplication::hCharacterDelete(CharacterPacket* const argPacket) { //get the user's data AccountData* accountData = accountMgr.Get(argPacket->accountIndex); if (!accountData) { @@ -102,7 +102,7 @@ void ServerApplication::HandleCharacterDelete(CharacterPacket* const argPacket) PumpPacket(static_cast(&newPacket)); } -void ServerApplication::HandleCharacterLoad(CharacterPacket* const argPacket) { +void ServerApplication::hCharacterLoad(CharacterPacket* const argPacket) { int characterIndex = characterMgr.Load(argPacket->accountIndex, argPacket->handle, argPacket->avatar); if (characterIndex < 0) { @@ -135,7 +135,7 @@ void ServerApplication::HandleCharacterLoad(CharacterPacket* const argPacket) { PumpPacket(&newPacket); } -void ServerApplication::HandleCharacterUnload(CharacterPacket* const argPacket) { +void ServerApplication::hCharacterUnload(CharacterPacket* const argPacket) { //get the entries CharacterData* characterData = characterMgr.Get(argPacket->characterIndex); if (!characterData) { @@ -177,7 +177,7 @@ void ServerApplication::HandleCharacterUnload(CharacterPacket* const argPacket) //TODO: (9) Could replace this verbosity with a "verify" method, taking a client, account and character ptr as arguments -void ServerApplication::HandleCharacterMovement(CharacterPacket* const argPacket) { +void ServerApplication::hCharacterMovement(CharacterPacket* const argPacket) { //get the specified objects AccountData* accountData = accountMgr.Get(argPacket->accountIndex); CharacterData* characterData = characterMgr.Get(argPacket->characterIndex); @@ -234,6 +234,10 @@ void ServerApplication::HandleCharacterMovement(CharacterPacket* const argPacket } } -void ServerApplication::HandleCharacterAttack(CharacterPacket* const) { +void ServerApplication::hCharacterAttack(CharacterPacket* const argPacket) { //TODO: (9) bounce graphical attack data +} + +void ServerApplication::hCharacterDamage(CharacterPacket* const argPacket) { + //TODO: (9) empty } \ No newline at end of file diff --git a/server/server_chat.cpp b/server/server_chat.cpp new file mode 100644 index 0000000..ed9c4e4 --- /dev/null +++ b/server/server_chat.cpp @@ -0,0 +1,34 @@ +/* Copyright: (c) Kayne Ruse 2013-2015 + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. +*/ +#include "server_application.hpp" + +void ServerApplication::hTextBroadcast(TextPacket* const argPacket) { + //TODO: (9) empty +} + +void ServerApplication::hTextSpeech(TextPacket* const argPacket) { + //TODO: (9) empty +} + +void ServerApplication::hTextWhisper(TextPacket* const argPacket) { + //TODO: (9) empty +} diff --git a/server/server_data.cpp b/server/server_data_queries.cpp similarity index 80% rename from server/server_data.cpp rename to server/server_data_queries.cpp index 2554ba3..1019223 100644 --- a/server/server_data.cpp +++ b/server/server_data_queries.cpp @@ -25,20 +25,10 @@ #include //------------------------- -//General data management +//Queries //------------------------- -//NOTE: Queries go here - -void ServerApplication::SaveServerState() { - //SaveServerState -} - -//------------------------- -//Map management -//------------------------- - -void ServerApplication::HandleRegionRequest(RegionPacket* const argPacket) { +void ServerApplication::hRegionRequest(RegionPacket* const argPacket) { //get the region object, send a rejection on error RoomData* room = roomMgr.Get(argPacket->roomIndex); if (!room) { @@ -71,7 +61,7 @@ void ServerApplication::HandleRegionRequest(RegionPacket* const argPacket) { network.SendTo(argPacket->srcAddress, static_cast(&newPacket)); } -void ServerApplication::HandleCharacterExists(CharacterPacket* const argPacket) { +void ServerApplication::hQueryCharacterExists(CharacterPacket* const argPacket) { //respond with all character data CharacterPacket newPacket; @@ -84,3 +74,23 @@ void ServerApplication::HandleCharacterExists(CharacterPacket* const argPacket) network.SendTo(argPacket->srcAddress, static_cast(&newPacket)); } } + +void ServerApplication::hQueryCharacterStats(CharacterPacket* const argPacket) { + //TODO: (9) empty +} + +void ServerApplication::hQueryCharacterLocation(CharacterPacket* const argPacket) { + //TODO: (9) empty +} + +void ServerApplication::hQueryMonsterExists(MonsterPacket* const argPacket) { + //TODO: (9) empty +} + +void ServerApplication::hQueryMonsterStats(MonsterPacket* const argPacket) { + //TODO: (9) empty +} + +void ServerApplication::hQueryMonsterLocation(MonsterPacket* const argPacket) { + //TODO: (9) empty +} diff --git a/server/server_logic.cpp b/server/server_logic.cpp index c2e7b28..83ee0b6 100644 --- a/server/server_logic.cpp +++ b/server/server_logic.cpp @@ -311,6 +311,12 @@ void ServerApplication::HandlePacket(SerialPacket* const argPacket) { case SerialPacketType::TEXT_BROADCAST: hTextBroadcast(static_cast(argPacket)); break; + case SerialPacketType::TEXT_SPEECH: + hTextSpeech(static_cast(argPacket)); + break; + case SerialPacketType::TEXT_WHISPER: + hTextWhisper(static_cast(argPacket)); + break; //handle errors default: { diff --git a/server/server_methods.cpp b/server/server_methods.cpp index 4c490b6..0b55219 100644 --- a/server/server_methods.cpp +++ b/server/server_methods.cpp @@ -33,7 +33,7 @@ void ServerApplication::hAdminDisconnectForced(ClientPacket* const argPacket) { //TODO: (9) boot players } -void ServerApplication::HandleShutdownRequest(ClientPacket* const argPacket) { +void ServerApplication::hAdminShutdownRequest(ClientPacket* const argPacket) { //get the account and client data AccountData* accountData = accountMgr.Get(argPacket->accountIndex); if (!accountData) { @@ -76,7 +76,7 @@ void ServerApplication::HandleShutdownRequest(ClientPacket* const argPacket) { //disconnect all clients TextPacket newPacket; - newPacket.type = SerialPacketType::DISCONNECT_FORCED; + newPacket.type = SerialPacketType::ADMIN_DISCONNECT_FORCED; strncpy(newPacket.text, "Server shutdown", PACKET_STRING_SIZE); PumpPacket(&newPacket); diff --git a/server/server_monster_methods.cpp b/server/server_monster_methods.cpp index 3079d7a..ae8ba43 100644 --- a/server/server_monster_methods.cpp +++ b/server/server_monster_methods.cpp @@ -21,3 +21,6 @@ */ #include "server_application.hpp" +void ServerApplication::hMonsterDamage(MonsterPacket* const argPacket) { + //TODO: (9) empty +} \ No newline at end of file