summaryrefslogtreecommitdiff
path: root/net/chathandler.cpp
diff options
context:
space:
mode:
authorHello=) <hello@themanaworld.org>2024-03-29 04:23:18 +0300
committerHello=) <hello@themanaworld.org>2024-03-29 04:23:18 +0300
commit08cd08587be5c8d2ce42ae417098c524f683c6ad (patch)
tree727aa239372a77e9ca3d72fe761940bb49e8d2d8 /net/chathandler.cpp
parentdb0b1da0060f5eb4b2af040c22ea9373d36970af (diff)
downloadguildbot-08cd08587be5c8d2ce42ae417098c524f683c6ad.tar.gz
guildbot-08cd08587be5c8d2ce42ae417098c524f683c6ad.tar.bz2
guildbot-08cd08587be5c8d2ce42ae417098c524f683c6ad.tar.xz
guildbot-08cd08587be5c8d2ce42ae417098c524f683c6ad.zip
Move actual top level from src/ to top: just one single dir is pointless.
Reported-By: NetSysFire
Diffstat (limited to 'net/chathandler.cpp')
-rw-r--r--net/chathandler.cpp146
1 files changed, 146 insertions, 0 deletions
diff --git a/net/chathandler.cpp b/net/chathandler.cpp
new file mode 100644
index 0000000..19abc24
--- /dev/null
+++ b/net/chathandler.cpp
@@ -0,0 +1,146 @@
+/*
+ * The Mana World
+ * Copyright 2004 The Mana World Development Team
+ *
+ * This file is part of The Mana World.
+ *
+ * The Mana World 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.
+ *
+ * The Mana World 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 The Mana World; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id: chathandler.cpp 2112 2006-01-22 13:31:13Z der_doener $
+ */
+
+#include "chathandler.h"
+
+#include <SDL_types.h>
+#include <string>
+#include <sstream>
+#include <iostream>
+
+#include "messagein.h"
+#include "protocol.h"
+#include "messageout.h"
+#include "../automation.h"
+#include "../game.h"
+#include "../utils/stringutils.h"
+#include "nethandler.h"
+
+ChatHandler::ChatHandler()
+{
+ static const Uint16 _messages[] = {
+ SMSG_BEING_CHAT,
+ SMSG_PLAYER_CHAT,
+ SMSG_WHISPER,
+ SMSG_WHISPER_RESPONSE,
+ SMSG_GM_CHAT,
+ 0
+ };
+ handledMessages = _messages;
+}
+
+void ChatHandler::handleMessage(MessageIn *msg)
+{
+ //Being *being;
+ std::string chatMsg;
+ std::stringstream ss;
+ Sint16 chatMsgLength;
+
+ switch (msg->getId())
+ {
+ // Received speech from being
+ case SMSG_BEING_CHAT:
+ {
+
+ chatMsgLength = msg->readInt16() - 8;
+ msg->readInt32();
+
+ if (chatMsgLength <= 0)
+ break;
+
+ chatMsg = msg->readString(chatMsgLength);
+
+ std::string::size_type pos = chatMsg.find(" : ", 0);
+ std::string sender_name = ((pos == std::string::npos)
+ ? ""
+ : chatMsg.substr(0, pos));
+
+ std::string mess = chatMsg.substr(pos+3);
+ // do something with chat
+ break;
+ }
+ case SMSG_WHISPER:
+ {
+ chatMsgLength = msg->readInt16() - 28;
+ std::string nick = msg->readString(24);
+
+ if (chatMsgLength <= 0)
+ break;
+
+ chatMsg = msg->readString(chatMsgLength);
+ Automation::getAutomationHandler()->commandHandler(chatMsg, nick);
+
+ break;
+ }
+ case SMSG_WHISPER_RESPONSE:
+ {
+ int type = msg->readInt8();
+ switch (type)
+ {
+ case 0x00:
+ break;
+ case 0x01:
+ //logger->log("Whisper could not be sent, user is offline.");
+ break;
+ case 0x02:
+ //logger->log("Whisper could not be sent, ignored by user.");
+ break;
+ default:
+ /*if (logger)
+ logger->log("Unkown Whisper Response.");*/
+ break;
+ }
+ break;
+ }
+ case SMSG_PLAYER_CHAT:
+ case SMSG_GM_CHAT:
+ {
+ chatMsgLength = msg->readInt16() - 4;
+
+ if (chatMsgLength <= 0)
+ {
+ break;
+ }
+
+ chatMsg = msg->readString(chatMsgLength);
+
+ if (msg->getId() == SMSG_PLAYER_CHAT)
+ {
+
+ std::string::size_type pos = chatMsg.find(" : ", 0);
+ if (pos != std::string::npos)
+ {
+ chatMsg.erase(0, pos + 3);
+ }
+ //player_node->setSpeech(chatMsg, SPEECH_TIME);
+ }
+ else
+ {
+ //chatWindow->chatLog(chatMsg, BY_GM);
+ }
+ break;
+ }
+
+
+ }
+}