]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_spanningtree/override_map.cpp
m_spanningtree Remove duplicate code for sending channel messages from RouteCommand()
[user/henk/code/inspircd.git] / src / modules / m_spanningtree / override_map.cpp
index 8e2c669c0d3f191e654a651d7e0deb53b2e41033..14d0a3b4fa6135e9e0f82f5375d60fe6ef073299 100644 (file)
 #include "main.h"
 #include "utils.h"
 #include "treeserver.h"
+#include "commands.h"
 
-/* $ModDep: m_spanningtree/main.h m_spanningtree/utils.h m_spanningtree/treeserver.h */
+CommandMap::CommandMap(Module* Creator)
+       : Command(Creator, "MAP", 0, 1)
+{
+       Penalty = 2;
+}
 
-const std::string ModuleSpanningTree::MapOperInfo(TreeServer* Current)
+std::string CommandMap::MapOperInfo(TreeServer* Current)
 {
        time_t secs_up = ServerInstance->Time() - Current->age;
-       return " [Up: " + TimeToStr(secs_up) + (Current->rtt == 0 ? "]" : " Lag: " + ConvToStr(Current->rtt) + "ms]");
+       return " [Up: " + ModuleSpanningTree::TimeToStr(secs_up) + (Current->rtt == 0 ? "]" : " Lag: " + ConvToStr(Current->rtt) + "ms]");
 }
 
-void ModuleSpanningTree::ShowMap(TreeServer* Current, User* user, int depth, int &line, char* names, int &maxnamew, char* stats)
+void CommandMap::ShowMap(TreeServer* Current, User* user, int depth, int &line, char* names, int &maxnamew, char* stats)
 {
        ServerInstance->Logs->Log(MODNAME, LOG_DEBUG, "ShowMap depth %d on line %d", depth, line);
        float percent;
@@ -94,38 +99,27 @@ void ModuleSpanningTree::ShowMap(TreeServer* Current, User* user, int depth, int
 // and divisons, we instead render the map onto a backplane of characters
 // (a character matrix), then draw the branches as a series of "L" shapes
 // from the nodes. This is not only friendlier on CPU it uses less stack.
-bool ModuleSpanningTree::HandleMap(const std::vector<std::string>& parameters, User* user)
+CmdResult CommandMap::Handle(const std::vector<std::string>& parameters, User* user)
 {
        if (parameters.size() > 0)
        {
                /* Remote MAP, the server is within the 1st parameter */
                TreeServer* s = Utils->FindServerMask(parameters[0]);
-               bool ret = false;
                if (!s)
                {
                        user->WriteNumeric(ERR_NOSUCHSERVER, "%s %s :No such server", user->nick.c_str(), parameters[0].c_str());
-                       ret = true;
+                       return CMD_FAILURE;
                }
-               else if (s && s != Utils->TreeRoot)
-               {
-                       parameterlist params;
-                       params.push_back(parameters[0]);
 
-                       params[0] = s->GetName();
-                       Utils->DoOneToOne(user->uuid, "MAP", params, s->GetName());
-                       ret = true;
-               }
-
-               // Don't return if s == Utils->TreeRoot (us)
-               if (ret)
-                       return true;
+               if (!s->IsRoot())
+                       return CMD_SUCCESS;
        }
 
        // These arrays represent a virtual screen which we will
        // "scratch" draw to, as the console device of an irc
        // client does not provide for a proper terminal.
        int totusers = ServerInstance->Users->clientlist->size();
-       int totservers = this->CountServs();
+       int totservers = Utils->serverlist.size();
        int maxnamew = 0;
        int line = 0;
        char* names = new char[totservers * 100];
@@ -186,6 +180,12 @@ bool ModuleSpanningTree::HandleMap(const std::vector<std::string>& parameters, U
        delete[] names;
        delete[] stats;
 
-       return true;
+       return CMD_SUCCESS;
 }
 
+RouteDescriptor CommandMap::GetRouting(User* user, const std::vector<std::string>& parameters)
+{
+       if (!parameters.empty())
+               return ROUTE_UNICAST(parameters[0]);
+       return ROUTE_LOCALONLY;
+}