summaryrefslogtreecommitdiff
path: root/src/net/tmwa
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2011-07-28 23:30:51 +0300
committerAndrei Karas <akaras@inbox.ru>2011-07-29 04:26:04 +0300
commitc8b18b47abbb325b6cc4b34abbad52b03825e4f9 (patch)
tree3fbca23dda0c1c1ec31c54373e4faa74c998bb76 /src/net/tmwa
parent0cc6167c407c1cf18158ca0e154a3b1cab48853d (diff)
downloadmv-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.cpp5
-rw-r--r--src/net/tmwa/chathandler.cpp309
-rw-r--r--src/net/tmwa/chathandler.h29
-rw-r--r--src/net/tmwa/gamehandler.cpp49
-rw-r--r--src/net/tmwa/gamehandler.h24
-rw-r--r--src/net/tmwa/loginhandler.cpp4
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"