]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules.cpp
Convert WriteNumeric() calls to pass the parameters of the numeric as method parameters
[user/henk/code/inspircd.git] / src / modules.cpp
index 79a71652c4052f636f4fa918aae6118cff7c8879..28ded66d84dca6acc8e737404b0a13c2f9ff3971 100644 (file)
@@ -114,7 +114,7 @@ ModResult   Module::OnPreTopicChange(User*, Channel*, const std::string&) { Detach
 ModResult      Module::OnPassCompare(Extensible* ex, const std::string &password, const std::string &input, const std::string& hashtype) { DetachEvent(I_OnPassCompare); return MOD_RES_PASSTHRU; }
 void           Module::OnPostConnect(User*) { DetachEvent(I_OnPostConnect); }
 void           Module::OnUserMessage(User*, void*, int, const std::string&, char, const CUList&, MessageType) { DetachEvent(I_OnUserMessage); }
-void           Module::OnUserInvite(User*, User*, Channel*, time_t) { DetachEvent(I_OnUserInvite); }
+void           Module::OnUserInvite(User*, User*, Channel*, time_t, unsigned int, CUList&) { DetachEvent(I_OnUserInvite); }
 void           Module::OnPostTopicChange(User*, Channel*, const std::string&) { DetachEvent(I_OnPostTopicChange); }
 void           Module::OnSyncUser(User*, ProtocolInterface::Server&) { DetachEvent(I_OnSyncUser); }
 void           Module::OnSyncChannel(Channel*, ProtocolInterface::Server&) { DetachEvent(I_OnSyncChannel); }
@@ -135,7 +135,7 @@ void                Module::OnGarbageCollect() { DetachEvent(I_OnGarbageCollect); }
 ModResult      Module::OnSetConnectClass(LocalUser* user, ConnectClass* myclass) { DetachEvent(I_OnSetConnectClass); return MOD_RES_PASSTHRU; }
 void           Module::OnText(User*, void*, int, const std::string&, char, CUList&) { DetachEvent(I_OnText); }
 ModResult      Module::OnNamesListItem(User*, Membership*, std::string&, std::string&) { DetachEvent(I_OnNamesListItem); return MOD_RES_PASSTHRU; }
-ModResult      Module::OnNumeric(User*, unsigned int, const std::string&) { DetachEvent(I_OnNumeric); return MOD_RES_PASSTHRU; }
+ModResult      Module::OnNumeric(User*, const Numeric::Numeric&) { DetachEvent(I_OnNumeric); return MOD_RES_PASSTHRU; }
 ModResult   Module::OnAcceptConnection(int, ListenSocket*, irc::sockets::sockaddrs*, irc::sockets::sockaddrs*) { DetachEvent(I_OnAcceptConnection); return MOD_RES_PASSTHRU; }
 void           Module::OnSendWhoLine(User*, const std::vector<std::string>&, User*, Membership*, std::string&) { DetachEvent(I_OnSendWhoLine); }
 void           Module::OnSetUserIP(LocalUser*) { DetachEvent(I_OnSetUserIP); }
@@ -528,22 +528,6 @@ void ModuleManager::AddService(ServiceProvider& item)
 {
        switch (item.service)
        {
-               case SERVICE_COMMAND:
-                       if (!ServerInstance->Parser.AddCommand(static_cast<Command*>(&item)))
-                               throw ModuleException("Command "+std::string(item.name)+" already exists.");
-                       return;
-               case SERVICE_MODE:
-               {
-                       ModeHandler* mh = static_cast<ModeHandler*>(&item);
-                       ServerInstance->Modes->AddMode(mh);
-                       DataProviders.insert(std::make_pair((mh->GetModeType() == MODETYPE_CHANNEL ? "mode/" : "umode/") + item.name, &item));
-                       dynamic_reference_base::reset_all();
-                       return;
-               }
-               case SERVICE_METADATA:
-                       if (!ServerInstance->Extensions.Register(static_cast<ExtensionItem*>(&item)))
-                               throw ModuleException("Extension " + std::string(item.name) + " already exists.");
-                       return;
                case SERVICE_DATA:
                case SERVICE_IOHOOK:
                {
@@ -561,7 +545,7 @@ void ModuleManager::AddService(ServiceProvider& item)
                        return;
                }
                default:
-                       throw ModuleException("Cannot add unknown service type");
+                       item.RegisterService();
        }
 }
 
@@ -576,13 +560,7 @@ void ModuleManager::DelService(ServiceProvider& item)
                case SERVICE_DATA:
                case SERVICE_IOHOOK:
                {
-                       for(std::multimap<std::string, ServiceProvider*>::iterator i = DataProviders.begin(); i != DataProviders.end(); )
-                       {
-                               std::multimap<std::string, ServiceProvider*>::iterator curr = i++;
-                               if (curr->second == &item)
-                                       DataProviders.erase(curr);
-                       }
-                       dynamic_reference_base::reset_all();
+                       DelReferent(&item);
                        return;
                }
                default:
@@ -674,3 +652,22 @@ Module* ModuleManager::Find(const std::string &name)
        else
                return modfind->second;
 }
+
+void ModuleManager::AddReferent(const std::string& name, ServiceProvider* service)
+{
+       DataProviders.insert(std::make_pair(name, service));
+       dynamic_reference_base::reset_all();
+}
+
+void ModuleManager::DelReferent(ServiceProvider* service)
+{
+       for (std::multimap<std::string, ServiceProvider*>::iterator i = DataProviders.begin(); i != DataProviders.end(); )
+       {
+               ServiceProvider* curr = i->second;
+               if (curr == service)
+                       DataProviders.erase(i++);
+               else
+                       ++i;
+       }
+       dynamic_reference_base::reset_all();
+}