]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/modules/server.h
Split ServerEventListener into {Broadcast,Link,Sync}EventListener.
[user/henk/code/inspircd.git] / include / modules / server.h
index 99bd2ee1d26ecb44f2b6f8c2826fb45802016a36..6bd10b3e3ef603a678f50527fa7dce990d8b3d15 100644 (file)
 
 #include "event.h"
 
-class ServerEventListener : public Events::ModuleEventListener
+namespace ServerProtocol
+{
+       class BroadcastEventListener;
+       class LinkEventListener;
+       class SyncEventListener;
+}
+
+class ServerProtocol::BroadcastEventListener
+       : public Events::ModuleEventListener
 {
  public:
-       ServerEventListener(Module* mod)
-               : ModuleEventListener(mod, "event/server")
+       BroadcastEventListener(Module* mod)
+               : ModuleEventListener(mod, "event/server-broadcast")
+       {
+       }
+
+       /** Fired when a channel message is being broadcast across the network.
+        * @param channel The channel which is having a message sent to it.
+        * @param server The server which might have a message broadcast to it.
+        * @return Either MOD_RES_ALLOW to always send the message to the server, MOD_RES_DENY to never
+        *         send the message to the server or MOD_RES_PASSTHRU if no module handled the event.
+        */
+       virtual ModResult OnBroadcastMessage(Channel* channel, const Server* server) { return MOD_RES_PASSTHRU; }
+};
+
+class ServerProtocol::LinkEventListener
+       : public Events::ModuleEventListener
+{
+ public:
+       LinkEventListener(Module* mod)
+               : ModuleEventListener(mod, "event/server-link")
        {
        }
 
@@ -38,6 +64,16 @@ class ServerEventListener : public Events::ModuleEventListener
          * @param server Server that split
          */
        virtual void OnServerSplit(const Server* server) { }
+};
+
+class ServerProtocol::SyncEventListener
+       : public Events::ModuleEventListener
+{
+ public:
+       SyncEventListener(Module* mod)
+               : ModuleEventListener(mod, "event/server-sync")
+       {
+       }
 
        /** Allows modules to synchronize user metadata during a netburst. This will
         * be called for every user visible on your side of the burst.
@@ -57,5 +93,19 @@ class ServerEventListener : public Events::ModuleEventListener
         * @param server The target of the burst.
         */
        virtual void OnSyncNetwork(ProtocolServer& server) { }
-       
+};
+
+/** Compatibility struct for <3.3.0 modules. */
+class ServerEventListener
+       : public ServerProtocol::BroadcastEventListener
+       , public ServerProtocol::LinkEventListener
+       , public ServerProtocol::SyncEventListener
+{
+ public:
+       ServerEventListener(Module* mod)
+               : ServerProtocol::BroadcastEventListener(mod)
+               , ServerProtocol::LinkEventListener(mod)
+               , ServerProtocol::SyncEventListener(mod)
+       {
+       }
 };