#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")
{
}
* @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.
* @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)
+ {
+ }
};