diff options
Diffstat (limited to 'src/net')
113 files changed, 1311 insertions, 737 deletions
diff --git a/src/net/ea/adminhandler.cpp b/src/net/ea/adminhandler.cpp index e1099a4d..62fe9ea8 100644 --- a/src/net/ea/adminhandler.cpp +++ b/src/net/ea/adminhandler.cpp @@ -21,11 +21,10 @@ #include "net/ea/adminhandler.h" -#include "net/ea/chathandler.h" -#include "net/ea/protocol.h" +#include "net/chathandler.h" +#include "net/net.h" -#include "net/messagein.h" -#include "net/messageout.h" +#include "net/ea/protocol.h" #include "being.h" #include "beingmanager.h" @@ -55,7 +54,7 @@ AdminHandler::AdminHandler() adminHandler = this; } -void AdminHandler::handleMessage(MessageIn &msg) +void AdminHandler::handleMessage(Net::MessageIn &msg) { int id; switch (msg.getId()) @@ -118,7 +117,7 @@ void AdminHandler::unban(int playerId) void AdminHandler::unban(const std::string &name) { - chatHandler->talk("@unban " + name); + Net::getChatHandler()->talk("@unban " + name); } void AdminHandler::mute(int playerId, int type, int limit) diff --git a/src/net/ea/adminhandler.h b/src/net/ea/adminhandler.h index 6ef4f76a..83d732cc 100644 --- a/src/net/ea/adminhandler.h +++ b/src/net/ea/adminhandler.h @@ -23,9 +23,10 @@ #define NET_EA_ADMINHANDLER_H #include "net/adminhandler.h" -#include "net/messagehandler.h" #include "net/net.h" +#include "net/ea/messagehandler.h" + namespace EAthena { class AdminHandler : public MessageHandler, public Net::AdminHandler @@ -33,7 +34,7 @@ class AdminHandler : public MessageHandler, public Net::AdminHandler public: AdminHandler(); - void handleMessage(MessageIn &msg); + void handleMessage(Net::MessageIn &msg); void announce(const std::string &text); diff --git a/src/net/ea/beinghandler.cpp b/src/net/ea/beinghandler.cpp index 2cc93f6e..8a958845 100644 --- a/src/net/ea/beinghandler.cpp +++ b/src/net/ea/beinghandler.cpp @@ -23,9 +23,6 @@ #include "net/ea/protocol.h" -#include "net/messagein.h" -#include "net/messageout.h" - #include "being.h" #include "beingmanager.h" #include "effectmanager.h" @@ -97,7 +94,7 @@ Being *createBeing(int id, short job) return being; } -void BeingHandler::handleMessage(MessageIn &msg) +void BeingHandler::handleMessage(Net::MessageIn &msg) { int id; short job, speed, gender; diff --git a/src/net/ea/beinghandler.h b/src/net/ea/beinghandler.h index 97001579..d1cafc93 100644 --- a/src/net/ea/beinghandler.h +++ b/src/net/ea/beinghandler.h @@ -22,7 +22,7 @@ #ifndef NET_EA_BEINGHANDLER_H #define NET_EA_BEINGHANDLER_H -#include "net/messagehandler.h" +#include "net/ea/messagehandler.h" namespace EAthena { @@ -31,7 +31,7 @@ class BeingHandler : public MessageHandler public: BeingHandler(bool enableSync); - virtual void handleMessage(MessageIn &msg); + virtual void handleMessage(Net::MessageIn &msg); private: // Should we honor server "Stop Walking" packets diff --git a/src/net/ea/buysellhandler.cpp b/src/net/ea/buysellhandler.cpp index 48e856e4..8dba566d 100644 --- a/src/net/ea/buysellhandler.cpp +++ b/src/net/ea/buysellhandler.cpp @@ -54,7 +54,7 @@ BuySellHandler::BuySellHandler() handledMessages = _messages; } -void BuySellHandler::handleMessage(MessageIn &msg) +void BuySellHandler::handleMessage(Net::MessageIn &msg) { int n_items; switch (msg.getId()) diff --git a/src/net/ea/buysellhandler.h b/src/net/ea/buysellhandler.h index cddace55..8277c5c9 100644 --- a/src/net/ea/buysellhandler.h +++ b/src/net/ea/buysellhandler.h @@ -22,7 +22,7 @@ #ifndef NET_EA_BUYSELLHANDLER_H #define NET_EA_BUYSELLHANDLER_H -#include "net/messagehandler.h" +#include "net/ea/messagehandler.h" namespace EAthena { @@ -31,7 +31,7 @@ class BuySellHandler : public MessageHandler public: BuySellHandler(); - virtual void handleMessage(MessageIn &msg); + virtual void handleMessage(Net::MessageIn &msg); }; } // namespace EAthena diff --git a/src/net/ea/charserverhandler.cpp b/src/net/ea/charserverhandler.cpp index f4b82aee..47eddc12 100644 --- a/src/net/ea/charserverhandler.cpp +++ b/src/net/ea/charserverhandler.cpp @@ -67,7 +67,7 @@ CharServerHandler::CharServerHandler(): charHandler = this; } -void CharServerHandler::handleMessage(MessageIn &msg) +void CharServerHandler::handleMessage(Net::MessageIn &msg) { int count, slot; LocalPlayer *tempPlayer; @@ -176,7 +176,7 @@ void CharServerHandler::handleMessage(MessageIn &msg) } } -LocalPlayer *CharServerHandler::readPlayerData(MessageIn &msg, int &slot) +LocalPlayer *CharServerHandler::readPlayerData(Net::MessageIn &msg, int &slot) { const Token &token = static_cast<LoginHandler*>(Net::getLoginHandler())->getToken(); diff --git a/src/net/ea/charserverhandler.h b/src/net/ea/charserverhandler.h index 393ec15c..b1e2b797 100644 --- a/src/net/ea/charserverhandler.h +++ b/src/net/ea/charserverhandler.h @@ -22,10 +22,10 @@ #ifndef NET_EA_CHARSERVERHANDLER_H #define NET_EA_CHARSERVERHANDLER_H -#include "net/messagehandler.h" #include "net/charhandler.h" #include "net/serverinfo.h" +#include "net/ea/messagehandler.h" #include "net/ea/token.h" class LoginData; @@ -40,7 +40,7 @@ class CharServerHandler : public MessageHandler, public Net::CharHandler public: CharServerHandler(); - virtual void handleMessage(MessageIn &msg); + virtual void handleMessage(Net::MessageIn &msg); void setCharInfo(LockedArray<LocalPlayer*> *charInfo) { mCharInfo = charInfo; } @@ -72,7 +72,7 @@ class CharServerHandler : public MessageHandler, public Net::CharHandler CharSelectDialog *mCharSelectDialog; CharCreateDialog *mCharCreateDialog; - LocalPlayer *readPlayerData(MessageIn &msg, int &slot); + LocalPlayer *readPlayerData(Net::MessageIn &msg, int &slot); }; } // namespace EAthena diff --git a/src/net/ea/chathandler.cpp b/src/net/ea/chathandler.cpp index 65f1db3c..913cfacf 100644 --- a/src/net/ea/chathandler.cpp +++ b/src/net/ea/chathandler.cpp @@ -58,7 +58,7 @@ ChatHandler::ChatHandler() chatHandler = this; } -void ChatHandler::handleMessage(MessageIn &msg) +void ChatHandler::handleMessage(Net::MessageIn &msg) { Being *being; std::string chatMsg; diff --git a/src/net/ea/chathandler.h b/src/net/ea/chathandler.h index f77b7b80..3396a88b 100644 --- a/src/net/ea/chathandler.h +++ b/src/net/ea/chathandler.h @@ -23,9 +23,10 @@ #define NET_EA_CHATHANDLER_H #include "net/chathandler.h" -#include "net/messagehandler.h" #include "net/net.h" +#include "net/ea/messagehandler.h" + namespace EAthena { class ChatHandler : public MessageHandler, public Net::ChatHandler @@ -33,7 +34,7 @@ class ChatHandler : public MessageHandler, public Net::ChatHandler public: ChatHandler(); - void handleMessage(MessageIn &msg); + void handleMessage(Net::MessageIn &msg); void talk(const std::string &text); diff --git a/src/net/ea/equipmenthandler.cpp b/src/net/ea/equipmenthandler.cpp index 3520bca5..28a2940c 100644 --- a/src/net/ea/equipmenthandler.cpp +++ b/src/net/ea/equipmenthandler.cpp @@ -155,7 +155,7 @@ EquipmentHandler::EquipmentHandler() memset(equips, 0, sizeof(equips)); } -void EquipmentHandler::handleMessage(MessageIn &msg) +void EquipmentHandler::handleMessage(Net::MessageIn &msg) { int itemCount; int index, equipPoint, itemId; diff --git a/src/net/ea/equipmenthandler.h b/src/net/ea/equipmenthandler.h index 47c2f803..32ea83c4 100644 --- a/src/net/ea/equipmenthandler.h +++ b/src/net/ea/equipmenthandler.h @@ -22,7 +22,7 @@ #ifndef NET_EA_EQUIPMENTHANDLER_H #define NET_EA_EQUIPMENTHANDLER_H -#include "net/messagehandler.h" +#include "net/ea/messagehandler.h" class Item; @@ -37,7 +37,7 @@ class EquipmentHandler : public MessageHandler public: EquipmentHandler(); - virtual void handleMessage(MessageIn &msg); + virtual void handleMessage(Net::MessageIn &msg); }; } // namespace EAthena diff --git a/src/net/ea/gamehandler.cpp b/src/net/ea/gamehandler.cpp index 97862883..5becfe1b 100644 --- a/src/net/ea/gamehandler.cpp +++ b/src/net/ea/gamehandler.cpp @@ -61,7 +61,7 @@ GameHandler::GameHandler() gameHandler = this; } -void GameHandler::handleMessage(MessageIn &msg) +void GameHandler::handleMessage(Net::MessageIn &msg) { switch (msg.getId()) { diff --git a/src/net/ea/gamehandler.h b/src/net/ea/gamehandler.h index d8adeeaf..0095ada3 100644 --- a/src/net/ea/gamehandler.h +++ b/src/net/ea/gamehandler.h @@ -23,10 +23,10 @@ #define NET_EA_MAPHANDLER_H #include "net/gamehandler.h" -#include "net/messagehandler.h" #include "net/net.h" #include "net/serverinfo.h" +#include "net/ea/messagehandler.h" #include "net/ea/token.h" namespace EAthena { @@ -36,7 +36,7 @@ class GameHandler : public MessageHandler, public Net::GameHandler public: GameHandler(); - void handleMessage(MessageIn &msg); + void handleMessage(Net::MessageIn &msg); void connect(); diff --git a/src/net/ea/generalhandler.cpp b/src/net/ea/generalhandler.cpp index 62a7c1aa..4ef2f9e2 100644 --- a/src/net/ea/generalhandler.cpp +++ b/src/net/ea/generalhandler.cpp @@ -110,7 +110,7 @@ GeneralHandler::~GeneralHandler() delete mNetwork; } -void GeneralHandler::handleMessage(MessageIn &msg) +void GeneralHandler::handleMessage(Net::MessageIn &msg) { int code; diff --git a/src/net/ea/generalhandler.h b/src/net/ea/generalhandler.h index b8ea8049..8bbf4f61 100644 --- a/src/net/ea/generalhandler.h +++ b/src/net/ea/generalhandler.h @@ -23,10 +23,11 @@ #define NET_EA_GENERALHANDLER_H #include "net/generalhandler.h" -#include "net/messagehandler.h" #include "net/net.h" #include "net/serverinfo.h" +#include "net/ea/messagehandler.h" + namespace EAthena { class GeneralHandler : public MessageHandler, public Net::GeneralHandler @@ -36,7 +37,7 @@ class GeneralHandler : public MessageHandler, public Net::GeneralHandler ~GeneralHandler(); - void handleMessage(MessageIn &msg); + void handleMessage(Net::MessageIn &msg); void load(); diff --git a/src/net/ea/inventoryhandler.cpp b/src/net/ea/inventoryhandler.cpp index 55714a70..8f2b4453 100644 --- a/src/net/ea/inventoryhandler.cpp +++ b/src/net/ea/inventoryhandler.cpp @@ -72,7 +72,7 @@ InventoryHandler::InventoryHandler() inventoryHandler = this; } -void InventoryHandler::handleMessage(MessageIn &msg) +void InventoryHandler::handleMessage(Net::MessageIn &msg) { int number; int index, amount, itemId, equipType, arrow; @@ -374,4 +374,14 @@ void InventoryHandler::moveItem(StorageType source, int slot, int amount, } } +size_t InventoryHandler::getInventorySize() const +{ + return 100; +} + +size_t InventoryHandler::getStorageSize() const +{ + return 300; +} + } // namespace EAthena diff --git a/src/net/ea/inventoryhandler.h b/src/net/ea/inventoryhandler.h index 30408dad..e61ee14b 100644 --- a/src/net/ea/inventoryhandler.h +++ b/src/net/ea/inventoryhandler.h @@ -23,9 +23,10 @@ #define NET_EA_INVENTORYHANDLER_H #include "net/inventoryhandler.h" -#include "net/messagehandler.h" #include "net/net.h" +#include "net/ea/messagehandler.h" + namespace EAthena { class InventoryHandler : public MessageHandler, public Net::InventoryHandler @@ -33,7 +34,7 @@ class InventoryHandler : public MessageHandler, public Net::InventoryHandler public: InventoryHandler(); - void handleMessage(MessageIn &msg); + void handleMessage(Net::MessageIn &msg); void equipItem(const Item *item); @@ -55,6 +56,10 @@ class InventoryHandler : public MessageHandler, public Net::InventoryHandler void moveItem(StorageType source, int slot, int amount, StorageType destination); + + size_t getInventorySize() const; + + size_t getStorageSize() const; }; } // namespace EAthena diff --git a/src/net/ea/itemhandler.cpp b/src/net/ea/itemhandler.cpp index 95d480f9..f926f8e8 100644 --- a/src/net/ea/itemhandler.cpp +++ b/src/net/ea/itemhandler.cpp @@ -41,7 +41,7 @@ ItemHandler::ItemHandler() handledMessages = _messages; } -void ItemHandler::handleMessage(MessageIn &msg) +void ItemHandler::handleMessage(Net::MessageIn &msg) { Uint32 id; Uint16 x, y; diff --git a/src/net/ea/itemhandler.h b/src/net/ea/itemhandler.h index f72e4779..53362190 100644 --- a/src/net/ea/itemhandler.h +++ b/src/net/ea/itemhandler.h @@ -22,7 +22,7 @@ #ifndef NET_EA_ITEMHANDLER_H #define NET_EA_ITEMHANDLER_H -#include "net/messagehandler.h" +#include "net/ea/messagehandler.h" namespace EAthena { @@ -31,7 +31,7 @@ class ItemHandler : public MessageHandler public: ItemHandler(); - virtual void handleMessage(MessageIn &msg); + virtual void handleMessage(Net::MessageIn &msg); }; } // namespace EAthena diff --git a/src/net/ea/loginhandler.cpp b/src/net/ea/loginhandler.cpp index c48e596e..a57eee8a 100644 --- a/src/net/ea/loginhandler.cpp +++ b/src/net/ea/loginhandler.cpp @@ -55,7 +55,7 @@ LoginHandler::LoginHandler() loginHandler = this; } -void LoginHandler::handleMessage(MessageIn &msg) +void LoginHandler::handleMessage(Net::MessageIn &msg) { int code, worldCount; diff --git a/src/net/ea/loginhandler.h b/src/net/ea/loginhandler.h index 0d0ef1eb..ac3bf4f4 100644 --- a/src/net/ea/loginhandler.h +++ b/src/net/ea/loginhandler.h @@ -23,8 +23,8 @@ #define NET_EA_LOGINHANDLER_H #include "net/loginhandler.h" -#include "net/messagehandler.h" +#include "net/ea/messagehandler.h" #include "net/ea/token.h" #include <string> @@ -38,7 +38,7 @@ class LoginHandler : public MessageHandler, public Net::LoginHandler public: LoginHandler(); - void handleMessage(MessageIn &msg); + void handleMessage(Net::MessageIn &msg); void connect(); diff --git a/src/net/messagehandler.cpp b/src/net/ea/messagehandler.cpp index ace223c4..fde65d55 100644 --- a/src/net/messagehandler.cpp +++ b/src/net/ea/messagehandler.cpp @@ -19,37 +19,29 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "net/messagehandler.h" +#include "net/ea/messagehandler.h" -#ifdef MANASERV_SUPPORT -#include "net/manaserv/network.h" -#else #include "net/ea/network.h" -#endif #include <cassert> +namespace EAthena { + MessageHandler::MessageHandler() -#ifdef EATHENA_SUPPORT - : mNetwork(0) -#endif + : mNetwork(NULL) { } MessageHandler::~MessageHandler() { -#ifdef MANASERV_SUPPORT - Net::unregisterHandler(this); -#else if (mNetwork) mNetwork->unregisterHandler(this); -#endif } -#ifdef EATHENA_SUPPORT void MessageHandler::setNetwork(Network *network) { assert(!(network && mNetwork)); mNetwork = network; } -#endif + +} diff --git a/src/net/ea/messagehandler.h b/src/net/ea/messagehandler.h new file mode 100644 index 00000000..3f006671 --- /dev/null +++ b/src/net/ea/messagehandler.h @@ -0,0 +1,58 @@ +/* + * The Mana World + * Copyright (C) 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef NET_EA_MESSAGEHANDLER_H +#define NET_EA_MESSAGEHANDLER_H + +#include "net/messagehandler.h" +#include "net/messagein.h" + +#include "net/ea/messageout.h" + +#include <SDL_types.h> + +#include <memory> + +namespace EAthena { + +class Network; + +/** + * \ingroup Network + */ +class MessageHandler : public Net::MessageHandler +{ + public: + MessageHandler(); + + ~MessageHandler(); + + void setNetwork(Network *network); + + protected: + Network *mNetwork; +}; + +typedef const std::auto_ptr<MessageHandler> MessageHandlerPtr; + +} + +#endif // NET_EA_MESSAGEHANDLER_H diff --git a/src/net/ea/messagein.cpp b/src/net/ea/messagein.cpp new file mode 100644 index 00000000..0b1ab70a --- /dev/null +++ b/src/net/ea/messagein.cpp @@ -0,0 +1,70 @@ +/* + * The Mana World + * Copyright (C) 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "net/ea/messagein.h" + +#include <SDL.h> +#include <SDL_endian.h> + +#define MAKEWORD(low,high) \ + ((unsigned short)(((unsigned char)(low)) | \ + ((unsigned short)((unsigned char)(high))) << 8)) + +namespace EAthena { + +MessageIn::MessageIn(const char *data, unsigned int length): + Net::MessageIn(data, length) +{ + // Read the message ID + mId = readInt16(); +} + +int MessageIn::readInt16() +{ + int value = -1; + if (mPos + 2 <= mLength) + { +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + value = SDL_Swap16(*(Sint16*)(mData + mPos)); +#else + value = (*(Sint16*)(mData + mPos)); +#endif + } + mPos += 2; + return value; +} + +int MessageIn::readInt32() +{ + int value = -1; + if (mPos + 4 <= mLength) + { +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + value = SDL_Swap32(*(Sint32*)(mData + mPos)); +#else + value = (*(Sint32*)(mData + mPos)); +#endif + } + mPos += 4; + return value; +} + +} diff --git a/src/net/ea/messagein.h b/src/net/ea/messagein.h new file mode 100644 index 00000000..89a9839f --- /dev/null +++ b/src/net/ea/messagein.h @@ -0,0 +1,51 @@ +/* + * The Mana World + * Copyright (C) 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef NET_EA_MESSAGEIN_H +#define NET_EA_MESSAGEIN_H + +#include "net/messagein.h" + +#include <SDL_types.h> +#include <string> + +namespace EAthena { + +/** + * Used for parsing an incoming message. + * + * \ingroup Network + */ + class MessageIn : public Net::MessageIn +{ + public: + /** + * Constructor. + */ + MessageIn(const char *data, unsigned int length); + + int readInt16(); /**< Reads a short. */ + int readInt32(); /**< Reads a long. */ +}; + +} + +#endif // NET_EA_MESSAGEIN_H diff --git a/src/net/ea/messageout.cpp b/src/net/ea/messageout.cpp new file mode 100644 index 00000000..f75dcf7e --- /dev/null +++ b/src/net/ea/messageout.cpp @@ -0,0 +1,126 @@ +/* + * The Mana World + * Copyright (C) 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "net/ea/messageout.h" + +#include "net/ea/network.h" + +#include <SDL.h> +#include <SDL_endian.h> + +#include <cstring> +#include <string> + +namespace EAthena { + +MessageOut::MessageOut(short id): + Net::MessageOut(id) +{ + mNetwork = EAthena::Network::instance(); + mData = mNetwork->mOutBuffer + mNetwork->mOutSize; + writeInt16(id); +} + +void MessageOut::expand(size_t bytes) +{ + mNetwork->mOutSize += bytes; +} + +void MessageOut::writeInt16(Sint16 value) +{ + expand(2); +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + (*(Sint16 *)(mData + mPos)) = SDL_Swap16(value); +#else + (*(Sint16 *)(mData + mPos)) = value; +#endif + mPos += 2; +} + +void MessageOut::writeInt32(Sint32 value) +{ + expand(4); +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + (*(Sint32 *)(mData + mPos)) = SDL_Swap32(value); +#else + (*(Sint32 *)(mData + mPos)) = value; +#endif + mPos += 4; +} + +#define LOBYTE(w) ((unsigned char)(w)) +#define HIBYTE(w) ((unsigned char)(((unsigned short)(w)) >> 8)) + +void MessageOut::writeCoordinates(unsigned short x, unsigned short y, + unsigned char direction) +{ + char *data = mData + mPos; + mNetwork->mOutSize += 3; + mPos += 3; + + short temp; + temp = x; + temp <<= 6; + data[0] = 0; + data[1] = 1; + data[2] = 2; + data[0] = HIBYTE(temp); + data[1] = (unsigned char) temp; + temp = y; + temp <<= 4; + data[1] |= HIBYTE(temp); + data[2] = LOBYTE(temp); + + // Translate direction to eAthena format + switch (direction) + { + case 1: + direction = 0; + break; + case 3: + direction = 1; + break; + case 2: + direction = 2; + break; + case 6: + direction = 3; + break; + case 4: + direction = 4; + break; + case 12: + direction = 5; + break; + case 8: + direction = 6; + break; + case 9: + direction = 7; + break; + default: + // OOPSIE! Impossible or unknown + direction = (unsigned char) -1; + } + data[2] |= direction; +} + +} diff --git a/src/net/ea/messageout.h b/src/net/ea/messageout.h new file mode 100644 index 00000000..47cd7bd9 --- /dev/null +++ b/src/net/ea/messageout.h @@ -0,0 +1,64 @@ +/* + * The Mana World + * Copyright (C) 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef NET_EA_MESSAGEOUT_H +#define NET_EA_MESSAGEOUT_H + +#include "net/messageout.h" + +#include <iosfwd> +#include <SDL_types.h> + +namespace EAthena { + +class Network; + +/** + * Used for building an outgoing message. + * + * \ingroup Network + */ +class MessageOut : public Net::MessageOut +{ + public: + /** + * Constructor. + */ + MessageOut(short id); + + void writeInt16(Sint16 value); /**< Writes a short. */ + void writeInt32(Sint32 value); /**< Writes a long. */ + + /** + * Encodes coordinates and direction in 3 bytes. + */ + void writeCoordinates(unsigned short x, unsigned short y, + unsigned char direction); + + private: + void expand(size_t size); + + Network *mNetwork; +}; + +} + +#endif // NET_EA_MESSAGEOUT_H diff --git a/src/net/ea/network.cpp b/src/net/ea/network.cpp index d8d27577..c12e1bb9 100644 --- a/src/net/ea/network.cpp +++ b/src/net/ea/network.cpp @@ -84,6 +84,8 @@ short packet_lengths[] = { const unsigned int BUFFER_SIZE = 65536; +namespace EAthena { + int networkThread(void *data) { Network *network = static_cast<Network*>(data); @@ -222,9 +224,13 @@ void Network::dispatchMessages() MessageHandlerIterator iter = mMessageHandlers.find(msg.getId()); if (iter != mMessageHandlers.end()) + { iter->second->handleMessage(msg); + } else + { logger->log("Unhandled packet: %x", msg.getId()); + } skip(msg.getLength()); } @@ -317,7 +323,7 @@ MessageIn Network::getNextMessage() len = readWord(2); #ifdef DEBUG - logger->log("Received packet 0x%x of length %d", msgId, len); + logger->log("Received packet 0x%x of length %d\n", msgId, len); #endif MessageIn msg(mInBuffer, len); @@ -464,3 +470,5 @@ Uint16 Network::readWord(int pos) return (*(Uint16*)(mInBuffer+(pos))); #endif } + +} diff --git a/src/net/ea/network.h b/src/net/ea/network.h index 3b8d09f9..0bbcae0e 100644 --- a/src/net/ea/network.h +++ b/src/net/ea/network.h @@ -19,11 +19,15 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef EA_NETWORK_H -#define EA_NETWORK_H +#ifndef NET_EA_NETWORK_H +#define NET_EA_NETWORK_H #include "net/serverinfo.h" +#include "net/ea/messagehandler.h" +#include "net/ea/messagein.h" +#include "net/ea/messageout.h" + #include <SDL_net.h> #include <SDL_thread.h> @@ -36,15 +40,11 @@ */ #define CLIENT_PROTOCOL_VERSION 1 -class MessageHandler; -class MessageIn; +namespace EAthena { class Network { public: - friend int networkThread(void *data); - friend class MessageOut; - Network(); ~Network(); @@ -89,7 +89,10 @@ class Network NET_ERROR }; - private: + protected: + friend int networkThread(void *data); + friend class MessageOut; + static Network *instance(); void setError(const std::string &error); @@ -122,4 +125,6 @@ class Network static Network *mInstance; }; -#endif +} + +#endif // NET_EA_NETWORK_H diff --git a/src/net/ea/npchandler.cpp b/src/net/ea/npchandler.cpp index 41caf226..24d8fb64 100644 --- a/src/net/ea/npchandler.cpp +++ b/src/net/ea/npchandler.cpp @@ -55,7 +55,7 @@ NpcHandler::NpcHandler() npcHandler = this; } -void NpcHandler::handleMessage(MessageIn &msg) +void NpcHandler::handleMessage(Net::MessageIn &msg) { int id; bool resetPlayer = false; diff --git a/src/net/ea/npchandler.h b/src/net/ea/npchandler.h index 557b97d9..56802d03 100644 --- a/src/net/ea/npchandler.h +++ b/src/net/ea/npchandler.h @@ -22,10 +22,11 @@ #ifndef NET_EA_NPCHANDLER_H #define NET_EA_NPCHANDLER_H -#include "net/messagehandler.h" #include "net/net.h" #include "net/npchandler.h" +#include "net/ea/messagehandler.h" + namespace EAthena { class NpcHandler : public MessageHandler, public Net::NpcHandler @@ -33,7 +34,7 @@ class NpcHandler : public MessageHandler, public Net::NpcHandler public: NpcHandler(); - void handleMessage(MessageIn &msg); + void handleMessage(Net::MessageIn &msg); void talk(int npcId); diff --git a/src/net/ea/partyhandler.cpp b/src/net/ea/partyhandler.cpp index 27e19392..0865f71c 100644 --- a/src/net/ea/partyhandler.cpp +++ b/src/net/ea/partyhandler.cpp @@ -69,7 +69,7 @@ PartyHandler::~PartyHandler() //deletePartyTab(); } -void PartyHandler::handleMessage(MessageIn &msg) +void PartyHandler::handleMessage(Net::MessageIn &msg) { switch (msg.getId()) { diff --git a/src/net/ea/partyhandler.h b/src/net/ea/partyhandler.h index a9fe843b..188df2ac 100644 --- a/src/net/ea/partyhandler.h +++ b/src/net/ea/partyhandler.h @@ -22,10 +22,11 @@ #ifndef NET_EA_PARTYHANDLER_H #define NET_EA_PARTYHANDLER_H -#include "net/messagehandler.h" #include "net/net.h" #include "net/partyhandler.h" +#include "net/ea/messagehandler.h" + namespace EAthena { class PartyHandler : public MessageHandler, public Net::PartyHandler @@ -35,7 +36,7 @@ class PartyHandler : public MessageHandler, public Net::PartyHandler ~PartyHandler(); - void handleMessage(MessageIn &msg); + void handleMessage(Net::MessageIn &msg); void create(const std::string &name = ""); diff --git a/src/net/ea/playerhandler.cpp b/src/net/ea/playerhandler.cpp index ca308bb2..454d6210 100644 --- a/src/net/ea/playerhandler.cpp +++ b/src/net/ea/playerhandler.cpp @@ -162,7 +162,7 @@ PlayerHandler::PlayerHandler() playerHandler = this; } -void PlayerHandler::handleMessage(MessageIn &msg) +void PlayerHandler::handleMessage(Net::MessageIn &msg) { switch (msg.getId()) { @@ -570,4 +570,14 @@ bool PlayerHandler::canUseMagic() return player_node->getAttributeEffective(MATK) > 0; } +bool PlayerHandler::canCorrectAttributes() +{ + return false; +} + +int PlayerHandler::getJobLocation() +{ + return JOB; +} + } // namespace EAthena diff --git a/src/net/ea/playerhandler.h b/src/net/ea/playerhandler.h index 78e64a88..61f3b705 100644 --- a/src/net/ea/playerhandler.h +++ b/src/net/ea/playerhandler.h @@ -22,10 +22,11 @@ #ifndef NET_EA_PLAYERHANDLER_H #define NET_EA_PLAYERHANDLER_H -#include "net/messagehandler.h" #include "net/net.h" #include "net/playerhandler.h" +#include "net/ea/messagehandler.h" + namespace EAthena { class PlayerHandler : public MessageHandler, public Net::PlayerHandler @@ -33,7 +34,7 @@ class PlayerHandler : public MessageHandler, public Net::PlayerHandler public: PlayerHandler(); - void handleMessage(MessageIn &msg); + void handleMessage(Net::MessageIn &msg); void attack(int id); @@ -60,6 +61,10 @@ class PlayerHandler : public MessageHandler, public Net::PlayerHandler void ignoreAll(bool ignore); bool canUseMagic(); + + bool canCorrectAttributes(); + + int getJobLocation(); }; } // namespace EAthena diff --git a/src/net/ea/specialhandler.cpp b/src/net/ea/specialhandler.cpp index 528f531e..5def63b7 100644 --- a/src/net/ea/specialhandler.cpp +++ b/src/net/ea/specialhandler.cpp @@ -83,7 +83,7 @@ SpecialHandler::SpecialHandler() specialHandler = this; } -void SpecialHandler::handleMessage(MessageIn &msg) +void SpecialHandler::handleMessage(Net::MessageIn &msg) { int skillCount; int skillId; diff --git a/src/net/ea/specialhandler.h b/src/net/ea/specialhandler.h index eac53569..501ea74d 100644 --- a/src/net/ea/specialhandler.h +++ b/src/net/ea/specialhandler.h @@ -22,10 +22,11 @@ #ifndef NET_EA_SKILLHANDLER_H #define NET_EA_SKILLHANDLER_H -#include "net/messagehandler.h" #include "net/net.h" #include "net/specialhandler.h" +#include "net/ea/messagehandler.h" + namespace EAthena { class SpecialHandler : public MessageHandler, public Net::SpecialHandler @@ -33,7 +34,7 @@ class SpecialHandler : public MessageHandler, public Net::SpecialHandler public: SpecialHandler(); - void handleMessage(MessageIn &msg); + void handleMessage(Net::MessageIn &msg); void use(int id); diff --git a/src/net/ea/tradehandler.cpp b/src/net/ea/tradehandler.cpp index 4f045573..bfd01f89 100644 --- a/src/net/ea/tradehandler.cpp +++ b/src/net/ea/tradehandler.cpp @@ -76,7 +76,7 @@ TradeHandler::TradeHandler() } -void TradeHandler::handleMessage(MessageIn &msg) +void TradeHandler::handleMessage(Net::MessageIn &msg) { switch (msg.getId()) { diff --git a/src/net/ea/tradehandler.h b/src/net/ea/tradehandler.h index 1d94b849..b8a99421 100644 --- a/src/net/ea/tradehandler.h +++ b/src/net/ea/tradehandler.h @@ -22,10 +22,11 @@ #ifndef NET_EA_TRADEHANDLER_H #define NET_EA_TRADEHANDLER_H -#include "net/messagehandler.h" #include "net/net.h" #include "net/tradehandler.h" +#include "net/ea/messagehandler.h" + namespace EAthena { class TradeHandler : public MessageHandler, public Net::TradeHandler @@ -33,7 +34,7 @@ class TradeHandler : public MessageHandler, public Net::TradeHandler public: TradeHandler(); - void handleMessage(MessageIn &msg); + void handleMessage(Net::MessageIn &msg); void request(Being *being); diff --git a/src/net/inventoryhandler.h b/src/net/inventoryhandler.h index 19060797..08caf926 100644 --- a/src/net/inventoryhandler.h +++ b/src/net/inventoryhandler.h @@ -59,6 +59,10 @@ class InventoryHandler virtual void moveItem(StorageType source, int slot, int amount, StorageType destination) = 0; + + virtual size_t getInventorySize() const = 0; + + virtual size_t getStorageSize() const = 0; }; } // namespace Net diff --git a/src/net/manaserv/accountserver/account.cpp b/src/net/manaserv/accountserver/account.cpp index f34139da..e680d9d5 100644 --- a/src/net/manaserv/accountserver/account.cpp +++ b/src/net/manaserv/accountserver/account.cpp @@ -24,15 +24,14 @@ #include "internal.h" #include "net/manaserv/connection.h" +#include "net/manaserv/messageout.h" #include "net/manaserv/protocol.h" -#include "net/messageout.h" - #include "utils/sha256.h" #include <string> -void Net::AccountServer::Account::createCharacter( +void ManaServ::AccountServer::Account::createCharacter( const std::string &name, char hairStyle, char hairColor, char gender, short strength, short agility, short vitality, short intelligence, short dexterity, short willpower) @@ -50,28 +49,28 @@ void Net::AccountServer::Account::createCharacter( msg.writeInt16(dexterity); msg.writeInt16(willpower); - Net::AccountServer::connection->send(msg); + ManaServ::AccountServer::connection->send(msg); } -void Net::AccountServer::Account::deleteCharacter(char slot) +void ManaServ::AccountServer::Account::deleteCharacter(char slot) { MessageOut msg(PAMSG_CHAR_DELETE); msg.writeInt8(slot); - Net::AccountServer::connection->send(msg); + ManaServ::AccountServer::connection->send(msg); } -void Net::AccountServer::Account::selectCharacter(char slot) +void ManaServ::AccountServer::Account::selectCharacter(char slot) { MessageOut msg(PAMSG_CHAR_SELECT); msg.writeInt8(slot); - Net::AccountServer::connection->send(msg); + ManaServ::AccountServer::connection->send(msg); } -void Net::AccountServer::Account::unregister(const std::string &username, +void ManaServ::AccountServer::Account::unregister(const std::string &username, const std::string &password) { MessageOut msg(PAMSG_UNREGISTER); @@ -79,10 +78,10 @@ void Net::AccountServer::Account::unregister(const std::string &username, msg.writeString(username); msg.writeString(sha256(username + password)); - Net::AccountServer::connection->send(msg); + ManaServ::AccountServer::connection->send(msg); } -void Net::AccountServer::Account::changeEmail(const std::string &email) +void ManaServ::AccountServer::Account::changeEmail(const std::string &email) { MessageOut msg(PAMSG_EMAIL_CHANGE); @@ -90,10 +89,10 @@ void Net::AccountServer::Account::changeEmail(const std::string &email) // Encryption is assumed server-side. msg.writeString(email); - Net::AccountServer::connection->send(msg); + ManaServ::AccountServer::connection->send(msg); } -void Net::AccountServer::Account::changePassword( +void ManaServ::AccountServer::Account::changePassword( const std::string &username, const std::string &oldPassword, const std::string &newPassword) @@ -104,5 +103,5 @@ void Net::AccountServer::Account::changePassword( msg.writeString(sha256(username + oldPassword)); msg.writeString(sha256(username + newPassword)); - Net::AccountServer::connection->send(msg); + ManaServ::AccountServer::connection->send(msg); } diff --git a/src/net/manaserv/accountserver/account.h b/src/net/manaserv/accountserver/account.h index 03e83881..03453655 100644 --- a/src/net/manaserv/accountserver/account.h +++ b/src/net/manaserv/accountserver/account.h @@ -19,12 +19,12 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef NET_ACCOUNTSERVER_CHARACTER_H -#define NET_ACCOUNTSERVER_CHARACTER_H +#ifndef NET_MANASERV_ACCOUNTSERVER_CHARACTER_H +#define NET_MANASERV_ACCOUNTSERVER_CHARACTER_H #include <iosfwd> -namespace Net +namespace ManaServ { namespace AccountServer { @@ -51,4 +51,4 @@ namespace Net } } -#endif +#endif // NET_MANASERV_ACCOUNTSERVER_CHARACTER_H diff --git a/src/net/manaserv/accountserver/accountserver.cpp b/src/net/manaserv/accountserver/accountserver.cpp index 72f05aeb..afbee4ab 100644 --- a/src/net/manaserv/accountserver/accountserver.cpp +++ b/src/net/manaserv/accountserver/accountserver.cpp @@ -24,18 +24,20 @@ #include "internal.h" #include "net/manaserv/connection.h" +#include "net/manaserv/messageout.h" #include "net/manaserv/protocol.h" -#include "net/messageout.h" - #include "utils/sha256.h" #include <string> -void Net::AccountServer::login(Net::Connection *connection, int version, - const std::string &username, const std::string &password) +namespace ManaServ +{ + +void AccountServer::login(Connection *connection, + int version, const std::string &username, const std::string &password) { - Net::AccountServer::connection = connection; + AccountServer::connection = connection; MessageOut msg(PAMSG_LOGIN); @@ -43,14 +45,14 @@ void Net::AccountServer::login(Net::Connection *connection, int version, msg.writeString(username); msg.writeString(sha256(username + password)); - Net::AccountServer::connection->send(msg); + AccountServer::connection->send(msg); } -void Net::AccountServer::registerAccount(Net::Connection *connection, +void AccountServer::registerAccount(Connection *connection, int version, const std::string &username, const std::string &password, const std::string &email) { - Net::AccountServer::connection = connection; + AccountServer::connection = connection; MessageOut msg(PAMSG_REGISTER); @@ -62,21 +64,23 @@ void Net::AccountServer::registerAccount(Net::Connection *connection, msg.writeString(password); msg.writeString(email); - Net::AccountServer::connection->send(msg); + AccountServer::connection->send(msg); } -void Net::AccountServer::logout() +void AccountServer::logout() { MessageOut msg(PAMSG_LOGOUT); - Net::AccountServer::connection->send(msg); + AccountServer::connection->send(msg); } -void Net::AccountServer::reconnectAccount(Net::Connection *connection, - const std::string &passToken) +void AccountServer::reconnectAccount(Connection *connection, + const std::string &passToken) { - Net::AccountServer::connection = connection; + AccountServer::connection = connection; MessageOut msg(PAMSG_RECONNECT); msg.writeString(passToken, 32); - Net::AccountServer::connection->send(msg); + AccountServer::connection->send(msg); +} + } diff --git a/src/net/manaserv/accountserver/accountserver.h b/src/net/manaserv/accountserver/accountserver.h index dd62fd25..a1bbb5f5 100644 --- a/src/net/manaserv/accountserver/accountserver.h +++ b/src/net/manaserv/accountserver/accountserver.h @@ -19,29 +19,29 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef NET_ACCOUNTSERVER_ACCOUNTSERVER_H -#define NET_ACCOUNTSERVER_ACCOUNTSERVER_H +#ifndef NET_MANASERV_ACCOUNTSERVER_ACCOUNTSERVER_H +#define NET_MANASERV_ACCOUNTSERVER_ACCOUNTSERVER_H #include <iosfwd> -namespace Net +namespace ManaServ { class Connection; namespace AccountServer { - void login(Net::Connection *connection, int version, + void login(ManaServ::Connection *connection, int version, const std::string &username, const std::string &password); - void registerAccount(Net::Connection *connection, int version, + void registerAccount(ManaServ::Connection *connection, int version, const std::string &username, const std::string &password, const std::string &email); void logout(); - void reconnectAccount(Net::Connection *connection, + void reconnectAccount(ManaServ::Connection *connection, const std::string &passToken); } } -#endif +#endif // NET_MANASERV_ACCOUNTSERVER_ACCOUNTSERVER_H diff --git a/src/net/manaserv/accountserver/internal.cpp b/src/net/manaserv/accountserver/internal.cpp index de1d412c..e1d105b7 100644 --- a/src/net/manaserv/accountserver/internal.cpp +++ b/src/net/manaserv/accountserver/internal.cpp @@ -21,7 +21,7 @@ #include "internal.h" -namespace Net +namespace ManaServ { class Connection; diff --git a/src/net/manaserv/accountserver/internal.h b/src/net/manaserv/accountserver/internal.h index ff741872..af91f692 100644 --- a/src/net/manaserv/accountserver/internal.h +++ b/src/net/manaserv/accountserver/internal.h @@ -19,10 +19,10 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef NET_ACCOUNTSERVER_INTERNAL_H -#define NET_ACCOUNTSERVER_INTERNAL_H +#ifndef NET_MANASERV_ACCOUNTSERVER_INTERNAL_H +#define NET_MANASERV_ACCOUNTSERVER_INTERNAL_H -namespace Net +namespace ManaServ { class Connection; @@ -32,4 +32,4 @@ namespace Net } } -#endif +#endif // NET_MANASERV_ACCOUNTSERVER_INTERNAL_H diff --git a/src/net/manaserv/adminhandler.cpp b/src/net/manaserv/adminhandler.cpp index 72ae01d0..abdf86ef 100644 --- a/src/net/manaserv/adminhandler.cpp +++ b/src/net/manaserv/adminhandler.cpp @@ -34,7 +34,7 @@ AdminHandler::AdminHandler() void AdminHandler::announce(const std::string &text) { - Net::ChatServer::announce(text); + ManaServ::ChatServer::announce(text); } void AdminHandler::localAnnounce(const std::string &text) diff --git a/src/net/manaserv/beinghandler.cpp b/src/net/manaserv/beinghandler.cpp index d8508f01..71325fd5 100644 --- a/src/net/manaserv/beinghandler.cpp +++ b/src/net/manaserv/beinghandler.cpp @@ -61,7 +61,7 @@ BeingHandler::BeingHandler() handledMessages = _messages; } -void BeingHandler::handleMessage(MessageIn &msg) +void BeingHandler::handleMessage(Net::MessageIn &msg) { switch (msg.getId()) { @@ -92,7 +92,7 @@ void BeingHandler::handleMessage(MessageIn &msg) } } -static void handleLooks(Player *being, MessageIn &msg) +static void handleLooks(Player *being, Net::MessageIn &msg) { // Order of sent slots. Has to be in sync with the server code. static int const nb_slots = 4; @@ -120,7 +120,7 @@ static void handleLooks(Player *being, MessageIn &msg) } } -void BeingHandler::handleBeingEnterMessage(MessageIn &msg) +void BeingHandler::handleBeingEnterMessage(Net::MessageIn &msg) { int type = msg.readInt8(); int id = msg.readInt16(); @@ -171,7 +171,7 @@ void BeingHandler::handleBeingEnterMessage(MessageIn &msg) being->setAction(action); } -void BeingHandler::handleBeingLeaveMessage(MessageIn &msg) +void BeingHandler::handleBeingLeaveMessage(Net::MessageIn &msg) { Being *being = beingManager->findBeing(msg.readInt16()); if (!being) @@ -180,7 +180,7 @@ void BeingHandler::handleBeingLeaveMessage(MessageIn &msg) beingManager->destroyBeing(being); } -void BeingHandler::handleBeingsMoveMessage(MessageIn &msg) +void BeingHandler::handleBeingsMoveMessage(Net::MessageIn &msg) { while (msg.getUnreadLength()) { @@ -220,7 +220,7 @@ void BeingHandler::handleBeingsMoveMessage(MessageIn &msg) } } -void BeingHandler::handleBeingAttackMessage(MessageIn &msg) +void BeingHandler::handleBeingAttackMessage(Net::MessageIn &msg) { Being *being = beingManager->findBeing(msg.readInt16()); const int direction = msg.readInt8(); @@ -240,7 +240,7 @@ void BeingHandler::handleBeingAttackMessage(MessageIn &msg) being->setAction(Being::ATTACK, attackType); } -void BeingHandler::handleBeingsDamageMessage(MessageIn &msg) +void BeingHandler::handleBeingsDamageMessage(Net::MessageIn &msg) { while (msg.getUnreadLength()) { @@ -253,7 +253,7 @@ void BeingHandler::handleBeingsDamageMessage(MessageIn &msg) } } -void BeingHandler::handleBeingActionChangeMessage(MessageIn &msg) +void BeingHandler::handleBeingActionChangeMessage(Net::MessageIn &msg) { Being *being = beingManager->findBeing(msg.readInt16()); Being::Action action = (Being::Action) msg.readInt8(); @@ -288,11 +288,11 @@ void BeingHandler::handleBeingActionChangeMessage(MessageIn &msg) std::string message(deadMsg[rand()%13]); message.append(std::string(" ") + _("Press OK to respawn.")); OkDialog *dlg = new OkDialog(_("You Died"), message); - dlg->addActionListener(&(Net::GameServer::Player::respawnListener)); + dlg->addActionListener(&(ManaServ::GameServer::Player::respawnListener)); } } -void BeingHandler::handleBeingLooksChangeMessage(MessageIn &msg) +void BeingHandler::handleBeingLooksChangeMessage(Net::MessageIn &msg) { Being *being = beingManager->findBeing(msg.readInt16()); if (!being || being->getType() != Being::PLAYER) @@ -307,7 +307,7 @@ void BeingHandler::handleBeingLooksChangeMessage(MessageIn &msg) } } -void BeingHandler::handleBeingDirChangeMessage(MessageIn &msg) +void BeingHandler::handleBeingDirChangeMessage(Net::MessageIn &msg) { Being *being = beingManager->findBeing(msg.readInt16()); if (!being) diff --git a/src/net/manaserv/beinghandler.h b/src/net/manaserv/beinghandler.h index 4ece08e1..0da4a296 100644 --- a/src/net/manaserv/beinghandler.h +++ b/src/net/manaserv/beinghandler.h @@ -22,7 +22,7 @@ #ifndef NET_MANASERV_BEINGHANDLER_H #define NET_MANASERV_BEINGHANDLER_H -#include "net/messagehandler.h" +#include "net/manaserv/messagehandler.h" namespace ManaServ { @@ -31,17 +31,17 @@ class BeingHandler : public MessageHandler public: BeingHandler(); - void handleMessage(MessageIn &msg); + void handleMessage(Net::MessageIn &msg); private: - void handleBeingAttackMessage(MessageIn &msg); - void handleBeingEnterMessage(MessageIn &msg); - void handleBeingLeaveMessage(MessageIn &msg); - void handleBeingsMoveMessage(MessageIn &msg); - void handleBeingsDamageMessage(MessageIn &msg); - void handleBeingActionChangeMessage(MessageIn &msg); - void handleBeingLooksChangeMessage(MessageIn &msg); - void handleBeingDirChangeMessage(MessageIn &msg); + void handleBeingAttackMessage(Net::MessageIn &msg); + void handleBeingEnterMessage(Net::MessageIn &msg); + void handleBeingLeaveMessage(Net::MessageIn &msg); + void handleBeingsMoveMessage(Net::MessageIn &msg); + void handleBeingsDamageMessage(Net::MessageIn &msg); + void handleBeingActionChangeMessage(Net::MessageIn &msg); + void handleBeingLooksChangeMessage(Net::MessageIn &msg); + void handleBeingDirChangeMessage(Net::MessageIn &msg); }; } // namespace ManaServ diff --git a/src/net/manaserv/buysellhandler.cpp b/src/net/manaserv/buysellhandler.cpp index f7dc91a4..9f3e65ad 100644 --- a/src/net/manaserv/buysellhandler.cpp +++ b/src/net/manaserv/buysellhandler.cpp @@ -50,7 +50,7 @@ BuySellHandler::BuySellHandler() handledMessages = _messages; } -void BuySellHandler::handleMessage(MessageIn &msg) +void BuySellHandler::handleMessage(Net::MessageIn &msg) { Being *being = beingManager->findBeing(msg.readInt16()); if (!being || being->getType() != Being::NPC) diff --git a/src/net/manaserv/buysellhandler.h b/src/net/manaserv/buysellhandler.h index 9d31e739..32e0009b 100644 --- a/src/net/manaserv/buysellhandler.h +++ b/src/net/manaserv/buysellhandler.h @@ -22,7 +22,7 @@ #ifndef NET_MANASERV_BUYSELLHANDLER_H #define NET_MANASERV_BUYSELLHANDLER_H -#include "net/messagehandler.h" +#include "net/manaserv/messagehandler.h" namespace ManaServ { @@ -31,7 +31,7 @@ class BuySellHandler : public MessageHandler public: BuySellHandler(); - void handleMessage(MessageIn &msg); + void handleMessage(Net::MessageIn &msg); }; } // namespace ManaServ diff --git a/src/net/manaserv/charhandler.cpp b/src/net/manaserv/charhandler.cpp index e7a99e8d..a08799f9 100644 --- a/src/net/manaserv/charhandler.cpp +++ b/src/net/manaserv/charhandler.cpp @@ -44,10 +44,6 @@ #include "utils/gettext.h" -extern Net::Connection *accountServerConnection; -extern Net::Connection *gameServerConnection; -extern Net::Connection *chatServerConnection; - Net::CharHandler *charHandler; struct CharInfo { @@ -67,6 +63,9 @@ CharInfos chars; namespace ManaServ { +extern Connection *accountServerConnection; +extern Connection *gameServerConnection; +extern Connection *chatServerConnection; extern std::string netToken; extern ServerInfo gameServer; extern ServerInfo chatServer; @@ -86,7 +85,7 @@ CharHandler::CharHandler(): charHandler = this; } -void CharHandler::handleMessage(MessageIn &msg) +void CharHandler::handleMessage(Net::MessageIn &msg) { switch (msg.getId()) { @@ -182,7 +181,7 @@ void CharHandler::handleMessage(MessageIn &msg) } } -void CharHandler::handleCharCreateResponse(MessageIn &msg) +void CharHandler::handleCharCreateResponse(Net::MessageIn &msg) { int errMsg = msg.readInt8(); @@ -243,7 +242,7 @@ void CharHandler::handleCharCreateResponse(MessageIn &msg) } -void CharHandler::handleCharSelectResponse(MessageIn &msg) +void CharHandler::handleCharSelectResponse(Net::MessageIn &msg) { int errMsg = msg.readInt8(); @@ -360,13 +359,13 @@ void CharHandler::getCharacters() void CharHandler::chooseCharacter(int slot, LocalPlayer* character) { - Net::AccountServer::Account::selectCharacter(slot); + AccountServer::Account::selectCharacter(slot); } void CharHandler::newCharacter(const std::string &name, int slot, bool gender, int hairstyle, int hairColor, std::vector<int> stats) { - Net::AccountServer::Account::createCharacter(name, hairstyle, hairColor, + AccountServer::Account::createCharacter(name, hairstyle, hairColor, gender, stats[0], // STR stats[1], // AGI @@ -379,7 +378,7 @@ void CharHandler::newCharacter(const std::string &name, int slot, bool gender, void CharHandler::deleteCharacter(int slot, LocalPlayer* character) { - Net::AccountServer::Account::deleteCharacter(slot); + AccountServer::Account::deleteCharacter(slot); } void CharHandler::switchCharacter() diff --git a/src/net/manaserv/charhandler.h b/src/net/manaserv/charhandler.h index 5fa57faf..6131412b 100644 --- a/src/net/manaserv/charhandler.h +++ b/src/net/manaserv/charhandler.h @@ -26,7 +26,7 @@ #include "gui/charselectdialog.h" -#include "net/messagehandler.h" +#include "net/manaserv/messagehandler.h" class LoginData; @@ -40,7 +40,7 @@ class CharHandler : public MessageHandler, public Net::CharHandler public: CharHandler(); - void handleMessage(MessageIn &msg); + void handleMessage(Net::MessageIn &msg); void setCharInfo(LockedArray<LocalPlayer*> *charInfo) { @@ -69,9 +69,9 @@ class CharHandler : public MessageHandler, public Net::CharHandler void switchCharacter(); protected: - void handleCharCreateResponse(MessageIn &msg); + void handleCharCreateResponse(Net::MessageIn &msg); - void handleCharSelectResponse(MessageIn &msg); + void handleCharSelectResponse(Net::MessageIn &msg); LockedArray<LocalPlayer*> *mCharInfo; CharSelectDialog *mCharSelectDialog; diff --git a/src/net/manaserv/chathandler.cpp b/src/net/manaserv/chathandler.cpp index 5b85ed53..c4c86d62 100644 --- a/src/net/manaserv/chathandler.cpp +++ b/src/net/manaserv/chathandler.cpp @@ -22,6 +22,8 @@ #include "net/manaserv/chathandler.h" #include "net/manaserv/connection.h" +#include "net/manaserv/messagein.h" +#include "net/manaserv/messageout.h" #include "net/manaserv/protocol.h" #include "net/manaserv/chatserver/chatserver.h" @@ -30,9 +32,6 @@ #include "net/manaserv/gameserver/internal.h" #include "net/manaserv/gameserver/player.h" -#include "net/messagein.h" -#include "net/messageout.h" - #include "being.h" #include "beingmanager.h" #include "channel.h" @@ -54,10 +53,9 @@ extern Being *player_node; Net::ChatHandler *chatHandler; -extern Net::Connection *chatServerConnection; - namespace ManaServ { +extern Connection *chatServerConnection; extern std::string netToken; extern ServerInfo chatServer; @@ -81,7 +79,7 @@ ChatHandler::ChatHandler() chatHandler = this; } -void ChatHandler::handleMessage(MessageIn &msg) +void ChatHandler::handleMessage(Net::MessageIn &msg) { switch (msg.getId()) { @@ -149,7 +147,7 @@ void ChatHandler::handleMessage(MessageIn &msg) } } -void ChatHandler::handleGameChatMessage(MessageIn &msg) +void ChatHandler::handleGameChatMessage(Net::MessageIn &msg) { short id = msg.readInt16(); std::string chatMsg = msg.readString(); @@ -174,7 +172,7 @@ void ChatHandler::handleGameChatMessage(MessageIn &msg) localChatTab->chatLog(mes, being == player_node ? BY_PLAYER : BY_OTHER); } -void ChatHandler::handleEnterChannelResponse(MessageIn &msg) +void ChatHandler::handleEnterChannelResponse(Net::MessageIn &msg) { if(msg.readInt8() == ERRMSG_OK) { @@ -209,7 +207,7 @@ void ChatHandler::handleEnterChannelResponse(MessageIn &msg) } } -void ChatHandler::handleListChannelsResponse(MessageIn &msg) +void ChatHandler::handleListChannelsResponse(Net::MessageIn &msg) { localChatTab->chatLog(_("Listing channels."), BY_SERVER); while(msg.getUnreadLength()) @@ -226,7 +224,7 @@ void ChatHandler::handleListChannelsResponse(MessageIn &msg) localChatTab->chatLog(_("End of channel list."), BY_SERVER); } -void ChatHandler::handlePrivateMessage(MessageIn &msg) +void ChatHandler::handlePrivateMessage(Net::MessageIn &msg) { std::string userNick = msg.readString(); std::string chatMsg = msg.readString(); @@ -234,13 +232,13 @@ void ChatHandler::handlePrivateMessage(MessageIn &msg) chatWindow->whisper(userNick, chatMsg); } -void ChatHandler::handleAnnouncement(MessageIn &msg) +void ChatHandler::handleAnnouncement(Net::MessageIn &msg) { std::string chatMsg = msg.readString(); localChatTab->chatLog(chatMsg, BY_GM); } -void ChatHandler::handleChatMessage(MessageIn &msg) +void ChatHandler::handleChatMessage(Net::MessageIn &msg) { short channelId = msg.readInt16(); std::string userNick = msg.readString(); @@ -250,7 +248,7 @@ void ChatHandler::handleChatMessage(MessageIn &msg) channel->getTab()->chatLog(userNick, chatMsg); } -void ChatHandler::handleQuitChannelResponse(MessageIn &msg) +void ChatHandler::handleQuitChannelResponse(Net::MessageIn &msg) { if(msg.readInt8() == ERRMSG_OK) { @@ -260,7 +258,7 @@ void ChatHandler::handleQuitChannelResponse(MessageIn &msg) } } -void ChatHandler::handleListChannelUsersResponse(MessageIn &msg) +void ChatHandler::handleListChannelUsersResponse(Net::MessageIn &msg) { std::string channelName = msg.readString(); std::string userNick; @@ -283,7 +281,7 @@ void ChatHandler::handleListChannelUsersResponse(MessageIn &msg) } } -void ChatHandler::handleChannelEvent(MessageIn &msg) +void ChatHandler::handleChannelEvent(Net::MessageIn &msg) { short channelId = msg.readInt16(); char eventId = msg.readInt8(); @@ -337,7 +335,7 @@ void ChatHandler::handleChannelEvent(MessageIn &msg) } } -void ChatHandler::handleWhoResponse(MessageIn &msg) +void ChatHandler::handleWhoResponse(Net::MessageIn &msg) { std::string userNick; @@ -354,7 +352,7 @@ void ChatHandler::handleWhoResponse(MessageIn &msg) void ChatHandler::connect() { - Net::ChatServer::connect(chatServerConnection, netToken); + ChatServer::connect(chatServerConnection, netToken); } bool ChatHandler::isConnected() @@ -371,7 +369,7 @@ void ChatHandler::talk(const std::string &text) { MessageOut msg(PGMSG_SAY); msg.writeString(text); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); } void ChatHandler::me(const std::string &text) @@ -385,13 +383,13 @@ void ChatHandler::privateMessage(const std::string &recipient, MessageOut msg(PCMSG_PRIVMSG); msg.writeString(recipient); msg.writeString(text); - Net::ChatServer::connection->send(msg); + ChatServer::connection->send(msg); } void ChatHandler::channelList() { MessageOut msg(PCMSG_LIST_CHANNELS); - Net::ChatServer::connection->send(msg); + ChatServer::connection->send(msg); } void ChatHandler::enterChannel(const std::string &channel, @@ -400,14 +398,14 @@ void ChatHandler::enterChannel(const std::string &channel, MessageOut msg(PCMSG_ENTER_CHANNEL); msg.writeString(channel); msg.writeString(password); - Net::ChatServer::connection->send(msg); + ChatServer::connection->send(msg); } void ChatHandler::quitChannel(int channelId) { MessageOut msg(PCMSG_QUIT_CHANNEL); msg.writeInt16(channelId); - Net::ChatServer::connection->send(msg); + ChatServer::connection->send(msg); } void ChatHandler::sendToChannel(int channelId, const std::string &text) @@ -415,14 +413,14 @@ void ChatHandler::sendToChannel(int channelId, const std::string &text) MessageOut msg(PCMSG_CHAT); msg.writeString(text); msg.writeInt16(channelId); - Net::ChatServer::connection->send(msg); + ChatServer::connection->send(msg); } void ChatHandler::userList(const std::string &channel) { MessageOut msg(PCMSG_LIST_CHANNELUSERS); msg.writeString(channel); - Net::ChatServer::connection->send(msg); + ChatServer::connection->send(msg); } void ChatHandler::setChannelTopic(int channelId, const std::string &text) @@ -430,7 +428,7 @@ void ChatHandler::setChannelTopic(int channelId, const std::string &text) MessageOut msg(PCMSG_TOPIC_CHANGE); msg.writeInt16(channelId); msg.writeString(text); - Net::ChatServer::connection->send(msg); + ChatServer::connection->send(msg); } void ChatHandler::setUserMode(int channelId, const std::string &name, int mode) @@ -439,7 +437,7 @@ void ChatHandler::setUserMode(int channelId, const std::string &name, int mode) msg.writeInt16(channelId); msg.writeString(name); msg.writeInt8(mode); - Net::ChatServer::connection->send(msg); + ChatServer::connection->send(msg); } void ChatHandler::kickUser(int channelId, const std::string &name) @@ -447,13 +445,13 @@ void ChatHandler::kickUser(int channelId, const std::string &name) MessageOut msg(PCMSG_KICK_USER); msg.writeInt16(channelId); msg.writeString(name); - Net::ChatServer::connection->send(msg); + ChatServer::connection->send(msg); } void ChatHandler::who() { MessageOut msg(PCMSG_WHO); - Net::ChatServer::connection->send(msg); + ChatServer::connection->send(msg); } } // namespace ManaServ diff --git a/src/net/manaserv/chathandler.h b/src/net/manaserv/chathandler.h index 2f6a8d00..cab4d053 100644 --- a/src/net/manaserv/chathandler.h +++ b/src/net/manaserv/chathandler.h @@ -23,10 +23,10 @@ #define NET_MANASERV_CHATHANDLER_H #include "net/chathandler.h" -#include "net/messagehandler.h" - #include "net/serverinfo.h" +#include "net/manaserv/messagehandler.h" + namespace ManaServ { class ChatHandler : public MessageHandler, public Net::ChatHandler @@ -37,7 +37,7 @@ class ChatHandler : public MessageHandler, public Net::ChatHandler /** * Handle the given message appropriately. */ - void handleMessage(MessageIn &msg); + void handleMessage(Net::MessageIn &msg); void connect(); @@ -75,52 +75,52 @@ class ChatHandler : public MessageHandler, public Net::ChatHandler /** * Handle chat messages sent from the game server. */ - void handleGameChatMessage(MessageIn &msg); + void handleGameChatMessage(Net::MessageIn &msg); /** * Handle channel entry responses. */ - void handleEnterChannelResponse(MessageIn &msg); + void handleEnterChannelResponse(Net::MessageIn &msg); /** * Handle list channels responses. */ - void handleListChannelsResponse(MessageIn &msg); + void handleListChannelsResponse(Net::MessageIn &msg); /** * Handle private messages. */ - void handlePrivateMessage(MessageIn &msg); + void handlePrivateMessage(Net::MessageIn &msg); /** * Handle announcements. */ - void handleAnnouncement(MessageIn &msg); + void handleAnnouncement(Net::MessageIn &msg); /** * Handle chat messages. */ - void handleChatMessage(MessageIn &msg); + void handleChatMessage(Net::MessageIn &msg); /** * Handle quit channel responses. */ - void handleQuitChannelResponse(MessageIn &msg); + void handleQuitChannelResponse(Net::MessageIn &msg); /** * Handle list channel users responses. */ - void handleListChannelUsersResponse(MessageIn &msg); + void handleListChannelUsersResponse(Net::MessageIn &msg); /** * Handle channel events. */ - void handleChannelEvent(MessageIn &msg); + void handleChannelEvent(Net::MessageIn &msg); /** * Handle who responses. */ - void handleWhoResponse(MessageIn &msg); + void handleWhoResponse(Net::MessageIn &msg); }; } // namespace ManaServ diff --git a/src/net/manaserv/chatserver/chatserver.cpp b/src/net/manaserv/chatserver/chatserver.cpp index f0f5faf2..23eee3e6 100644 --- a/src/net/manaserv/chatserver/chatserver.cpp +++ b/src/net/manaserv/chatserver/chatserver.cpp @@ -24,31 +24,34 @@ #include "internal.h" #include "net/manaserv/connection.h" +#include "net/manaserv/messageout.h" #include "net/manaserv/protocol.h" -#include "net/messageout.h" +namespace ManaServ { -using Net::ChatServer::connection; +using ChatServer::connection; -void Net::ChatServer::connect(Net::Connection *connection, +void ChatServer::connect(Connection *connection, const std::string &token) { - Net::ChatServer::connection = connection; + ChatServer::connection = connection; MessageOut msg(PCMSG_CONNECT); msg.writeString(token, 32); connection->send(msg); } -void Net::ChatServer::logout() +void ChatServer::logout() { MessageOut msg(PCMSG_DISCONNECT); connection->send(msg); } -void Net::ChatServer::announce(const std::string &text) +void ChatServer::announce(const std::string &text) { MessageOut msg(PCMSG_ANNOUNCE); msg.writeString(text); connection->send(msg); } + +} diff --git a/src/net/manaserv/chatserver/chatserver.h b/src/net/manaserv/chatserver/chatserver.h index 18859a2c..18cd5960 100644 --- a/src/net/manaserv/chatserver/chatserver.h +++ b/src/net/manaserv/chatserver/chatserver.h @@ -19,18 +19,18 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef NET_CHATSERVER_CHATSERVER_H -#define NET_CHATSERVER_CHATSERVER_H +#ifndef NET_MANASERV_CHATSERVER_CHATSERVER_H +#define NET_MANASERV_CHATSERVER_CHATSERVER_H #include <iosfwd> -namespace Net +namespace ManaServ { class Connection; namespace ChatServer { - void connect(Net::Connection *connection, const std::string &token); + void connect(Connection *connection, const std::string &token); void logout(); @@ -41,4 +41,4 @@ namespace Net } } -#endif +#endif // NET_MANASERV_CHATSERVER_CHATSERVER_H diff --git a/src/net/manaserv/chatserver/guild.cpp b/src/net/manaserv/chatserver/guild.cpp index 5973077e..e34b3bc4 100644 --- a/src/net/manaserv/chatserver/guild.cpp +++ b/src/net/manaserv/chatserver/guild.cpp @@ -24,23 +24,25 @@ #include "internal.h" #include "net/manaserv/connection.h" +#include "net/manaserv/messageout.h" #include "net/manaserv/protocol.h" -#include "net/messageout.h" - #include "log.h" -void Net::ChatServer::Guild::createGuild(const std::string &name) +namespace ManaServ +{ + +void ChatServer::Guild::createGuild(const std::string &name) { logger->log("Sending PCMSG_GUILD_CREATE"); MessageOut msg(PCMSG_GUILD_CREATE); msg.writeString(name); - Net::ChatServer::connection->send(msg); + ChatServer::connection->send(msg); } -void Net::ChatServer::Guild::invitePlayer(const std::string &name, short guildId) +void ChatServer::Guild::invitePlayer(const std::string &name, short guildId) { logger->log("Sending PCMSG_GUILD_INVITE"); MessageOut msg(PCMSG_GUILD_INVITE); @@ -48,30 +50,30 @@ void Net::ChatServer::Guild::invitePlayer(const std::string &name, short guildId msg.writeInt16(guildId); msg.writeString(name); - Net::ChatServer::connection->send(msg); + ChatServer::connection->send(msg); } -void Net::ChatServer::Guild::acceptInvite(const std::string &name) +void ChatServer::Guild::acceptInvite(const std::string &name) { logger->log("Sending PCMSG_GUILD_ACCEPT"); MessageOut msg(PCMSG_GUILD_ACCEPT); msg.writeString(name); - Net::ChatServer::connection->send(msg); + ChatServer::connection->send(msg); } -void Net::ChatServer::Guild::getGuildMembers(short guildId) +void ChatServer::Guild::getGuildMembers(short guildId) { logger->log("Sending PCMSG_GUILD_GET_MEMBERS"); MessageOut msg(PCMSG_GUILD_GET_MEMBERS); msg.writeInt16(guildId); - Net::ChatServer::connection->send(msg); + ChatServer::connection->send(msg); } -void Net::ChatServer::Guild::promoteMember(const std::string &name, +void ChatServer::Guild::promoteMember(const std::string &name, short guildId, short level) { logger->log("Sending PCMSG_GUILD_PROMOTE_MEMBER"); @@ -81,15 +83,17 @@ void Net::ChatServer::Guild::promoteMember(const std::string &name, msg.writeString(name); msg.writeInt8(level); - Net::ChatServer::connection->send(msg); + ChatServer::connection->send(msg); } -void Net::ChatServer::Guild::quitGuild(short guildId) +void ChatServer::Guild::quitGuild(short guildId) { logger->log("Sending PCMSG_GUILD_QUIT"); MessageOut msg(PCMSG_GUILD_QUIT); msg.writeInt16(guildId); - Net::ChatServer::connection->send(msg); + ChatServer::connection->send(msg); +} + } diff --git a/src/net/manaserv/chatserver/guild.h b/src/net/manaserv/chatserver/guild.h index 2e9cf9a6..7b9aef04 100644 --- a/src/net/manaserv/chatserver/guild.h +++ b/src/net/manaserv/chatserver/guild.h @@ -19,12 +19,12 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef NET_CHATSERVER_GUILD_H -#define NET_CHATSERVER_GUILD_H +#ifndef NET_MANASERV_CHATSERVER_GUILD_H +#define NET_MANASERV_CHATSERVER_GUILD_H #include <iosfwd> -namespace Net +namespace ManaServ { namespace ChatServer { @@ -64,4 +64,4 @@ namespace Net } } -#endif +#endif // NET_MANASERV_CHATSERVER_GUILD_H diff --git a/src/net/manaserv/chatserver/internal.cpp b/src/net/manaserv/chatserver/internal.cpp index 52744804..890cb1f1 100644 --- a/src/net/manaserv/chatserver/internal.cpp +++ b/src/net/manaserv/chatserver/internal.cpp @@ -21,7 +21,7 @@ #include "internal.h" -namespace Net +namespace ManaServ { class Connection; diff --git a/src/net/manaserv/chatserver/internal.h b/src/net/manaserv/chatserver/internal.h index 162d54fb..6807f147 100644 --- a/src/net/manaserv/chatserver/internal.h +++ b/src/net/manaserv/chatserver/internal.h @@ -19,10 +19,10 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef NET_CHATSERVER_INTERNAL_H -#define NET_CHATSERVER_INTERNAL_H +#ifndef NET_MANASERV_CHATSERVER_INTERNAL_H +#define NET_MANASERV_CHATSERVER_INTERNAL_H -namespace Net +namespace ManaServ { class Connection; @@ -32,4 +32,4 @@ namespace Net } } -#endif +#endif // NET_MANASERV_CHATSERVER_INTERNAL_H diff --git a/src/net/manaserv/chatserver/party.cpp b/src/net/manaserv/chatserver/party.cpp index 26b45346..fdefc59d 100644 --- a/src/net/manaserv/chatserver/party.cpp +++ b/src/net/manaserv/chatserver/party.cpp @@ -24,56 +24,60 @@ #include "internal.h" #include "net/manaserv/connection.h" +#include "net/manaserv/messageout.h" #include "net/manaserv/protocol.h" -#include "net/messageout.h" - #include "log.h" -void Net::ChatServer::Party::invitePlayer(const std::string &name) +namespace ManaServ +{ + +void ChatServer::Party::invitePlayer(const std::string &name) { logger->log("Sending PCMSG_PARTY_INVITE"); MessageOut msg(PCMSG_PARTY_INVITE); msg.writeString(name); - Net::ChatServer::connection->send(msg); + ChatServer::connection->send(msg); } -void Net::ChatServer::Party::acceptInvite(const std::string &name) +void ChatServer::Party::acceptInvite(const std::string &name) { logger->log("Sending PCMSG_PARTY_ACCEPT_INVITE"); MessageOut msg(PCMSG_PARTY_ACCEPT_INVITE); msg.writeString(name); - Net::ChatServer::connection->send(msg); + ChatServer::connection->send(msg); } -void Net::ChatServer::Party::rejectInvite(const std::string &name) +void ChatServer::Party::rejectInvite(const std::string &name) { logger->log("Sending PCMSG_PARTY_REJECT_INVITE"); MessageOut msg(PCMSG_PARTY_REJECT_INVITE); msg.writeString(name); - Net::ChatServer::connection->send(msg); + ChatServer::connection->send(msg); } -void Net::ChatServer::Party::getPartyMembers() +void ChatServer::Party::getPartyMembers() { logger->log("Sending PCMSG_PARTY_GET_MEMBERS"); // MessageOut msg(PCMSG_GUILD_GET_MEMBERS); // msg.writeInt16(guildId); -// Net::ChatServer::connection->send(msg); +// ChatServer::connection->send(msg); } -void Net::ChatServer::Party::quitParty() +void ChatServer::Party::quitParty() { logger->log("Sending PCMSG_PARTY_QUIT"); MessageOut msg(PCMSG_PARTY_QUIT); - Net::ChatServer::connection->send(msg); + ChatServer::connection->send(msg); +} + } diff --git a/src/net/manaserv/chatserver/party.h b/src/net/manaserv/chatserver/party.h index 3850c283..34f308f7 100644 --- a/src/net/manaserv/chatserver/party.h +++ b/src/net/manaserv/chatserver/party.h @@ -19,12 +19,12 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef NET_CHATSERVER_PARTY_H -#define NET_CHATSERVER_PARTY_H +#ifndef NET_MANASERV_CHATSERVER_PARTY_H +#define NET_MANASERV_CHATSERVER_PARTY_H #include <iosfwd> -namespace Net +namespace ManaServ { namespace ChatServer { @@ -58,4 +58,4 @@ namespace Net } } -#endif +#endif // NET_MANASERV_CHATSERVER_PARTY_H diff --git a/src/net/manaserv/connection.cpp b/src/net/manaserv/connection.cpp index b73f867f..6ddcf186 100644 --- a/src/net/manaserv/connection.cpp +++ b/src/net/manaserv/connection.cpp @@ -22,26 +22,28 @@ #include "net/manaserv/connection.h" #include "net/manaserv/internal.h" - -#include "net/messageout.h" +#include "net/manaserv/messageout.h" #include "log.h" #include <string> -Net::Connection::Connection(ENetHost *client): +namespace ManaServ +{ + +Connection::Connection(ENetHost *client): mConnection(0), mClient(client) { mPort = 0; - Net::connections++; + connections++; } -Net::Connection::~Connection() +Connection::~Connection() { - Net::connections--; + connections--; } -bool Net::Connection::connect(const std::string &address, short port) +bool Connection::connect(const std::string &address, short port) { logger->log("Net::Connection::connect(%s, %i)", address.c_str(), port); @@ -72,7 +74,7 @@ bool Net::Connection::connect(const std::string &address, short port) return true; } -void Net::Connection::disconnect() +void Connection::disconnect() { if (!mConnection) return; @@ -84,13 +86,13 @@ void Net::Connection::disconnect() mConnection = 0; } -bool Net::Connection::isConnected() +bool Connection::isConnected() { return (mConnection) ? (mConnection->state == ENET_PEER_STATE_CONNECTED) : false; } -void Net::Connection::send(const MessageOut &msg) +void Connection::send(const ManaServ::MessageOut &msg) { if (!isConnected()) { @@ -103,3 +105,5 @@ void Net::Connection::send(const MessageOut &msg) ENET_PACKET_FLAG_RELIABLE); enet_peer_send(mConnection, 0, packet); } + +} // namespace ManaServ diff --git a/src/net/manaserv/connection.h b/src/net/manaserv/connection.h index b340546b..e5db8c8e 100644 --- a/src/net/manaserv/connection.h +++ b/src/net/manaserv/connection.h @@ -26,10 +26,10 @@ #include <enet/enet.h> -class MessageOut; - -namespace Net +namespace ManaServ { + class MessageOut; + /** * \ingroup Network */ @@ -65,10 +65,10 @@ namespace Net /** * Sends a message. */ - void send(const MessageOut &msg); + void send(const ManaServ::MessageOut &msg); private: - friend Connection *Net::getConnection(); + friend Connection *ManaServ::getConnection(); Connection(ENetHost *client); short mPort; @@ -78,4 +78,4 @@ namespace Net }; } -#endif +#endif // NET_MANASERV_CONNECTION_H diff --git a/src/net/manaserv/effecthandler.cpp b/src/net/manaserv/effecthandler.cpp index e2121102..f9504ebb 100644 --- a/src/net/manaserv/effecthandler.cpp +++ b/src/net/manaserv/effecthandler.cpp @@ -41,7 +41,7 @@ EffectHandler::EffectHandler() handledMessages = _messages; } -void EffectHandler::handleMessage(MessageIn &msg) +void EffectHandler::handleMessage(Net::MessageIn &msg) { switch (msg.getId()) { @@ -56,7 +56,7 @@ void EffectHandler::handleMessage(MessageIn &msg) } } -void EffectHandler::handleCreateEffectPos(MessageIn &msg) +void EffectHandler::handleCreateEffectPos(Net::MessageIn &msg) { int id = msg.readInt16(); Uint16 x = msg.readInt16(); @@ -64,7 +64,7 @@ void EffectHandler::handleCreateEffectPos(MessageIn &msg) effectManager->trigger(id, x, y); } -void EffectHandler::handleCreateEffectBeing(MessageIn &msg) +void EffectHandler::handleCreateEffectBeing(Net::MessageIn &msg) { int eid = msg.readInt16(); int bid = msg.readInt16(); diff --git a/src/net/manaserv/effecthandler.h b/src/net/manaserv/effecthandler.h index 5c52f121..4eb49f30 100644 --- a/src/net/manaserv/effecthandler.h +++ b/src/net/manaserv/effecthandler.h @@ -22,7 +22,7 @@ #ifndef NET_MANASERV_EFFECTSHANDLER_H #define NET_MANASERV_EFFECTSHANDLER_H -#include "net/messagehandler.h" +#include "net/manaserv/messagehandler.h" namespace ManaServ { @@ -31,13 +31,13 @@ class EffectHandler : public MessageHandler public: EffectHandler(); - void handleMessage(MessageIn &msg); + void handleMessage(Net::MessageIn &msg); private: - void handleCreateEffectPos(MessageIn &msg); - void handleCreateEffectBeing(MessageIn &msg); + void handleCreateEffectPos(Net::MessageIn &msg); + void handleCreateEffectBeing(Net::MessageIn &msg); }; } // namespace ManaServ -#endif +#endif // NET_MANASERV_EFFECTSHANDLER_H diff --git a/src/net/manaserv/gamehandler.cpp b/src/net/manaserv/gamehandler.cpp index c7f8eeee..1916d492 100644 --- a/src/net/manaserv/gamehandler.cpp +++ b/src/net/manaserv/gamehandler.cpp @@ -34,10 +34,9 @@ Net::GameHandler *gameHandler; extern ManaServ::ChatHandler *chatHandler; -extern Net::Connection *gameServerConnection; - namespace ManaServ { +extern Connection *gameServerConnection; extern std::string netToken; extern ServerInfo gameServer; @@ -51,7 +50,7 @@ GameHandler::GameHandler() gameHandler = this; } -void GameHandler::handleMessage(MessageIn &msg) +void GameHandler::handleMessage(Net::MessageIn &msg) { switch (msg.getId()) { @@ -100,7 +99,7 @@ void GameHandler::disconnect() void GameHandler::inGame() { - Net::GameServer::connect(gameServerConnection, netToken); + GameServer::connect(gameServerConnection, netToken); chatHandler->connect(); } diff --git a/src/net/manaserv/gamehandler.h b/src/net/manaserv/gamehandler.h index 846eb2ae..aad0651f 100644 --- a/src/net/manaserv/gamehandler.h +++ b/src/net/manaserv/gamehandler.h @@ -23,10 +23,10 @@ #define NET_MANASERV_MAPHANDLER_H #include "net/gamehandler.h" -#include "net/messagehandler.h" - #include "net/serverinfo.h" +#include "net/manaserv/messagehandler.h" + namespace ManaServ { class GameHandler : public MessageHandler, public Net::GameHandler @@ -34,7 +34,7 @@ class GameHandler : public MessageHandler, public Net::GameHandler public: GameHandler(); - void handleMessage(MessageIn &msg); + void handleMessage(Net::MessageIn &msg); void connect(); @@ -57,4 +57,4 @@ class GameHandler : public MessageHandler, public Net::GameHandler } // namespace ManaServ -#endif +#endif // NET_MANASERV_MAPHANDLER_H diff --git a/src/net/manaserv/gameserver/gameserver.cpp b/src/net/manaserv/gameserver/gameserver.cpp index 94015c20..ba3bd983 100644 --- a/src/net/manaserv/gameserver/gameserver.cpp +++ b/src/net/manaserv/gameserver/gameserver.cpp @@ -24,27 +24,30 @@ #include "internal.h" #include "net/manaserv/connection.h" +#include "net/manaserv/messageout.h" #include "net/manaserv/protocol.h" -#include "net/messageout.h" +namespace ManaServ +{ -void Net::GameServer::connect(Net::Connection *connection, - const std::string &token) +void GameServer::connect(Connection *connection, const std::string &token) { - Net::GameServer::connection = connection; + GameServer::connection = connection; MessageOut msg(PGMSG_CONNECT); msg.writeString(token, 32); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); } -void Net::GameServer::logout(bool reconnectAccount) +void GameServer::logout(bool reconnectAccount) { MessageOut msg(PGMSG_DISCONNECT); msg.writeInt8((unsigned char) reconnectAccount); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); +} + } diff --git a/src/net/manaserv/gameserver/gameserver.h b/src/net/manaserv/gameserver/gameserver.h index 6de82c2e..1f9e5b78 100644 --- a/src/net/manaserv/gameserver/gameserver.h +++ b/src/net/manaserv/gameserver/gameserver.h @@ -19,21 +19,21 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef NET_GAMESERVER_GAMESERVER_H -#define NET_GAMESERVER_GAMESERVER_H +#ifndef NET_MANASERV_GAMESERVER_GAMESERVER_H +#define NET_MANASERV_GAMESERVER_GAMESERVER_H #include <iosfwd> -namespace Net +namespace ManaServ { class Connection; namespace GameServer { - void connect(Net::Connection *connection, const std::string &token); + void connect(Connection *connection, const std::string &token); void logout(bool reconnectAccount); } } -#endif +#endif // NET_MANASERV_GAMESERVER_GAMESERVER_H diff --git a/src/net/manaserv/gameserver/internal.cpp b/src/net/manaserv/gameserver/internal.cpp index 27cb4a47..e998ced9 100644 --- a/src/net/manaserv/gameserver/internal.cpp +++ b/src/net/manaserv/gameserver/internal.cpp @@ -21,7 +21,7 @@ #include "internal.h" -namespace Net +namespace ManaServ { class Connection; diff --git a/src/net/manaserv/gameserver/internal.h b/src/net/manaserv/gameserver/internal.h index 6c6e2613..44cd3be2 100644 --- a/src/net/manaserv/gameserver/internal.h +++ b/src/net/manaserv/gameserver/internal.h @@ -19,10 +19,10 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef NET_GAMESERVER_INTERNAL_H -#define NET_GAMESERVER_INTERNAL_H +#ifndef NET_MANASERV_GAMESERVER_INTERNAL_H +#define NET_MANASERV_GAMESERVER_INTERNAL_H -namespace Net +namespace ManaServ { class Connection; @@ -32,4 +32,4 @@ namespace Net } } -#endif +#endif // NET_MANASERV_GAMESERVER_INTERNAL_H diff --git a/src/net/manaserv/gameserver/player.cpp b/src/net/manaserv/gameserver/player.cpp index e667c8b9..6fa146d4 100644 --- a/src/net/manaserv/gameserver/player.cpp +++ b/src/net/manaserv/gameserver/player.cpp @@ -24,34 +24,38 @@ #include "internal.h" #include "net/manaserv/connection.h" +#include "net/manaserv/messageout.h" #include "net/manaserv/protocol.h" -#include "net/messageout.h" - void RespawnRequestListener::action(const gcn::ActionEvent &event) { - Net::GameServer::Player::respawn(); + ManaServ::GameServer::Player::respawn(); } -void Net::GameServer::Player::walk(int x, int y) +namespace ManaServ +{ + +void GameServer::Player::walk(int x, int y) { MessageOut msg(PGMSG_WALK); msg.writeInt16(x); msg.writeInt16(y); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); } -void Net::GameServer::Player::moveItem(int oldSlot, int newSlot, int amount) +void GameServer::Player::moveItem(int oldSlot, int newSlot, int amount) { MessageOut msg(PGMSG_MOVE_ITEM); msg.writeInt8(oldSlot); msg.writeInt8(newSlot); msg.writeInt8(amount); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); } -void Net::GameServer::Player::respawn() +void GameServer::Player::respawn() { MessageOut msg(PGMSG_RESPAWN); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); +} + } diff --git a/src/net/manaserv/gameserver/player.h b/src/net/manaserv/gameserver/player.h index 9a202c6e..40ba4b2b 100644 --- a/src/net/manaserv/gameserver/player.h +++ b/src/net/manaserv/gameserver/player.h @@ -19,8 +19,8 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef NET_GAMESERVER_PLAYER_H -#define NET_GAMESERVER_PLAYER_H +#ifndef NET_MANASERV_GAMESERVER_PLAYER_H +#define NET_MANASERV_GAMESERVER_PLAYER_H #include "being.h" @@ -34,7 +34,7 @@ struct RespawnRequestListener : public gcn::ActionListener void action(const gcn::ActionEvent &event); }; -namespace Net +namespace ManaServ { namespace GameServer { @@ -48,4 +48,4 @@ namespace Net } } -#endif +#endif // NET_MANASERV_GAMESERVER_PLAYER_H diff --git a/src/net/manaserv/generalhandler.cpp b/src/net/manaserv/generalhandler.cpp index 0b2eefe2..db1d9013 100644 --- a/src/net/manaserv/generalhandler.cpp +++ b/src/net/manaserv/generalhandler.cpp @@ -57,12 +57,11 @@ Net::GeneralHandler *generalHandler = NULL; -Net::Connection *gameServerConnection = 0; -Net::Connection *chatServerConnection = 0; -Net::Connection *accountServerConnection = 0; - namespace ManaServ { +Connection *accountServerConnection = 0; +Connection *chatServerConnection = 0; +Connection *gameServerConnection = 0; std::string netToken = ""; ServerInfo gameServer; ServerInfo chatServer; @@ -84,11 +83,11 @@ GeneralHandler::GeneralHandler(): mTradeHandler(new TradeHandler), mSpecialHandler(new SpecialHandler) { - Net::initialize(); + initialize(); - accountServerConnection = Net::getConnection(); - gameServerConnection = Net::getConnection(); - chatServerConnection = Net::getConnection(); + accountServerConnection = getConnection(); + gameServerConnection = getConnection(); + chatServerConnection = getConnection(); generalHandler = this; @@ -105,20 +104,20 @@ GeneralHandler::GeneralHandler(): void GeneralHandler::load() { - Net::registerHandler(mBeingHandler.get()); - Net::registerHandler(mBuySellHandler.get()); - Net::registerHandler(mCharHandler.get()); - Net::registerHandler(mChatHandler.get()); - Net::registerHandler(mEffectHandler.get()); - Net::registerHandler(mGameHandler.get()); - Net::registerHandler(mGuildHandler.get()); - Net::registerHandler(mInventoryHandler.get()); - Net::registerHandler(mItemHandler.get()); - Net::registerHandler(mLoginHandler.get()); - Net::registerHandler(mNpcHandler.get()); - Net::registerHandler(mPartyHandler.get()); - Net::registerHandler(mPlayerHandler.get()); - Net::registerHandler(mTradeHandler.get()); + registerHandler(mBeingHandler.get()); + registerHandler(mBuySellHandler.get()); + registerHandler(mCharHandler.get()); + registerHandler(mChatHandler.get()); + registerHandler(mEffectHandler.get()); + registerHandler(mGameHandler.get()); + registerHandler(mGuildHandler.get()); + registerHandler(mInventoryHandler.get()); + registerHandler(mItemHandler.get()); + registerHandler(mLoginHandler.get()); + registerHandler(mNpcHandler.get()); + registerHandler(mPartyHandler.get()); + registerHandler(mPlayerHandler.get()); + registerHandler(mTradeHandler.get()); } void GeneralHandler::reload() @@ -128,7 +127,7 @@ void GeneralHandler::reload() void GeneralHandler::unload() { - Net::clearHandlers(); + clearHandlers(); if (accountServerConnection) accountServerConnection->disconnect(); @@ -141,12 +140,12 @@ void GeneralHandler::unload() delete gameServerConnection; delete chatServerConnection; - Net::finalize(); + finalize(); } void GeneralHandler::flushNetwork() { - Net::flush(); + flush(); } bool GeneralHandler::isNetworkConnected() @@ -184,7 +183,7 @@ void GeneralHandler::guiWindowsUnloaded() void GeneralHandler::clearHandlers() { - Net::clearHandlers(); + clearHandlers(); } } // namespace ManaServ diff --git a/src/net/manaserv/generalhandler.h b/src/net/manaserv/generalhandler.h index 0017af75..a1010d32 100644 --- a/src/net/manaserv/generalhandler.h +++ b/src/net/manaserv/generalhandler.h @@ -24,7 +24,8 @@ #include "net/generalhandler.h" #include "net/net.h" -#include "net/messagehandler.h" + +#include "net/manaserv/messagehandler.h" namespace ManaServ { diff --git a/src/net/manaserv/guildhandler.cpp b/src/net/manaserv/guildhandler.cpp index 876de413..9cdc1c72 100644 --- a/src/net/manaserv/guildhandler.cpp +++ b/src/net/manaserv/guildhandler.cpp @@ -61,7 +61,7 @@ GuildHandler::GuildHandler() } -void GuildHandler::handleMessage(MessageIn &msg) +void GuildHandler::handleMessage(Net::MessageIn &msg) { switch (msg.getId()) { @@ -229,7 +229,7 @@ void GuildHandler::handleMessage(MessageIn &msg) } } -void GuildHandler::joinedGuild(MessageIn &msg) +void GuildHandler::joinedGuild(Net::MessageIn &msg) { std::string guildName = msg.readString(); short guildId = msg.readInt16(); diff --git a/src/net/manaserv/guildhandler.h b/src/net/manaserv/guildhandler.h index d1b57e50..edf5eb8f 100644 --- a/src/net/manaserv/guildhandler.h +++ b/src/net/manaserv/guildhandler.h @@ -22,7 +22,7 @@ #ifndef NET_MANASERV_GUILDHANDLER_H #define NET_MANASERV_GUILDHANDLER_H -#include "net/messagehandler.h" +#include "net/manaserv/messagehandler.h" #include <string> @@ -33,10 +33,10 @@ class GuildHandler : public MessageHandler public: GuildHandler(); - void handleMessage(MessageIn &msg); + void handleMessage(Net::MessageIn &msg); protected: - void joinedGuild(MessageIn &msg); + void joinedGuild(Net::MessageIn &msg); }; } // namespace ManaServ diff --git a/src/net/manaserv/internal.cpp b/src/net/manaserv/internal.cpp index 055ce7f2..696bcfc9 100644 --- a/src/net/manaserv/internal.cpp +++ b/src/net/manaserv/internal.cpp @@ -21,7 +21,7 @@ #include "net/manaserv/internal.h" -namespace Net +namespace ManaServ { int connections = 0; } diff --git a/src/net/manaserv/internal.h b/src/net/manaserv/internal.h index 582e4c17..b112159b 100644 --- a/src/net/manaserv/internal.h +++ b/src/net/manaserv/internal.h @@ -22,7 +22,7 @@ #ifndef NET_MANASERV_INTERNAL_H #define NET_MANASERV_INTERNAL_H -namespace Net +namespace ManaServ { extern int connections; } diff --git a/src/net/manaserv/inventoryhandler.cpp b/src/net/manaserv/inventoryhandler.cpp index 6074c8d7..e4fe0ecc 100644 --- a/src/net/manaserv/inventoryhandler.cpp +++ b/src/net/manaserv/inventoryhandler.cpp @@ -22,14 +22,13 @@ #include "net/manaserv/inventoryhandler.h" #include "net/manaserv/connection.h" +#include "net/manaserv/messagein.h" +#include "net/manaserv/messageout.h" #include "net/manaserv/protocol.h" #include "net/manaserv/gameserver/internal.h" #include "net/manaserv/gameserver/player.h" -#include "net/messagein.h" -#include "net/messageout.h" - #include "equipment.h" #include "inventory.h" #include "item.h" @@ -57,7 +56,7 @@ InventoryHandler::InventoryHandler() inventoryHandler = this; } -void InventoryHandler::handleMessage(MessageIn &msg) +void InventoryHandler::handleMessage(Net::MessageIn &msg) { switch (msg.getId()) { @@ -80,7 +79,7 @@ void InventoryHandler::handleMessage(MessageIn &msg) { player_node->mEquipment->setEquipment(slot, id); } - else if (slot >= 32 && slot < 32 + INVENTORY_SIZE) + else if (slot >= 32 && slot < 32 + getInventorySize()) { int amount = id ? msg.readInt8() : 0; player_node->setInvItem(slot - 32, id, amount); @@ -94,14 +93,14 @@ void InventoryHandler::equipItem(const Item *item) { MessageOut msg(PGMSG_EQUIP); msg.writeInt8(item->getInvIndex()); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); } void InventoryHandler::unequipItem(const Item *item) { MessageOut msg(PGMSG_UNEQUIP); msg.writeInt8(item->getInvIndex()); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); // Tidy equipment directly to avoid weapon still shown bug, for instance int equipSlot = item->getInvIndex(); @@ -113,7 +112,7 @@ void InventoryHandler::useItem(const Item *item) { MessageOut msg(PGMSG_USE_ITEM); msg.writeInt8(item->getInvIndex()); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); } void InventoryHandler::dropItem(const Item *item, int amount) @@ -121,7 +120,7 @@ void InventoryHandler::dropItem(const Item *item, int amount) MessageOut msg(PGMSG_DROP); msg.writeInt8(item->getInvIndex()); msg.writeInt8(amount); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); } bool InventoryHandler::canSplit(const Item *item) @@ -134,8 +133,7 @@ void InventoryHandler::splitItem(const Item *item, int amount) int newIndex = player_node->getInventory()->getFreeSlot(); if (newIndex > Inventory::NO_SLOT_INDEX) { - Net::GameServer::Player::moveItem( - item->getInvIndex(), newIndex, amount); + GameServer::Player::moveItem(item->getInvIndex(), newIndex, amount); } } @@ -144,7 +142,7 @@ void InventoryHandler::moveItem(int oldIndex, int newIndex) if (oldIndex == newIndex) return; - Net::GameServer::Player::moveItem(oldIndex, newIndex, + GameServer::Player::moveItem(oldIndex, newIndex, player_node->getInventory()->getItem(oldIndex)->getQuantity()); } @@ -164,4 +162,14 @@ void InventoryHandler::moveItem(StorageType source, int slot, int amount, // TODO } +size_t InventoryHandler::getInventorySize() const +{ + return 50; +} + +size_t InventoryHandler::getStorageSize() const +{ + return 300; +} + } // namespace ManaServ diff --git a/src/net/manaserv/inventoryhandler.h b/src/net/manaserv/inventoryhandler.h index b6510d6a..1f937df9 100644 --- a/src/net/manaserv/inventoryhandler.h +++ b/src/net/manaserv/inventoryhandler.h @@ -23,7 +23,8 @@ #define NET_MANASERV_INVENTORYHANDLER_H #include "net/inventoryhandler.h" -#include "net/messagehandler.h" + +#include "net/manaserv/messagehandler.h" namespace ManaServ { @@ -32,7 +33,7 @@ class InventoryHandler : public MessageHandler, Net::InventoryHandler public: InventoryHandler(); - void handleMessage(MessageIn &msg); + void handleMessage(Net::MessageIn &msg); void equipItem(const Item *item); @@ -54,8 +55,12 @@ class InventoryHandler : public MessageHandler, Net::InventoryHandler void moveItem(StorageType source, int slot, int amount, StorageType destination); + + size_t getInventorySize() const; + + size_t getStorageSize() const; }; } // namespace ManaServ -#endif +#endif // NET_MANASERV_INVENTORYHANDLER_H diff --git a/src/net/manaserv/itemhandler.cpp b/src/net/manaserv/itemhandler.cpp index 6f25d7df..c63eb5bd 100644 --- a/src/net/manaserv/itemhandler.cpp +++ b/src/net/manaserv/itemhandler.cpp @@ -23,7 +23,7 @@ #include "net/manaserv/protocol.h" -#include "net/messagein.h" +#include "net/manaserv/messagein.h" #include "engine.h" #include "flooritemmanager.h" @@ -40,7 +40,7 @@ ItemHandler::ItemHandler() handledMessages = _messages; } -void ItemHandler::handleMessage(MessageIn &msg) +void ItemHandler::handleMessage(Net::MessageIn &msg) { switch (msg.getId()) { diff --git a/src/net/manaserv/itemhandler.h b/src/net/manaserv/itemhandler.h index fde3000d..26334361 100644 --- a/src/net/manaserv/itemhandler.h +++ b/src/net/manaserv/itemhandler.h @@ -22,7 +22,7 @@ #ifndef NET_MANASERV_ITEMHANDLER_H #define NET_MANASERV_ITEMHANDLER_H -#include "net/messagehandler.h" +#include "net/manaserv/messagehandler.h" namespace ManaServ { @@ -31,9 +31,9 @@ class ItemHandler : public MessageHandler public: ItemHandler(); - void handleMessage(MessageIn &msg); + void handleMessage(Net::MessageIn &msg); }; } // namespace ManaServ -#endif +#endif // NET_MANASERV_ITEMHANDLER_H diff --git a/src/net/manaserv/loginhandler.cpp b/src/net/manaserv/loginhandler.cpp index 8ae63ce9..d753d8d1 100644 --- a/src/net/manaserv/loginhandler.cpp +++ b/src/net/manaserv/loginhandler.cpp @@ -22,13 +22,13 @@ #include "net/manaserv/loginhandler.h" #include "net/manaserv/connection.h" +#include "net/manaserv/messagein.h" #include "net/manaserv/protocol.h" #include "net/manaserv/accountserver/account.h" #include "net/manaserv/accountserver/accountserver.h" #include "net/logindata.h" -#include "net/messagein.h" #include "main.h" @@ -36,10 +36,11 @@ Net::LoginHandler *loginHandler; -extern Net::Connection *accountServerConnection; namespace ManaServ { +extern Connection *accountServerConnection; + LoginHandler::LoginHandler() { static const Uint16 _messages[] = { @@ -56,7 +57,7 @@ LoginHandler::LoginHandler() loginHandler = this; } -void LoginHandler::handleMessage(MessageIn &msg) +void LoginHandler::handleMessage(Net::MessageIn &msg) { switch (msg.getId()) { @@ -209,7 +210,7 @@ void LoginHandler::handleMessage(MessageIn &msg) } } -void LoginHandler::handleLoginResponse(MessageIn &msg) +void LoginHandler::handleLoginResponse(Net::MessageIn &msg) { const int errMsg = msg.readInt8(); @@ -246,7 +247,7 @@ void LoginHandler::handleLoginResponse(MessageIn &msg) } } -void LoginHandler::handleRegisterResponse(MessageIn &msg) +void LoginHandler::handleRegisterResponse(Net::MessageIn &msg) { const int errMsg = msg.readInt8(); @@ -278,7 +279,7 @@ void LoginHandler::handleRegisterResponse(MessageIn &msg) } } -void LoginHandler::readUpdateHost(MessageIn &msg) +void LoginHandler::readUpdateHost(Net::MessageIn &msg) { // Set the update host when included in the message if (msg.getUnreadLength() > 0) @@ -290,8 +291,6 @@ void LoginHandler::readUpdateHost(MessageIn &msg) void LoginHandler::connect() { accountServerConnection->connect(mServer.hostname, mServer.port); - /*if (state == STATE_CONNECT_SERVER) - state = STATE_LOGIN;*/ } bool LoginHandler::isConnected() @@ -307,7 +306,7 @@ void LoginHandler::disconnect() void LoginHandler::loginAccount(LoginData *loginData) { mLoginData = loginData; - Net::AccountServer::login(accountServerConnection, + AccountServer::login(accountServerConnection, 0, // client version loginData->username, loginData->password); @@ -320,15 +319,14 @@ void LoginHandler::logout() void LoginHandler::changeEmail(const std::string &email) { - Net::AccountServer::Account::changeEmail(email); + AccountServer::Account::changeEmail(email); } void LoginHandler::changePassword(const std::string &username, const std::string &oldPassword, const std::string &newPassword) { - Net::AccountServer::Account::changePassword(username, oldPassword, - newPassword); + AccountServer::Account::changePassword(username, oldPassword, newPassword); } void LoginHandler::chooseServer(unsigned int server) @@ -338,7 +336,7 @@ void LoginHandler::chooseServer(unsigned int server) void LoginHandler::registerAccount(LoginData *loginData) { - Net::AccountServer::registerAccount(accountServerConnection, + AccountServer::registerAccount(accountServerConnection, 0, // client version loginData->username, loginData->password, @@ -348,7 +346,7 @@ void LoginHandler::registerAccount(LoginData *loginData) void LoginHandler::unregisterAccount(const std::string &username, const std::string &password) { - Net::AccountServer::Account::unregister(username, password); + AccountServer::Account::unregister(username, password); } Worlds LoginHandler::getWorlds() const diff --git a/src/net/manaserv/loginhandler.h b/src/net/manaserv/loginhandler.h index f5013fc2..14c14a53 100644 --- a/src/net/manaserv/loginhandler.h +++ b/src/net/manaserv/loginhandler.h @@ -23,10 +23,10 @@ #define NET_MANASERV_LOGINHANDLER_H #include "net/loginhandler.h" -#include "net/messagehandler.h" - #include "net/serverinfo.h" +#include "net/manaserv/messagehandler.h" + class LoginData; namespace ManaServ { @@ -36,7 +36,7 @@ class LoginHandler : public MessageHandler, public Net::LoginHandler public: LoginHandler(); - void handleMessage(MessageIn &msg); + void handleMessage(Net::MessageIn &msg); void connect(); @@ -71,10 +71,10 @@ class LoginHandler : public MessageHandler, public Net::LoginHandler Worlds getWorlds() const; private: - void handleLoginResponse(MessageIn &msg); - void handleRegisterResponse(MessageIn &msg); + void handleLoginResponse(Net::MessageIn &msg); + void handleRegisterResponse(Net::MessageIn &msg); - void readUpdateHost(MessageIn &msg); + void readUpdateHost(Net::MessageIn &msg); LoginData *mLoginData; }; diff --git a/src/net/manaserv/messagehandler.cpp b/src/net/manaserv/messagehandler.cpp new file mode 100644 index 00000000..19bb36c4 --- /dev/null +++ b/src/net/manaserv/messagehandler.cpp @@ -0,0 +1,35 @@ +/* + * The Mana World + * Copyright (C) 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "net/manaserv/messagehandler.h" + +#include "net/manaserv/network.h" + +#include <cassert> + +namespace ManaServ { + +MessageHandler::~MessageHandler() +{ + unregisterHandler(this); +} + +} diff --git a/src/net/manaserv/messagehandler.h b/src/net/manaserv/messagehandler.h new file mode 100644 index 00000000..9579327f --- /dev/null +++ b/src/net/manaserv/messagehandler.h @@ -0,0 +1,43 @@ +/* + * The Mana World + * Copyright (C) 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef NET_MANASERV_MESSAGEHANDLER_H +#define NET_MANASERV_MESSAGEHANDLER_H + +#include "net/messagehandler.h" + +namespace ManaServ { + +/** + * \ingroup Network + */ +class MessageHandler : public Net::MessageHandler +{ + public: + ~MessageHandler(); + +}; + +typedef const std::auto_ptr<MessageHandler> MessageHandlerPtr; + +} + +#endif // NET_MANASERV_MESSAGEHANDLER_H diff --git a/src/net/manaserv/messagein.cpp b/src/net/manaserv/messagein.cpp new file mode 100644 index 00000000..8a7053f8 --- /dev/null +++ b/src/net/manaserv/messagein.cpp @@ -0,0 +1,65 @@ +/* + * The Mana World + * Copyright (C) 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "net/manaserv/messagein.h" + +#include <enet/enet.h> + +#define MAKEWORD(low,high) \ + ((unsigned short)(((unsigned char)(low)) | \ + ((unsigned short)((unsigned char)(high))) << 8)) + +namespace ManaServ { + +MessageIn::MessageIn(const char *data, unsigned int length): + Net::MessageIn(data, length) +{ + // Read the message ID + mId = readInt16(); +} + +int MessageIn::readInt16() +{ + int value = -1; + if (mPos + 2 <= mLength) + { + uint16_t t; + memcpy(&t, mData + mPos, 2); + value = (unsigned short) ENET_NET_TO_HOST_16(t); + } + mPos += 2; + return value; +} + +int MessageIn::readInt32() +{ + int value = -1; + if (mPos + 4 <= mLength) + { + uint32_t t; + memcpy(&t, mData + mPos, 4); + value = ENET_NET_TO_HOST_32(t); + } + mPos += 4; + return value; +} + +} diff --git a/src/net/manaserv/messagein.h b/src/net/manaserv/messagein.h new file mode 100644 index 00000000..8fb83767 --- /dev/null +++ b/src/net/manaserv/messagein.h @@ -0,0 +1,48 @@ +/* + * The Mana World + * Copyright (C) 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef NET_MANASERV_MESSAGEIN_H +#define NET_MANASERV_MESSAGEIN_H + +#include "net/messagein.h" + +namespace ManaServ { + +/** + * Used for parsing an incoming message. + * + * \ingroup Network + */ +class MessageIn : public Net::MessageIn +{ + public: + /** + * Constructor. + */ + MessageIn(const char *data, unsigned int length); + + int readInt16(); /**< Reads a short. */ + int readInt32(); /**< Reads a long. */ +}; + +} + +#endif // NET_MANASERV_MESSAGEIN_H diff --git a/src/net/manaserv/messageout.cpp b/src/net/manaserv/messageout.cpp new file mode 100644 index 00000000..8d39fe06 --- /dev/null +++ b/src/net/manaserv/messageout.cpp @@ -0,0 +1,64 @@ +/* + * The Mana World + * Copyright (C) 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "net/manaserv/messageout.h" + +#include <enet/enet.h> + +#include <cstring> +#include <string> + +namespace ManaServ { + +MessageOut::MessageOut(short id): + Net::MessageOut(id) +{ + writeInt16(id); +} + +MessageOut::~MessageOut() +{ + free(mData); +} + +void MessageOut::expand(size_t bytes) +{ + mData = (char*)realloc(mData, mPos + bytes); + mDataSize = mPos + bytes; +} + +void MessageOut::writeInt16(Sint16 value) +{ + expand(2); + uint16_t t = ENET_HOST_TO_NET_16(value); + memcpy(mData + mPos, &t, 2); + mPos += 2; +} + +void MessageOut::writeInt32(Sint32 value) +{ + expand(4); + uint32_t t = ENET_HOST_TO_NET_32(value); + memcpy(mData + mPos, &t, 4); + mPos += 4; +} + +} diff --git a/src/net/manaserv/messageout.h b/src/net/manaserv/messageout.h new file mode 100644 index 00000000..aedf9c37 --- /dev/null +++ b/src/net/manaserv/messageout.h @@ -0,0 +1,58 @@ +/* + * The Mana World + * Copyright (C) 2004 The Mana World Development Team + * + * This file is part of The Mana World. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef NET_MANASERV_MESSAGEOUT_H +#define NET_MANASERV_MESSAGEOUT_H + +#include "net/messageout.h" + +namespace ManaServ { + +class MessageOut : public Net::MessageOut +{ + public: + /** + * Constructor. + */ + MessageOut(short id); + + /** + * Destructor. + */ + ~MessageOut(); + + void writeInt16(Sint16 value); /**< Writes a short. */ + void writeInt32(Sint32 value); /**< Writes a long. */ + + protected: + /** + * Expand the packet data to be able to hold more data. + * + * NOTE: For performance enhancements this method could allocate extra + * memory in advance instead of expanding size every time more data is + * added. + */ + void expand(size_t size); +}; + +} + +#endif // NET_MANASERV_MESSAGEOUT_H diff --git a/src/net/manaserv/network.cpp b/src/net/manaserv/network.cpp index 84b9d070..91a7ed6a 100644 --- a/src/net/manaserv/network.cpp +++ b/src/net/manaserv/network.cpp @@ -23,9 +23,8 @@ #include "net/manaserv/connection.h" #include "net/manaserv/internal.h" - -#include "net/messagehandler.h" -#include "net/messagein.h" +#include "net/manaserv/messagehandler.h" +#include "net/manaserv/messagein.h" #include "log.h" @@ -40,11 +39,14 @@ namespace { ENetHost *client; } +namespace ManaServ +{ + typedef std::map<unsigned short, MessageHandler*> MessageHandlers; typedef MessageHandlers::iterator MessageHandlerIterator; static MessageHandlers mMessageHandlers; -void Net::initialize() +void initialize() { if (enet_initialize()) { @@ -59,12 +61,12 @@ void Net::initialize() } } -void Net::finalize() +void finalize() { if (!client) return; // Wasn't initialized at all - if (Net::connections) { + if (connections) { logger->error("Tried to shutdown the network subsystem while there " "are network connections left!"); } @@ -73,7 +75,7 @@ void Net::finalize() enet_deinitialize(); } -Net::Connection *Net::getConnection() +Connection *getConnection() { if (!client) { @@ -81,10 +83,10 @@ Net::Connection *Net::getConnection() "initializing the network subsystem!"); } - return new Net::Connection(client); + return new Connection(client); } -void Net::registerHandler(MessageHandler *handler) +void registerHandler(MessageHandler *handler) { for (const Uint16 *i = handler->handledMessages; *i; i++) { @@ -92,7 +94,7 @@ void Net::registerHandler(MessageHandler *handler) } } -void Net::unregisterHandler(MessageHandler *handler) +void unregisterHandler(MessageHandler *handler) { for (const Uint16 *i = handler->handledMessages; *i; i++) { @@ -100,7 +102,7 @@ void Net::unregisterHandler(MessageHandler *handler) } } -void Net::clearHandlers() +void clearHandlers() { mMessageHandlers.clear(); } @@ -133,7 +135,7 @@ namespace } } -void Net::flush() +void flush() { ENetEvent event; @@ -168,3 +170,5 @@ void Net::flush() } } } + +} diff --git a/src/net/manaserv/network.h b/src/net/manaserv/network.h index 8b7cedd8..9960f672 100644 --- a/src/net/manaserv/network.h +++ b/src/net/manaserv/network.h @@ -25,17 +25,13 @@ #include <iosfwd> /** - * \defgroup Network Core network layer - */ - -class MessageHandler; -class MessageOut; - -/** * \ingroup Network */ -namespace Net +namespace ManaServ { + class MessageHandler; + class MessageOut; + class Connection; /** @@ -74,6 +70,6 @@ namespace Net * registered handlers */ void flush(); -} +} // namespace ManaServ #endif diff --git a/src/net/manaserv/npchandler.cpp b/src/net/manaserv/npchandler.cpp index 2f1a8e4a..7384d18e 100644 --- a/src/net/manaserv/npchandler.cpp +++ b/src/net/manaserv/npchandler.cpp @@ -22,14 +22,13 @@ #include "net/manaserv/npchandler.h" #include "net/manaserv/connection.h" +#include "net/manaserv/messagein.h" +#include "net/manaserv/messageout.h" #include "net/manaserv/protocol.h" #include "net/manaserv/gameserver/internal.h" #include "net/manaserv/gameserver/player.h" -#include "net/messagein.h" -#include "net/messageout.h" - #include "beingmanager.h" #include "npc.h" @@ -56,7 +55,7 @@ NpcHandler::NpcHandler() npcHandler = this; } -void NpcHandler::handleMessage(MessageIn &msg) +void NpcHandler::handleMessage(Net::MessageIn &msg) { Being *being = beingManager->findBeing(msg.readInt16()); if (!being || being->getType() != Being::NPC) @@ -115,21 +114,21 @@ void NpcHandler::talk(int npcId) { MessageOut msg(PGMSG_NPC_TALK); msg.writeInt16(npcId); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); } void NpcHandler::nextDialog(int npcId) { MessageOut msg(PGMSG_NPC_TALK_NEXT); msg.writeInt16(npcId); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); } void NpcHandler::closeDialog(int npcId) { MessageOut msg(PGMSG_NPC_TALK_NEXT); msg.writeInt16(npcId); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); npcDialog->setVisible(false); npcDialog->setText(""); } @@ -139,7 +138,7 @@ void NpcHandler::listInput(int npcId, int value) MessageOut msg(PGMSG_NPC_SELECT); msg.writeInt16(npcId); msg.writeInt8(value); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); } void NpcHandler::integerInput(int npcId, int value) @@ -147,7 +146,7 @@ void NpcHandler::integerInput(int npcId, int value) MessageOut msg(PGMSG_NPC_NUMBER); msg.writeInt16(npcId); msg.writeInt32(value); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); } void NpcHandler::stringInput(int npcId, const std::string &value) @@ -155,7 +154,7 @@ void NpcHandler::stringInput(int npcId, const std::string &value) MessageOut msg(PGMSG_NPC_STRING); msg.writeInt16(npcId); msg.writeString(value); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); } void NpcHandler::sendLetter(int npcId, const std::string &recipient, @@ -164,7 +163,7 @@ void NpcHandler::sendLetter(int npcId, const std::string &recipient, MessageOut msg(PGMSG_NPC_POST_SEND); msg.writeString(recipient); msg.writeString(text); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); } void NpcHandler::startShopping(int beingId) @@ -187,7 +186,7 @@ void NpcHandler::buyItem(int beingId, int itemId, int amount) MessageOut msg(PGMSG_NPC_BUYSELL); msg.writeInt16(itemId); msg.writeInt16(amount); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); } void NpcHandler::sellItem(int beingId, int itemId, int amount) @@ -195,7 +194,7 @@ void NpcHandler::sellItem(int beingId, int itemId, int amount) MessageOut msg(PGMSG_NPC_BUYSELL); msg.writeInt16(itemId); msg.writeInt16(amount); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); } void NpcHandler::endShopping(int beingId) diff --git a/src/net/manaserv/npchandler.h b/src/net/manaserv/npchandler.h index bc0aaee1..b1912ce3 100644 --- a/src/net/manaserv/npchandler.h +++ b/src/net/manaserv/npchandler.h @@ -22,9 +22,10 @@ #ifndef NET_MANASERV_NPCHANDLER_H #define NET_MANASERV_NPCHANDLER_H -#include "net/messagehandler.h" #include "net/npchandler.h" +#include "net/manaserv/messagehandler.h" + #include <list> namespace ManaServ { @@ -34,7 +35,7 @@ class NpcHandler : public MessageHandler, public Net::NpcHandler public: NpcHandler(); - void handleMessage(MessageIn &msg); + void handleMessage(Net::MessageIn &msg); void talk(int npcId); @@ -66,4 +67,4 @@ class NpcHandler : public MessageHandler, public Net::NpcHandler } // namespace ManaServ -#endif +#endif // NET_MANASERV_NPCHANDLER_H diff --git a/src/net/manaserv/partyhandler.cpp b/src/net/manaserv/partyhandler.cpp index 9f20f027..ea968649 100644 --- a/src/net/manaserv/partyhandler.cpp +++ b/src/net/manaserv/partyhandler.cpp @@ -22,12 +22,12 @@ #include "net/manaserv/partyhandler.h" #include "net/manaserv/protocol.h" +#include "net/manaserv/messagein.h" +#include "net/manaserv/messageout.h" #include "net/manaserv/chatserver/chatserver.h" #include "net/manaserv/chatserver/party.h" -#include "net/messagein.h" - #include "gui/partywindow.h" #include "gui/widgets/chattab.h" @@ -60,7 +60,7 @@ PartyHandler::PartyHandler() partyHandler = this; } -void PartyHandler::handleMessage(MessageIn &msg) +void PartyHandler::handleMessage(Net::MessageIn &msg) { switch (msg.getId()) { @@ -140,20 +140,20 @@ void PartyHandler::invite(Player *player) void PartyHandler::invite(const std::string &name) { - Net::ChatServer::Party::invitePlayer(name); + ChatServer::Party::invitePlayer(name); } void PartyHandler::inviteResponse(const std::string &inviter, bool accept) { if (accept) - Net::ChatServer::Party::acceptInvite(inviter); + ChatServer::Party::acceptInvite(inviter); else - Net::ChatServer::Party::rejectInvite(inviter); + ChatServer::Party::rejectInvite(inviter); } void PartyHandler::leave() { - Net::ChatServer::Party::quitParty(); + ChatServer::Party::quitParty(); } void PartyHandler::kick(Player *player) diff --git a/src/net/manaserv/partyhandler.h b/src/net/manaserv/partyhandler.h index c44f7ace..eee17f10 100644 --- a/src/net/manaserv/partyhandler.h +++ b/src/net/manaserv/partyhandler.h @@ -22,9 +22,10 @@ #ifndef NET_MANASERV_PARTYHANDLER_H #define NET_MANASERV_PARTYHANDLER_H -#include "net/messagehandler.h" #include "net/partyhandler.h" +#include "net/manaserv/messagehandler.h" + #include <string> namespace ManaServ { @@ -34,7 +35,7 @@ class PartyHandler : public MessageHandler, public Net::PartyHandler public: PartyHandler(); - void handleMessage(MessageIn &msg); + void handleMessage(Net::MessageIn &msg); void create(const std::string &name = ""); @@ -67,5 +68,4 @@ public: } // namespace ManaServ -#endif - +#endif // NET_MANASERV_PARTYHANDLER_H diff --git a/src/net/manaserv/playerhandler.cpp b/src/net/manaserv/playerhandler.cpp index 91ff6a1c..fabf7c25 100644 --- a/src/net/manaserv/playerhandler.cpp +++ b/src/net/manaserv/playerhandler.cpp @@ -22,13 +22,13 @@ #include "net/manaserv/playerhandler.h" #include "net/manaserv/connection.h" +#include "net/manaserv/messagein.h" +#include "net/manaserv/messageout.h" #include "net/manaserv/protocol.h" #include "net/manaserv/gameserver/internal.h" #include "net/manaserv/gameserver/player.h" -#include "net/messagein.h" -#include "net/messageout.h" #include "net/net.h" #include "effectmanager.h" @@ -112,7 +112,7 @@ PlayerHandler::PlayerHandler() playerHandler = this; } -void PlayerHandler::handleMessage(MessageIn &msg) +void PlayerHandler::handleMessage(Net::MessageIn &msg) { switch (msg.getId()) { @@ -289,7 +289,7 @@ void PlayerHandler::handleMessage(MessageIn &msg) } } -void PlayerHandler::handleMapChangeMessage(MessageIn &msg) +void PlayerHandler::handleMapChangeMessage(Net::MessageIn &msg) { const std::string mapName = msg.readString(); const unsigned short x = msg.readInt16(); @@ -328,7 +328,7 @@ void PlayerHandler::attack(int id) { MessageOut msg(PGMSG_ATTACK); msg.writeInt16(id); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); } void PlayerHandler::emote(int emoteId) @@ -340,14 +340,14 @@ void PlayerHandler::increaseAttribute(size_t attr) { MessageOut msg(PGMSG_RAISE_ATTRIBUTE); msg.writeInt8(attr); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); } void PlayerHandler::decreaseAttribute(size_t attr) { MessageOut msg(PGMSG_LOWER_ATTRIBUTE); msg.writeInt8(attr); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); } void PlayerHandler::increaseSkill(int skillId) @@ -361,14 +361,14 @@ void PlayerHandler::pickUp(FloorItem *floorItem) MessageOut msg(PGMSG_PICKUP); msg.writeInt16(id >> 16); msg.writeInt16(id & 0xFFFF); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); } void PlayerHandler::setDirection(char direction) { MessageOut msg(PGMSG_DIRECTION_CHANGE); msg.writeInt8(direction); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); } void PlayerHandler::setDestination(int x, int y, int /* direction */) @@ -376,7 +376,7 @@ void PlayerHandler::setDestination(int x, int y, int /* direction */) MessageOut msg(PGMSG_WALK); msg.writeInt16(x); msg.writeInt16(y); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); } void PlayerHandler::changeAction(Being::Action action) @@ -385,7 +385,7 @@ void PlayerHandler::changeAction(Being::Action action) MessageOut msg(PGMSG_ACTION_CHANGE); msg.writeInt8(action); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); } void PlayerHandler::respawn() @@ -408,4 +408,14 @@ bool PlayerHandler::canUseMagic() return true; } +bool PlayerHandler::canCorrectAttributes() +{ + return true; +} + +int PlayerHandler::getJobLocation() +{ + return -1; +} + } // namespace ManaServ diff --git a/src/net/manaserv/playerhandler.h b/src/net/manaserv/playerhandler.h index 1dd600c8..926f05dd 100644 --- a/src/net/manaserv/playerhandler.h +++ b/src/net/manaserv/playerhandler.h @@ -22,9 +22,10 @@ #ifndef NET_MANASERV_PLAYERHANDLER_H #define NET_MANASERV_PLAYERHANDLER_H -#include "net/messagehandler.h" #include "net/playerhandler.h" +#include "net/manaserv/messagehandler.h" + namespace ManaServ { class PlayerHandler : public MessageHandler, public Net::PlayerHandler @@ -32,7 +33,7 @@ class PlayerHandler : public MessageHandler, public Net::PlayerHandler public: PlayerHandler(); - void handleMessage(MessageIn &msg); + void handleMessage(Net::MessageIn &msg); void attack(int id); @@ -60,10 +61,14 @@ class PlayerHandler : public MessageHandler, public Net::PlayerHandler bool canUseMagic(); + bool canCorrectAttributes(); + + int getJobLocation(); + private: - void handleMapChangeMessage(MessageIn &msg); + void handleMapChangeMessage(Net::MessageIn &msg); }; } // namespace ManaServ -#endif +#endif // NET_MANASERV_PLAYERHANDLER_H diff --git a/src/net/manaserv/specialhandler.cpp b/src/net/manaserv/specialhandler.cpp index 55ea3ee0..2e152d60 100644 --- a/src/net/manaserv/specialhandler.cpp +++ b/src/net/manaserv/specialhandler.cpp @@ -24,10 +24,10 @@ #include "net/manaserv/gameserver/internal.h" #include "net/manaserv/connection.h" +#include "net/manaserv/messagein.h" +#include "net/manaserv/messageout.h" #include "net/manaserv/protocol.h" -#include "net/messageout.h" - Net::SpecialHandler *specialHandler; namespace ManaServ { @@ -37,7 +37,7 @@ SpecialHandler::SpecialHandler() specialHandler = this; } -void SpecialHandler::handleMessage(MessageIn &msg) +void SpecialHandler::handleMessage(Net::MessageIn &msg) { // TODO } @@ -46,7 +46,7 @@ void SpecialHandler::use(int id) { MessageOut msg(PGMSG_USE_SPECIAL); msg.writeInt8(id); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); } void SpecialHandler::use(int id, int level, int beingId) diff --git a/src/net/manaserv/specialhandler.h b/src/net/manaserv/specialhandler.h index 3f61bf4b..6739c872 100644 --- a/src/net/manaserv/specialhandler.h +++ b/src/net/manaserv/specialhandler.h @@ -22,9 +22,10 @@ #ifndef NET_MANASERV_SKILLHANDLER_H #define NET_MANASERV_SKILLHANDLER_H -#include "net/messagehandler.h" #include "net/specialhandler.h" +#include "net/manaserv/messagehandler.h" + namespace ManaServ { class SpecialHandler : public MessageHandler, public Net::SpecialHandler @@ -32,7 +33,7 @@ class SpecialHandler : public MessageHandler, public Net::SpecialHandler public: SpecialHandler(); - void handleMessage(MessageIn &msg); + void handleMessage(Net::MessageIn &msg); void use(int id); @@ -45,4 +46,4 @@ class SpecialHandler : public MessageHandler, public Net::SpecialHandler } // namespace ManaServ -#endif +#endif // NET_MANASERV_SKILLHANDLER_H diff --git a/src/net/manaserv/tradehandler.cpp b/src/net/manaserv/tradehandler.cpp index aa2f9ab5..46664193 100644 --- a/src/net/manaserv/tradehandler.cpp +++ b/src/net/manaserv/tradehandler.cpp @@ -25,10 +25,10 @@ #include "net/manaserv/gameserver/player.h" #include "net/manaserv/connection.h" +#include "net/manaserv/messagein.h" +#include "net/manaserv/messageout.h" #include "net/manaserv/protocol.h" -#include "net/messagein.h" -#include "net/messageout.h" #include "net/net.h" #include "beingmanager.h" @@ -56,9 +56,9 @@ namespace { { if (event.getId() == "yes") { - MessageOut msg(PGMSG_TRADE_REQUEST); + ManaServ::MessageOut msg(PGMSG_TRADE_REQUEST); msg.writeInt16(tradePartnerID); - Net::GameServer::connection->send(msg); + ManaServ::GameServer::connection->send(msg); } else Net::getTradeHandler()->cancel(); @@ -100,7 +100,7 @@ void TradeHandler::setAcceptTradeRequests(bool acceptTradeRequests) } } -void TradeHandler::handleMessage(MessageIn &msg) +void TradeHandler::handleMessage(Net::MessageIn &msg) { switch (msg.getId()) { @@ -170,13 +170,13 @@ void TradeHandler::request(Being *being) MessageOut msg(PGMSG_TRADE_REQUEST); msg.writeInt16(tradePartnerID); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); } void TradeHandler::respond(bool accept) { MessageOut msg(accept ? PGMSG_TRADE_REQUEST : PGMSG_TRADE_CANCEL); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); if (!accept) player_node->setTrading(false); @@ -187,7 +187,7 @@ void TradeHandler::addItem(Item *item, int amount) MessageOut msg(PGMSG_TRADE_ADD_ITEM); msg.writeInt8(item->getInvIndex()); msg.writeInt8(amount); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); tradeWindow->addItem(item->getId(), true, amount); item->increaseQuantity(-amount); @@ -202,25 +202,25 @@ void TradeHandler::setMoney(int amount) { MessageOut msg(PGMSG_TRADE_SET_MONEY); msg.writeInt32(amount); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); } void TradeHandler::confirm() { MessageOut msg(PGMSG_TRADE_CONFIRM); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); } void TradeHandler::finish() { MessageOut msg(PGMSG_TRADE_AGREED); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); } void TradeHandler::cancel() { MessageOut msg(PGMSG_TRADE_CANCEL); - Net::GameServer::connection->send(msg); + GameServer::connection->send(msg); } } // namespace ManaServ diff --git a/src/net/manaserv/tradehandler.h b/src/net/manaserv/tradehandler.h index 9041952d..5d23ebd6 100644 --- a/src/net/manaserv/tradehandler.h +++ b/src/net/manaserv/tradehandler.h @@ -22,9 +22,10 @@ #ifndef NET_MANASERV_TRADEHANDLER_H #define NET_MANASERV_TRADEHANDLER_H -#include "net/messagehandler.h" #include "net/tradehandler.h" +#include "net/manaserv/messagehandler.h" + namespace ManaServ { class TradeHandler : public MessageHandler, public Net::TradeHandler @@ -32,7 +33,7 @@ class TradeHandler : public MessageHandler, public Net::TradeHandler public: TradeHandler(); - void handleMessage(MessageIn &msg); + void handleMessage(Net::MessageIn &msg); /** * Returns whether trade requests are accepted. @@ -71,4 +72,4 @@ class TradeHandler : public MessageHandler, public Net::TradeHandler } // namespace ManaServ -#endif +#endif // NET_MANASERV_TRADEHANDLER_H diff --git a/src/net/messagehandler.h b/src/net/messagehandler.h index c89f3dcd..bf022afd 100644 --- a/src/net/messagehandler.h +++ b/src/net/messagehandler.h @@ -28,10 +28,7 @@ #include <memory> -class MessageIn; -#ifdef EATHENA_SUPPORT -class Network; -#endif +namespace Net { /** * \ingroup Network @@ -41,19 +38,9 @@ class MessageHandler public: const Uint16 *handledMessages; - MessageHandler(); - virtual ~MessageHandler(); - virtual void handleMessage(MessageIn &msg) = 0; - -#ifdef EATHENA_SUPPORT - void setNetwork(Network *network); - - protected: - Network *mNetwork; -#endif }; -typedef const std::auto_ptr<MessageHandler> MessageHandlerPtr; +} #endif // NET_MESSAGEHANDLER_H diff --git a/src/net/messagein.cpp b/src/net/messagein.cpp index 1e85133f..f659fcfc 100644 --- a/src/net/messagein.cpp +++ b/src/net/messagein.cpp @@ -21,24 +21,17 @@ #include "net/messagein.h" -#ifdef MANASERV_SUPPORT -#include <enet/enet.h> -#else -#include <SDL.h> -#include <SDL_endian.h> -#endif - #define MAKEWORD(low,high) \ ((unsigned short)(((unsigned char)(low)) | \ ((unsigned short)((unsigned char)(high))) << 8)) +namespace Net { + MessageIn::MessageIn(const char *data, unsigned int length): mData(data), mLength(length), mPos(0) { - // Read the message ID - mId = readInt16(); } int MessageIn::readInt8() @@ -52,48 +45,6 @@ int MessageIn::readInt8() return value; } -int MessageIn::readInt16() -{ - int value = -1; - if (mPos + 2 <= mLength) - { -#ifdef MANASERV_SUPPORT - uint16_t t; - memcpy(&t, mData + mPos, 2); - value = (unsigned short) ENET_NET_TO_HOST_16(t); -#else -#if SDL_BYTEORDER == SDL_BIG_ENDIAN - value = SDL_Swap16(*(Sint16*)(mData + mPos)); -#else - value = (*(Sint16*)(mData + mPos)); -#endif -#endif // MANASERV_SUPPORT - } - mPos += 2; - return value; -} - -int MessageIn::readInt32() -{ - int value = -1; - if (mPos + 4 <= mLength) - { -#ifdef MANASERV_SUPPORT - uint32_t t; - memcpy(&t, mData + mPos, 4); - value = ENET_NET_TO_HOST_32(t); -#else -#if SDL_BYTEORDER == SDL_BIG_ENDIAN - value = SDL_Swap32(*(Sint32*)(mData + mPos)); -#else - value = (*(Sint32*)(mData + mPos)); -#endif -#endif // MANASERV_SUPPORT - } - mPos += 4; - return value; -} - void MessageIn::readCoordinates(Uint16 &x, Uint16 &y) { if (mPos + 3 <= mLength) @@ -201,3 +152,5 @@ std::string MessageIn::readString(int length) mPos += length; return readString; } + +} diff --git a/src/net/messagein.h b/src/net/messagein.h index 17a73e2d..6f68c49b 100644 --- a/src/net/messagein.h +++ b/src/net/messagein.h @@ -19,12 +19,14 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef MESSAGEIN_H -#define MESSAGEIN_H +#ifndef NET_MESSAGEIN_H +#define NET_MESSAGEIN_H #include <SDL_types.h> #include <string> +namespace Net { + /** * Used for parsing an incoming message. * @@ -34,11 +36,6 @@ class MessageIn { public: /** - * Constructor. - */ - MessageIn(const char *data, unsigned int length); - - /** * Returns the message ID. */ int getId() const { return mId; } @@ -53,42 +50,47 @@ class MessageIn */ unsigned int getUnreadLength() const { return mLength - mPos; } - int readInt8(); /**< Reads a byte. */ - int readInt16(); /**< Reads a short. */ - int readInt32(); /**< Reads a long. */ + virtual int readInt8(); /**< Reads a byte. */ + virtual int readInt16() = 0; /**< Reads a short. */ + virtual int readInt32() = 0; /**< Reads a long. */ /** * Reads a 3-byte block containing tile-based coordinates. Used by * manaserv. */ - void readCoordinates(Uint16 &x, Uint16 &y); + virtual void readCoordinates(Uint16 &x, Uint16 &y); /** * Reads a special 3 byte block used by eAthena, containing x and y * coordinates and direction. */ - void readCoordinates(Uint16 &x, Uint16 &y, Uint8 &direction); + virtual void readCoordinates(Uint16 &x, Uint16 &y, Uint8 &direction); /** * Reads a special 5 byte block used by eAthena, containing a source * and destination coordinate pair. */ - void readCoordinatePair(Uint16 &srcX, Uint16 &srcY, - Uint16 &dstX, Uint16 &dstY); + virtual void readCoordinatePair(Uint16 &srcX, Uint16 &srcY, + Uint16 &dstX, Uint16 &dstY); /** * Skips a given number of bytes. */ - void skip(unsigned int length); + virtual void skip(unsigned int length); /** * Reads a string. If a length is not given (-1), it is assumed * that the length of the string is stored in a short at the * start of the string. */ - std::string readString(int length = -1); + virtual std::string readString(int length = -1); + + protected: + /** + * Constructor. + */ + MessageIn(const char *data, unsigned int length); - private: const char *mData; /**< The message data. */ unsigned int mLength; /**< The length of the data. */ unsigned short mId; /**< The message ID. */ @@ -101,4 +103,6 @@ class MessageIn unsigned int mPos; }; -#endif +} + +#endif // NET_MESSAGEIN_H diff --git a/src/net/messageout.cpp b/src/net/messageout.cpp index 7d87a849..4bcf22d0 100644 --- a/src/net/messageout.cpp +++ b/src/net/messageout.cpp @@ -21,150 +21,25 @@ #include "net/messageout.h" -#ifdef MANASERV_SUPPORT -#include <enet/enet.h> -#else -#include "net/ea/network.h" - -#include <SDL.h> -#include <SDL_endian.h> -#endif - #include <cstring> #include <string> +namespace Net { + MessageOut::MessageOut(short id): mData(0), mDataSize(0), mPos(0) { - mID = id; -#ifdef EATHENA_SUPPORT - mNetwork = Network::instance(); - mData = mNetwork->mOutBuffer + mNetwork->mOutSize; -#endif - writeInt16(id); -} - -#ifdef MANASERV_SUPPORT -MessageOut::~MessageOut() -{ - free(mData); -} - -void MessageOut::expand(size_t bytes) -{ - mData = (char*)realloc(mData, bytes); - mDataSize = bytes; } -#endif void MessageOut::writeInt8(Sint8 value) { -#ifdef MANASERV_SUPPORT - expand(mPos + 1); -#else - mNetwork->mOutSize += 1; -#endif + expand(1); mData[mPos] = value; mPos += 1; } -void MessageOut::writeInt16(Sint16 value) -{ -#ifdef MANASERV_SUPPORT - expand(mPos + 2); - uint16_t t = ENET_HOST_TO_NET_16(value); - memcpy(mData + mPos, &t, 2); -#else -#if SDL_BYTEORDER == SDL_BIG_ENDIAN - (*(Sint16 *)(mData + mPos)) = SDL_Swap16(value); -#else - (*(Sint16 *)(mData + mPos)) = value; -#endif - mNetwork->mOutSize += 2; -#endif // MANASERV_SUPPORT - mPos += 2; -} - -void MessageOut::writeInt32(Sint32 value) -{ -#ifdef MANASERV_SUPPORT - expand(mPos + 4); - uint32_t t = ENET_HOST_TO_NET_32(value); - memcpy(mData + mPos, &t, 4); -#else -#if SDL_BYTEORDER == SDL_BIG_ENDIAN - (*(Sint32 *)(mData + mPos)) = SDL_Swap32(value); -#else - (*(Sint32 *)(mData + mPos)) = value; -#endif - mNetwork->mOutSize += 4; -#endif // MANASERV_SUPPORT - mPos += 4; -} - -#ifdef EATHENA_SUPPORT - -#define LOBYTE(w) ((unsigned char)(w)) -#define HIBYTE(w) ((unsigned char)(((unsigned short)(w)) >> 8)) - -void MessageOut::writeCoordinates(unsigned short x, unsigned short y, - unsigned char direction) -{ - char *data = mData + mPos; - mNetwork->mOutSize += 3; - mPos += 3; - - short temp; - temp = x; - temp <<= 6; - data[0] = 0; - data[1] = 1; - data[2] = 2; - data[0] = HIBYTE(temp); - data[1] = (unsigned char) temp; - temp = y; - temp <<= 4; - data[1] |= HIBYTE(temp); - data[2] = LOBYTE(temp); - - // Translate direction to eAthena format - switch (direction) - { - case 1: - direction = 0; - break; - case 3: - direction = 1; - break; - case 2: - direction = 2; - break; - case 6: - direction = 3; - break; - case 4: - direction = 4; - break; - case 12: - direction = 5; - break; - case 8: - direction = 6; - break; - case 9: - direction = 7; - break; - default: - // OOPSIE! Impossible or unknown - direction = (unsigned char) -1; - } - data[2] |= direction; -} - -#endif // EATHENA_SUPPORT - void MessageOut::writeString(const std::string &string, int length) { int stringLength = string.length(); @@ -179,11 +54,7 @@ void MessageOut::writeString(const std::string &string, int length) // Make sure the length of the string is no longer than specified stringLength = length; } -#ifdef MANASERV_SUPPORT - expand(mPos + length); -#else - mNetwork->mOutSize += length; -#endif + expand(length); // Write the actual string memcpy(mData + mPos, string.c_str(), stringLength); @@ -205,3 +76,5 @@ unsigned int MessageOut::getDataSize() const { return mDataSize; } + +} diff --git a/src/net/messageout.h b/src/net/messageout.h index b232fdf8..b3fd3a96 100644 --- a/src/net/messageout.h +++ b/src/net/messageout.h @@ -19,71 +19,48 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef MESSAGEOUT_H -#define MESSAGEOUT_H +#ifndef NET_MESSAGEOUT_H +#define NET_MESSAGEOUT_H #include <iosfwd> #include <SDL_types.h> -#ifdef EATHENA_SUPPORT -class Network; -#endif +namespace Net { /** * Used for building an outgoing message. * - * With manaserv, the message is sent using Net::Connection::send() when - * finished. - * * \ingroup Network */ class MessageOut { public: - /** - * Constructor. - */ - MessageOut(short id); - -#ifdef MANASERV_SUPPORT - /** - * Destructor. - */ - ~MessageOut(); -#endif - - void writeInt8(Sint8 value); /**< Writes a byte. */ - void writeInt16(Sint16 value); /**< Writes a short. */ - void writeInt32(Sint32 value); /**< Writes a long. */ - -#ifdef EATHENA_SUPPORT - /** - * Encodes coordinates and direction in 3 bytes. Used by eAthena. - */ - void writeCoordinates(unsigned short x, unsigned short y, - unsigned char direction); -#endif + virtual void writeInt8(Sint8 value); /**< Writes a byte. */ + virtual void writeInt16(Sint16 value) = 0; /**< Writes a short. */ + virtual void writeInt32(Sint32 value) = 0; /**< Writes a long. */ /** * Writes a string. If a fixed length is not given (-1), it is stored * as a short at the start of the string. */ - void writeString(const std::string &string, int length = -1); + virtual void writeString(const std::string &string, int length = -1); /** * Returns the content of the message. */ - char *getData() const; + virtual char *getData() const; /** * Returns the length of the data. */ - unsigned int getDataSize() const; + virtual unsigned int getDataSize() const; - short mID; + protected: + /** + * Constructor. + */ + MessageOut(short id); - private: -#ifdef MANASERV_SUPPORT /** * Expand the packet data to be able to hold more data. * @@ -91,14 +68,13 @@ class MessageOut * memory in advance instead of expanding size every time more data is * added. */ - void expand(size_t size); -#else - Network *mNetwork; -#endif + virtual void expand(size_t size) = 0; char *mData; /**< Data building up. */ unsigned int mDataSize; /**< Size of data. */ unsigned int mPos; /**< Position in the data. */ }; -#endif +} + +#endif // NET_MESSAGEOUT_H diff --git a/src/net/net.h b/src/net/net.h index 7a49121d..5e675df7 100644 --- a/src/net/net.h +++ b/src/net/net.h @@ -22,6 +22,10 @@ #ifndef NET_H #define NET_H +/** + * \defgroup Network Core network layer + */ + class ServerInfo; namespace Net { diff --git a/src/net/playerhandler.h b/src/net/playerhandler.h index a0fd8bac..895e3164 100644 --- a/src/net/playerhandler.h +++ b/src/net/playerhandler.h @@ -56,6 +56,10 @@ class PlayerHandler virtual void ignoreAll(bool ignore) = 0; virtual bool canUseMagic() = 0; + + virtual bool canCorrectAttributes() = 0; + + virtual int getJobLocation() = 0; }; } // namespace Net |