]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/commands/cmd_lusers.cpp
Clean up the protocol interface
[user/henk/code/inspircd.git] / src / commands / cmd_lusers.cpp
index c594a0e2434144180bdda99ae1e8910c67ce3e4f..06419733d4ce0c699c828039015af8b0e8864fae 100644 (file)
@@ -26,10 +26,10 @@ struct LusersCounters
        unsigned int max_global;
        unsigned int invisible;
 
-       LusersCounters()
+       LusersCounters(unsigned int inv)
                : max_local(ServerInstance->Users->LocalUserCount())
                , max_global(ServerInstance->Users->RegisteredUserCount())
-               , invisible(ServerInstance->Users->ModeCount('i'))
+               , invisible(inv)
        {
        }
 
@@ -73,11 +73,11 @@ class CommandLusers : public Command
 CmdResult CommandLusers::Handle (const std::vector<std::string>&, User *user)
 {
        unsigned int n_users = ServerInstance->Users->RegisteredUserCount();
-       ProtoServerList serverlist;
+       ProtocolInterface::ServerList serverlist;
        ServerInstance->PI->GetServerList(serverlist);
        unsigned int n_serv = serverlist.size();
        unsigned int n_local_servs = 0;
-       for(ProtoServerList::iterator i = serverlist.begin(); i != serverlist.end(); ++i)
+       for (ProtocolInterface::ServerList::const_iterator i = serverlist.begin(); i != serverlist.end(); ++i)
        {
                if (i->parentname == ServerInstance->Config->ServerName)
                        n_local_servs++;
@@ -128,34 +128,48 @@ public:
 
 class ModuleLusers : public Module
 {
+       UserModeReference invisiblemode;
        LusersCounters counters;
        CommandLusers cmd;
        InvisibleWatcher mw;
 
+       unsigned int CountInvisible()
+       {
+               unsigned int c = 0;
+               for (user_hash::iterator i = ServerInstance->Users->clientlist->begin(); i != ServerInstance->Users->clientlist->end(); ++i)
+               {
+                       User* u = i->second;
+                       if (u->IsModeSet(invisiblemode))
+                               c++;
+               }
+               return c;
+       }
+
  public:
        ModuleLusers()
-               : cmd(this, counters), mw(this, counters.invisible)
+               : invisiblemode(this, "invisible")
+               , counters(CountInvisible())
+               , cmd(this, counters)
+               , mw(this, counters.invisible)
        {
        }
 
        void init()
        {
                ServerInstance->Modules->AddService(cmd);
-               Implementation events[] = { I_OnPostConnect, I_OnUserQuit };
-               ServerInstance->Modules->Attach(events, this, sizeof(events)/sizeof(Implementation));
                ServerInstance->Modes->AddModeWatcher(&mw);
        }
 
        void OnPostConnect(User* user)
        {
                counters.UpdateMaxUsers();
-               if (user->IsModeSet('i'))
+               if (user->IsModeSet(invisiblemode))
                        counters.invisible++;
        }
 
        void OnUserQuit(User* user, const std::string& message, const std::string& oper_message)
        {
-               if (user->IsModeSet('i'))
+               if (user->IsModeSet(invisiblemode))
                        counters.invisible--;
        }