diff options
author | Andrei Karas <akaras@inbox.ru> | 2011-07-28 23:30:51 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2011-07-29 04:26:04 +0300 |
commit | c8b18b47abbb325b6cc4b34abbad52b03825e4f9 (patch) | |
tree | 3fbca23dda0c1c1ec31c54373e4faa74c998bb76 /src/net/tmwa | |
parent | 0cc6167c407c1cf18158ca0e154a3b1cab48853d (diff) | |
download | mv-c8b18b47abbb325b6cc4b34abbad52b03825e4f9.tar.gz mv-c8b18b47abbb325b6cc4b34abbad52b03825e4f9.tar.bz2 mv-c8b18b47abbb325b6cc4b34abbad52b03825e4f9.tar.xz mv-c8b18b47abbb325b6cc4b34abbad52b03825e4f9.zip |
Extract shared logic from chathandler and gamehandler netcode to ea namespace.
Diffstat (limited to 'src/net/tmwa')
-rw-r--r-- | src/net/tmwa/charserverhandler.cpp | 5 | ||||
-rw-r--r-- | src/net/tmwa/chathandler.cpp | 309 | ||||
-rw-r--r-- | src/net/tmwa/chathandler.h | 29 | ||||
-rw-r--r-- | src/net/tmwa/gamehandler.cpp | 49 | ||||
-rw-r--r-- | src/net/tmwa/gamehandler.h | 24 | ||||
-rw-r--r-- | src/net/tmwa/loginhandler.cpp | 4 |
6 files changed, 17 insertions, 403 deletions
diff --git a/src/net/tmwa/charserverhandler.cpp b/src/net/tmwa/charserverhandler.cpp index 57f65cbd4..fe803dc62 100644 --- a/src/net/tmwa/charserverhandler.cpp +++ b/src/net/tmwa/charserverhandler.cpp @@ -24,15 +24,12 @@ #include "client.h" #include "configuration.h" -#include "game.h" #include "log.h" #include "gui/charcreatedialog.h" -#include "gui/okdialog.h" #include "net/logindata.h" #include "net/messagein.h" -#include "net/messageout.h" #include "net/net.h" #include "net/tmwa/gamehandler.h" @@ -43,8 +40,6 @@ #include "resources/colordb.h" #include "utils/dtor.h" -#include "utils/gettext.h" -#include "utils/stringutils.h" #include "debug.h" diff --git a/src/net/tmwa/chathandler.cpp b/src/net/tmwa/chathandler.cpp index 3ce30ce84..0f23f6412 100644 --- a/src/net/tmwa/chathandler.cpp +++ b/src/net/tmwa/chathandler.cpp @@ -41,9 +41,6 @@ #include "net/tmwa/protocol.h" -#include "utils/gettext.h" -#include "utils/stringutils.h" - #include <string> #include "debug.h" @@ -74,273 +71,30 @@ void ChatHandler::handleMessage(Net::MessageIn &msg) if (!localChatTab) return; - Being *being; - std::string chatMsg; - std::string nick; - int chatMsgLength; - switch (msg.getId()) { case SMSG_WHISPER_RESPONSE: - { - if (mSentWhispers.empty()) - { - nick = "user"; - } - else - { - nick = mSentWhispers.front(); - mSentWhispers.pop(); - } - - int type = msg.readInt8(); - switch (type) - { - case 0x00: - // Success (don't need to report) - break; - case 0x01: - if (chatWindow) - { - chatWindow->whisper(nick, - strprintf(_("Whisper could not be " - "sent, %s is offline."), nick.c_str()), BY_SERVER); - } - break; - case 0x02: - if (chatWindow) - { - chatWindow->whisper(nick, - strprintf(_("Whisper could not " - "be sent, ignored by %s."), nick.c_str()), - BY_SERVER); - } - break; - default: - if (logger) - { - logger->log("QQQ SMSG_WHISPER_RESPONSE:" - + toString(type)); - } - } + processWhisperResponse(msg); break; - } // Received whisper case SMSG_WHISPER: - { - chatMsgLength = msg.readInt16() - 28; - nick = msg.readString(24); - - if (chatMsgLength <= 0) - break; - - chatMsg = msg.readString(chatMsgLength); - if (chatMsg.find("\302\202!") == 0) - chatMsg = chatMsg.substr(2); - - if (nick != "Server") - { - if (player_relations.hasPermission( - nick, PlayerRelation::WHISPER)) - { - bool tradeBot = config.getBoolValue("tradebot"); - bool showMsg = !config.getBoolValue("hideShopMessages"); - if (player_relations.hasPermission( - nick, PlayerRelation::TRADE)) - { - if (shopWindow) - { //commands to shop from player - if (chatMsg.find("!selllist ") == 0) - { - if (tradeBot) - { - if (showMsg && chatWindow) - chatWindow->whisper(nick, chatMsg); - shopWindow->giveList(nick, - ShopWindow::SELL); - } - } - else if (chatMsg.find("!buylist ") == 0) - { - if (tradeBot) - { - if (showMsg && chatWindow) - chatWindow->whisper(nick, chatMsg); - shopWindow->giveList(nick, - ShopWindow::BUY); - } - } - else if (chatMsg.find("!buyitem ") == 0) - { - if (showMsg && chatWindow) - chatWindow->whisper(nick, chatMsg); - if (tradeBot) - { - shopWindow->processRequest(nick, chatMsg, - ShopWindow::BUY); - } - } - else if (chatMsg.find("!sellitem ") == 0) - { - if (showMsg && chatWindow) - chatWindow->whisper(nick, chatMsg); - if (tradeBot) - { - shopWindow->processRequest(nick, chatMsg, - ShopWindow::SELL); - } - } - else if (chatMsg.length() > 3 - && chatMsg.find("\302\202") == 0) - { - chatMsg = chatMsg.erase(0, 2); - if (showMsg && chatWindow) - chatWindow->whisper(nick, chatMsg); - if (chatMsg.find("B1") == 0 - || chatMsg.find("S1") == 0) - { - shopWindow->showList(nick, chatMsg); - } - } - else if (chatWindow) - { - chatWindow->whisper(nick, chatMsg); - } - } - else if (chatWindow) - { - chatWindow->whisper(nick, chatMsg); - } - } - else - { - if (chatWindow && (showMsg - || (chatMsg.find("!selllist") - != 0 && chatMsg.find("!buylist") != 0))) - { - chatWindow->whisper(nick, chatMsg); - } - } - } - } - else if (localChatTab) - { - localChatTab->chatLog(chatMsg, BY_SERVER); - } - + processWhisper(msg); break; - } // Received speech from being case SMSG_BEING_CHAT: - { - if (!actorSpriteManager) - return; - - chatMsgLength = msg.readInt16() - 8; - being = actorSpriteManager->findBeing(msg.readInt32()); - - if (!being || chatMsgLength <= 0) - break; - - chatMsg = msg.readRawString(chatMsgLength); - - if (being->getType() == Being::PLAYER) - being->setTalkTime(); - - std::string::size_type pos = chatMsg.find(" : ", 0); - std::string sender_name = ((pos == std::string::npos) - ? "" : chatMsg.substr(0, pos)); - - if (sender_name != being->getName() - && being->getType() == Being::PLAYER) - { - if (!being->getName().empty()) - sender_name = being->getName(); - } - else - { - chatMsg.erase(0, pos + 3); - } - - trim(chatMsg); - - // We use getIgnorePlayer instead of ignoringPlayer here - // because ignorePlayer' side effects are triggered - // right below for Being::IGNORE_SPEECH_FLOAT. - if (player_relations.checkPermissionSilently(sender_name, - PlayerRelation::SPEECH_LOG) && chatWindow) - { - chatWindow->resortChatLog(removeColors(sender_name) + " : " - + chatMsg, BY_OTHER); - } - - if (player_relations.hasPermission(sender_name, - PlayerRelation::SPEECH_FLOAT)) - { - being->setSpeech(chatMsg); - } + processBeingChat(msg); break; - } case SMSG_PLAYER_CHAT: case SMSG_GM_CHAT: - { - chatMsgLength = msg.readInt16() - 4; - - if (chatMsgLength <= 0) - break; - - chatMsg = msg.readRawString(chatMsgLength); - std::string::size_type pos = chatMsg.find(" : ", 0); - - if (msg.getId() == SMSG_PLAYER_CHAT) - { - if (chatWindow) - chatWindow->resortChatLog(chatMsg, BY_PLAYER); - - const std::string senseStr = "You sense the following: "; - if (actorSpriteManager && !chatMsg.find(senseStr)) - { - actorSpriteManager->parseLevels( - chatMsg.substr(senseStr.size())); - } - - if (pos != std::string::npos) - chatMsg.erase(0, pos + 3); - - trim(chatMsg); - - if (player_node) - player_node->setSpeech(chatMsg); - } - else if (localChatTab) - { - localChatTab->chatLog(chatMsg, BY_GM); - } + processChat(msg, msg.getId() == SMSG_PLAYER_CHAT); break; - } case SMSG_MVP: - { - // Display MVP player - int id = msg.readInt32(); // id - if (localChatTab && actorSpriteManager) - { - being = actorSpriteManager->findBeing(id); - if (!being) - { - localChatTab->chatLog(_("MVP player."), BY_SERVER); - } - else - { - localChatTab->chatLog(_("MVP player: ") - + being->getName(), BY_SERVER); - } - } + processMVP(msg); break; - } default: break; @@ -369,13 +123,6 @@ void ChatHandler::talkRaw(const std::string &mes) outMsg.writeString(mes, static_cast<int>(mes.length() + 1)); } -void ChatHandler::me(const std::string &text) -{ - std::string action = strprintf("*%s*", text.c_str()); - - talk(action); -} - void ChatHandler::privateMessage(const std::string &recipient, const std::string &text) { @@ -386,52 +133,6 @@ void ChatHandler::privateMessage(const std::string &recipient, mSentWhispers.push(recipient); } -void ChatHandler::channelList() -{ - SERVER_NOTICE(_("Channels are not supported!")) -} - -void ChatHandler::enterChannel(const std::string &channel A_UNUSED, - const std::string &password A_UNUSED) -{ - SERVER_NOTICE(_("Channels are not supported!")) -} - -void ChatHandler::quitChannel(int channelId A_UNUSED) -{ - SERVER_NOTICE(_("Channels are not supported!")) -} - -void ChatHandler::sendToChannel(int channelId A_UNUSED, - const std::string &text A_UNUSED) -{ - SERVER_NOTICE(_("Channels are not supported!")) -} - -void ChatHandler::userList(const std::string &channel A_UNUSED) -{ - SERVER_NOTICE(_("Channels are not supported!")) -} - -void ChatHandler::setChannelTopic(int channelId A_UNUSED, - const std::string &text A_UNUSED) -{ - SERVER_NOTICE(_("Channels are not supported!")) -} - -void ChatHandler::setUserMode(int channelId A_UNUSED, - const std::string &name A_UNUSED, - int mode A_UNUSED) -{ - SERVER_NOTICE(_("Channels are not supported!")) -} - -void ChatHandler::kickUser(int channelId A_UNUSED, - const std::string &name A_UNUSED) -{ - SERVER_NOTICE(_("Channels are not supported!")) -} - void ChatHandler::who() { MessageOut outMsg(CMSG_WHO_REQUEST); diff --git a/src/net/tmwa/chathandler.h b/src/net/tmwa/chathandler.h index c1b1f26fa..d9e927e03 100644 --- a/src/net/tmwa/chathandler.h +++ b/src/net/tmwa/chathandler.h @@ -26,9 +26,9 @@ #include "net/chathandler.h" #include "net/net.h" -#include "net/tmwa/messagehandler.h" +#include "net/ea/chathandler.h" -#include <queue> +#include "net/tmwa/messagehandler.h" #ifdef __GNUC__ #define A_UNUSED __attribute__ ((unused)) @@ -39,7 +39,7 @@ namespace TmwAthena { -class ChatHandler : public MessageHandler, public Net::ChatHandler +class ChatHandler : public MessageHandler, public Ea::ChatHandler { public: ChatHandler(); @@ -50,37 +50,14 @@ class ChatHandler : public MessageHandler, public Net::ChatHandler void talkRaw(const std::string &text); - void me(const std::string &text); - void privateMessage(const std::string &recipient, const std::string &text); - void channelList(); - - void enterChannel(const std::string &channel, - const std::string &password); - - void quitChannel(int channelId); - - void sendToChannel(int channelId, const std::string &text); - - void userList(const std::string &channel); - - void setChannelTopic(int channelId, const std::string &text); - - void setUserMode(int channelId, const std::string &name, int mode); - - void kickUser(int channelId, const std::string &name); - void who(); void sendRaw(const std::string &args); void processRaw(MessageOut &outMsg, std::string &line); - - private: - typedef std::queue<std::string> WhisperQueue; - WhisperQueue mSentWhispers; }; } // namespace TmwAthena diff --git a/src/net/tmwa/gamehandler.cpp b/src/net/tmwa/gamehandler.cpp index 99d4841b2..cc0a37c57 100644 --- a/src/net/tmwa/gamehandler.cpp +++ b/src/net/tmwa/gamehandler.cpp @@ -28,8 +28,6 @@ #include "localplayer.h" #include "log.h" -#include "gui/okdialog.h" - #include "net/messagein.h" #include "net/messageout.h" @@ -37,9 +35,6 @@ #include "net/tmwa/network.h" #include "net/tmwa/protocol.h" -#include "utils/gettext.h" -#include "utils/stringutils.h" - #include "debug.h" extern Net::GameHandler *gameHandler; @@ -62,9 +57,6 @@ GameHandler::GameHandler() }; handledMessages = _messages; gameHandler = this; - mCharID = 0; - - listen(Mana::CHANNEL_GAME); } void GameHandler::handleMessage(Net::MessageIn &msg) @@ -72,20 +64,8 @@ void GameHandler::handleMessage(Net::MessageIn &msg) switch (msg.getId()) { case SMSG_MAP_LOGIN_SUCCESS: - { - unsigned char direction; - Uint16 x, y; - msg.readInt32(); // server tick - msg.readCoordinates(x, y, direction); - msg.skip(2); // unknown - logger->log("Protocol: Player start position: (%d, %d)," - " Direction: %d", x, y, direction); - // Switch now or we'll have problems - Client::setState(STATE_GAME); - if (player_node) - player_node->setTileCoords(x, y); + processMapLogin(msg); break; - } case SMSG_SERVER_PING: // We ignore this for now @@ -93,17 +73,15 @@ void GameHandler::handleMessage(Net::MessageIn &msg) break; case SMSG_WHO_ANSWER: - SERVER_NOTICE(strprintf(_("Online users: %d"), msg.readInt32())) + processWhoAnswer(msg); break; case SMSG_CHAR_SWITCH_RESPONSE: - if (msg.readInt8()) - Client::setState(STATE_SWITCH_CHARACTER); + processCharSwitchResponse(msg); break; case SMSG_MAP_QUIT_RESPONSE: - if (msg.readInt8()) - new OkDialog(_("Game"), _("Request to quit denied!"), NULL); + processMapQuitResponse(msg); break; default: @@ -111,15 +89,9 @@ void GameHandler::handleMessage(Net::MessageIn &msg) } } -void GameHandler::event(Mana::Channels channel, const Mana::Event &event) +void GameHandler::mapLoadedEvent() { - if (channel == Mana::CHANNEL_GAME) - { - if (event.getName() == Mana::EVENT_ENGINESINITALIZED) - Game::instance()->changeMap(mMap); - else if (event.getName() == Mana::EVENT_MAPLOADED) - MessageOut outMsg(CMSG_MAP_LOADED); - } + MessageOut outMsg(CMSG_MAP_LOADED); } void GameHandler::connect() @@ -172,10 +144,6 @@ void GameHandler::disconnect() mNetwork->disconnect(); } -void GameHandler::who() -{ -} - void GameHandler::quit() { MessageOut outMsg(CMSG_CLIENT_QUIT); @@ -187,11 +155,6 @@ void GameHandler::ping(int tick) msg.writeInt32(tick); } -void GameHandler::setMap(const std::string map) -{ - mMap = map.substr(0, map.rfind(".")); -} - void GameHandler::disconnect2() { MessageOut outMsg(CMSG_CLIENT_DISCONNECT); diff --git a/src/net/tmwa/gamehandler.h b/src/net/tmwa/gamehandler.h index 4abfd43c0..6824ee672 100644 --- a/src/net/tmwa/gamehandler.h +++ b/src/net/tmwa/gamehandler.h @@ -23,15 +23,13 @@ #ifndef NET_TA_MAPHANDLER_H #define NET_TA_MAPHANDLER_H -#include "listener.h" - #include "net/gamehandler.h" #include "net/net.h" #include "net/serverinfo.h" #include "net/tmwa/messagehandler.h" -#include "net/ea/token.h" +#include "net/ea/gamehandler.h" #ifdef __GNUC__ #define A_UNUSED __attribute__ ((unused)) @@ -42,44 +40,28 @@ namespace TmwAthena { -class GameHandler : public MessageHandler, public Net::GameHandler, - public Mana::Listener +class GameHandler : public MessageHandler, public Ea::GameHandler { public: GameHandler(); void handleMessage(Net::MessageIn &msg); - void event(Mana::Channels channel, const Mana::Event &event); - void connect(); bool isConnected(); void disconnect(); - void who(); - void quit(); void ping(int tick); - bool removeDeadBeings() const - { return true; } - void clear(); - void setMap(const std::string map); - - /** The tmwAthena protocol is making use of the MP status bar. */ - bool canUseMagicBar() const - { return true; } - void disconnect2(); - private: - std::string mMap; - int mCharID; /// < Saved for map-server switching + void mapLoadedEvent(); }; } // namespace TmwAthena diff --git a/src/net/tmwa/loginhandler.cpp b/src/net/tmwa/loginhandler.cpp index 62d8833ec..15ed2f27c 100644 --- a/src/net/tmwa/loginhandler.cpp +++ b/src/net/tmwa/loginhandler.cpp @@ -26,16 +26,12 @@ #include "log.h" #include "configuration.h" -#include "net/logindata.h" #include "net/messagein.h" -#include "net/messageout.h" #include "net/tmwa/network.h" #include "net/tmwa/protocol.h" -#include "utils/dtor.h" #include "utils/gettext.h" -#include "utils/stringutils.h" #include "debug.h" |