X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_watch.cpp;h=9b98ca83badedc4b958e6ab5f3301e89b55b1b08;hb=b5e220008782b2d538cb8e6e3b1923af0c13fb99;hp=e9c0c3025b85122123f632ac164885a234df6ce6;hpb=c5e16f83df83e251f93e30f90e094abc4bf03248;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_watch.cpp b/src/modules/m_watch.cpp index e9c0c3025..9b98ca83b 100644 --- a/src/modules/m_watch.cpp +++ b/src/modules/m_watch.cpp @@ -2,8 +2,8 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd: (C) 2002-2008 InspIRCd Development Team - * See: http://www.inspircd.org/wiki/index.php/Credits + * InspIRCd: (C) 2002-2009 InspIRCd Development Team + * See: http://wiki.inspircd.org/Credits * * This program is free but copyrighted software; see * the file COPYING for details. @@ -87,10 +87,10 @@ * Before you start screaming, this definition is only used here, so moving it to a header is pointless. * Yes, it's horrid. Blame cl for being different. -- w00t */ -#ifdef WINDOWS -typedef nspace::hash_map, nspace::hash_compare > > watchentries; +#if defined(WINDOWS) && !defined(HASHMAP_DEPRECATED) + typedef nspace::hash_map, nspace::hash_compare > > watchentries; #else -typedef nspace::hash_map, nspace::hash > watchentries; + typedef nspace::hash_map, nspace::hash > watchentries; #endif typedef std::map watchlist; @@ -162,7 +162,7 @@ class CommandWatch : public Command wl->erase(n); } - if (!wl->size()) + if (wl->empty()) { user->Shrink("watchlist"); delete wl; @@ -177,16 +177,13 @@ class CommandWatch : public Command /* I'm no longer watching you... */ x->second.erase(n2); - if (!x->second.size()) + if (x->second.empty()) + /* nobody else is, either. */ whos_watching_me->erase(nick); } } - /* This might seem confusing, but we return CMD_FAILURE - * to indicate that this message shouldnt be routed across - * the network to other linked servers. - */ - return CMD_FAILURE; + return CMD_LOCALONLY; } CmdResult add_watch(User* user, const char* nick) @@ -251,7 +248,7 @@ class CommandWatch : public Command } } - return CMD_FAILURE; + return CMD_LOCALONLY; } CommandWatch (InspIRCd* Instance, unsigned int &maxwatch) : Command(Instance,"WATCH",0,0), MAX_WATCH(maxwatch) @@ -263,7 +260,7 @@ class CommandWatch : public Command CmdResult Handle (const std::vector ¶meters, User *user) { - if (!parameters.size()) + if (parameters.empty()) { watchlist* wl; if (user->GetExt("watchlist", wl)) @@ -298,8 +295,9 @@ class CommandWatch : public Command /* I'm no longer watching you... */ i2->second.erase(n); - if (!i2->second.size()) - whos_watching_me->erase(user->nick.c_str()); + if (i2->second.empty()) + /* nobody else is, either. */ + whos_watching_me->erase(i2); } } @@ -363,32 +361,29 @@ class CommandWatch : public Command } } } - /* So that spanningtree doesnt pass the WATCH commands to the network! */ - return CMD_FAILURE; + return CMD_LOCALONLY; } }; class Modulewatch : public Module { - CommandWatch* mycommand; - CommandSVSWatch *sw; unsigned int maxwatch; + CommandWatch cmdw; + CommandSVSWatch sw; public: Modulewatch(InspIRCd* Me) - : Module(Me), maxwatch(32) + : Module(Me), maxwatch(32), cmdw(Me, maxwatch), sw(Me) { - OnRehash(NULL, ""); + OnRehash(NULL); whos_watching_me = new watchentries(); - mycommand = new CommandWatch(ServerInstance, maxwatch); - ServerInstance->AddCommand(mycommand); - sw = new CommandSVSWatch(ServerInstance); - ServerInstance->AddCommand(sw); + ServerInstance->AddCommand(&cmdw); + ServerInstance->AddCommand(&sw); Implementation eventlist[] = { I_OnRehash, I_OnGarbageCollect, I_OnCleanup, I_OnUserQuit, I_OnPostConnect, I_OnUserPostNick, I_On005Numeric, I_OnSetAway }; ServerInstance->Modules->Attach(eventlist, this, 8); } - virtual void OnRehash(User* user, const std::string ¶meter) + virtual void OnRehash(User* user) { ConfigReader Conf(ServerInstance); maxwatch = Conf.ReadInteger("watch", "maxentries", 0, true); @@ -458,8 +453,9 @@ class Modulewatch : public Module /* I'm no longer watching you... */ i2->second.erase(n); - if (!i2->second.size()) - whos_watching_me->erase(x); + if (i2->second.empty()) + /* and nobody else is, either. */ + whos_watching_me->erase(i2); } }