]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_spanningtree/override_map.cpp
Optimize some behaviour in the core (#1476).
[user/henk/code/inspircd.git] / src / modules / m_spanningtree / override_map.cpp
index 216fd4d66d53f030babff73c1f274a0483ee0e90..d1a00ed84b9245c66ee5937f446efcd903a67e35 100644 (file)
@@ -66,24 +66,29 @@ static std::vector<std::string> GetMap(User* user, TreeServer* current, unsigned
 {
        float percent = 0;
 
-       if (!ServerInstance->Users->clientlist->empty())
+       const user_hash& users = ServerInstance->Users->GetUsers();
+       if (!users.empty())
        {
                // If there are no users, WHO THE HELL DID THE /MAP?!?!?!
-               percent = current->UserCount * 100.0 / ServerInstance->Users->clientlist->size();
+               percent = current->UserCount * 100.0 / users.size();
        }
 
        std::string buffer = current->GetName();
        if (user->IsOper())
        {
-               buffer += " (" + current->GetID() + ")";
+               buffer += " (" + current->GetID();
+
+               const std::string& cur_vers = current->GetRawVersion();
+               if (!cur_vers.empty())
+                       buffer += " " + cur_vers;
+
+               buffer += ")";
        }
 
        // Pad with spaces until its at max len, max_len must always be >= my names length
        buffer.append(max_len - current->GetName().length(), ' ');
 
-       char buf[16];
-       snprintf(buf, sizeof(buf), "%5d [%5.2f%%]", current->UserCount, percent);
-       buffer += buf;
+       buffer += InspIRCd::Format("%5d [%5.2f%%]", current->UserCount, percent);
 
        if (user->IsOper())
        {
@@ -167,11 +172,11 @@ CmdResult CommandMap::Handle(const std::vector<std::string>& parameters, User* u
 {
        if (parameters.size() > 0)
        {
-               /* Remote MAP, the server is within the 1st parameter */
+               // Remote MAP, the target server is the 1st parameter
                TreeServer* s = Utils->FindServerMask(parameters[0]);
                if (!s)
                {
-                       user->WriteNumeric(ERR_NOSUCHSERVER, "%s :No such server", parameters[0].c_str());
+                       user->WriteNumeric(ERR_NOSUCHSERVER, parameters[0], "No such server");
                        return CMD_FAILURE;
                }
 
@@ -198,17 +203,14 @@ CmdResult CommandMap::Handle(const std::vector<std::string>& parameters, User* u
 
        std::vector<std::string> map = GetMap(user, Utils->TreeRoot, max, 0);
        for (std::vector<std::string>::const_iterator i = map.begin(); i != map.end(); ++i)
-               user->SendText(":%s %03d %s :%s", ServerInstance->Config->ServerName.c_str(),
-                       RPL_MAP, user->nick.c_str(), i->c_str());
+               user->WriteRemoteNumeric(RPL_MAP, *i);
 
-       size_t totusers = ServerInstance->Users->clientlist->size();
+       size_t totusers = ServerInstance->Users->GetUsers().size();
        float avg_users = (float) totusers / Utils->serverlist.size();
 
-       user->SendText(":%s %03d %s :%u server%s and %u user%s, average %.2f users per server",
-               ServerInstance->Config->ServerName.c_str(), RPL_MAPUSERS, user->nick.c_str(),
-               (unsigned int)Utils->serverlist.size(), (Utils->serverlist.size() > 1 ? "s" : ""), (unsigned int)totusers, (totusers > 1 ? "s" : ""), avg_users);
-       user->SendText(":%s %03d %s :End of /MAP", ServerInstance->Config->ServerName.c_str(),
-               RPL_ENDMAP, user->nick.c_str());
+       user->WriteRemoteNumeric(RPL_MAPUSERS, InspIRCd::Format("%u server%s and %u user%s, average %.2f users per server",
+               (unsigned int)Utils->serverlist.size(), (Utils->serverlist.size() > 1 ? "s" : ""), (unsigned int)totusers, (totusers > 1 ? "s" : ""), avg_users));
+       user->WriteRemoteNumeric(RPL_ENDMAP, "End of /MAP");
 
        return CMD_SUCCESS;
 }