summaryrefslogtreecommitdiff
path: root/src/commandhandler.cpp
diff options
context:
space:
mode:
authorRoderic Morris <roderic@ccs.neu.edu>2008-06-10 00:45:21 +0000
committerRoderic Morris <roderic@ccs.neu.edu>2008-06-10 00:45:21 +0000
commitf6f031fa4db6fa0ccd6e0b433f61479e9fd85477 (patch)
treef68634271d7e7f315c122ed7a3a08ad1d05b58b6 /src/commandhandler.cpp
parent2cf38d37f86c5e5d82d77713afd093735db0598a (diff)
downloadmana-f6f031fa4db6fa0ccd6e0b433f61479e9fd85477.tar.gz
mana-f6f031fa4db6fa0ccd6e0b433f61479e9fd85477.tar.bz2
mana-f6f031fa4db6fa0ccd6e0b433f61479e9fd85477.tar.xz
mana-f6f031fa4db6fa0ccd6e0b433f61479e9fd85477.zip
add commandhandler class and fix / add some commands
Diffstat (limited to 'src/commandhandler.cpp')
-rw-r--r--src/commandhandler.cpp189
1 files changed, 189 insertions, 0 deletions
diff --git a/src/commandhandler.cpp b/src/commandhandler.cpp
new file mode 100644
index 00000000..07184f66
--- /dev/null
+++ b/src/commandhandler.cpp
@@ -0,0 +1,189 @@
+/*
+ * The Mana World
+ * Copyright 2008 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$
+ */
+
+
+#include "commandhandler.h"
+#include "channelmanager.h"
+#include "channel.h"
+#include "game.h"
+#include "gui/chat.h"
+#include "net/chatserver/chatserver.h"
+#include "net/gameserver/player.h"
+
+void CommandHandler::handleCommand(const std::string &command)
+{
+ std::string::size_type pos = command.find(' ');
+ std::string type(command, 0, pos);
+ std::string args(command, pos == std::string::npos ? command.size() : pos + 1);
+
+ if (type == "announce")
+ {
+ handleAnnounce(args);
+ }
+ else if (type == "help")
+ {
+ handleHelp();
+ }
+ else if (type == "where")
+ {
+ handleWhere();
+ }
+ else if (type == "who")
+ {
+ handleWho();
+ }
+ else if (type == "msg")
+ {
+ handleMsg(args);
+ }
+ else if (type == "channel")
+ {
+ handleChannel(args);
+ }
+ else if (type == "join")
+ {
+ handleJoin(args);
+ }
+ else if (type == "listchannels")
+ {
+ handleListChannels();
+ }
+ else if (type == "listusers")
+ {
+ handleListUsers();
+ }
+ else if (type == "quit")
+ {
+ handleQuit();
+ }
+ else if (type == "admin")
+ {
+ Net::GameServer::Player::say("/" + args);
+ }
+ else if (type == "clear")
+ {
+ handleClear();
+ }
+ else
+ {
+ chatWindow->chatLog("Unknown command");
+ }
+}
+
+void CommandHandler::handleAnnounce(const std::string &args)
+{
+ Net::ChatServer::announce(args);
+}
+
+void CommandHandler::handleHelp()
+{
+ chatWindow->chatLog("-- Help --");
+ chatWindow->chatLog("/help > Display this help.");
+ chatWindow->chatLog("/announce > Global announcement (GM only)");
+ chatWindow->chatLog("/where > Display map name");
+ chatWindow->chatLog("/who > Display number of online users");
+ chatWindow->chatLog("/msg > Send a private message to a user");
+ chatWindow->chatLog("/listchannels > Display all public channels");
+ chatWindow->chatLog("/listusers > Lists the users in the current channel");
+ chatWindow->chatLog("/channel > Register a new channel");
+ chatWindow->chatLog("/join > Join an already registered channel");
+ chatWindow->chatLog("/quit > Leave a channel");
+ chatWindow->chatLog("/admin > Send a command to the server (GM only)");
+ chatWindow->chatLog("/clear > Clears this window");
+}
+
+void CommandHandler::handleWhere()
+{
+ chatWindow->chatLog(map_path, BY_SERVER);
+}
+
+void CommandHandler::handleWho()
+{
+
+}
+
+void CommandHandler::handleMsg(const std::string &args)
+{
+ std::string::size_type pos = args.find(' ');
+ std::string recipient(args, 0, pos);
+ std::string text(args, pos+1);
+ Net::ChatServer::privMsg(recipient, text);
+}
+
+void CommandHandler::handleChannel(const std::string &args)
+{
+ std::string::size_type pos = args.find(" ");
+ std::string name(args, 0, pos);
+ std::string password;
+ std::string announcement;
+ if(pos == std::string::npos)
+ {
+ password = std::string();
+ announcement = std::string();
+ }
+ else
+ {
+ password = std::string(args, pos + 1, args.find(" ", pos + 1) - pos - 1);
+ pos = args.find("\"");
+ announcement = std::string(args, pos == std::string::npos ? args.size() :
+ pos + 1, args.size() - pos - 2);
+ }
+ chatWindow->chatLog("Requesting to register channel " + name);
+ Net::ChatServer::registerChannel(name, announcement, password);
+}
+
+void CommandHandler::handleJoin(const std::string &args)
+{
+ std::string::size_type pos = args.find(' ');
+ std::string name(args, 0, pos);
+ std::string password(args, pos+1);
+ chatWindow->chatLog("Requesting to join channel " + name);
+ Net::ChatServer::enterChannel(name, password);
+}
+
+void CommandHandler::handleListChannels()
+{
+ Net::ChatServer::getChannelList();
+}
+
+void CommandHandler::handleListUsers()
+{
+ Net::ChatServer::getUserList(chatWindow->getFocused());
+}
+
+void CommandHandler::handleQuit()
+{
+ if (Channel *channel = channelManager->findByName(chatWindow->getFocused()))
+ {
+ Net::ChatServer::quitChannel(channel->getId());
+ }
+ else
+ {
+ chatWindow->chatLog("Unable to quit this channel", BY_CHANNEL);
+ }
+}
+
+void CommandHandler::handleClear()
+{
+ chatWindow->clearTab(chatWindow->getFocused());
+}