From 4d0cd408dfabdcd0b95b5305e47a594ff958c74a Mon Sep 17 00:00:00 2001 From: om Date: Sun, 23 Jul 2006 15:32:22 +0000 Subject: Add an ID field to Request and a GetId() method, takes const char* and returns it - Added new constructor to use it, all modules using ID should convert to the 'new' way of doing Requests, data is now theoretically depreceiated git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@4529 e03df62e-2008-0410-955e-edbf42e46eb7 --- include/modules.h | 22 ++++++++++++++++++++++ src/modules.cpp | 27 +++++++++++++++++++++++---- 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/include/modules.h b/include/modules.h index 18a4a6dbb..fdc1ac178 100644 --- a/include/modules.h +++ b/include/modules.h @@ -193,6 +193,11 @@ class Request : public ModuleMessage /** This member holds a pointer to arbitary data set by the emitter of the message */ char* data; + /** This should be a null-terminated string identifying the type of request, + * all modules should define this and use it to determine the nature of the + * request before they attempt to cast the Request in any way. + */ + const char* id; /** This is a pointer to the sender of the message, which can be used to * directly trigger events, or to create a reply. */ @@ -202,11 +207,28 @@ class Request : public ModuleMessage Module* dest; public: /** Create a new Request + * This is for the 'old' way of casting whatever the data is + * to char* and hoping you get the right thing at the other end. + * This is slowly being depreciated in favor of the 'new' way. */ Request(char* anydata, Module* src, Module* dst); + /** Create a new Request + * This is for the 'new' way of defining a subclass + * of Request and defining it in a common header, + * passing an object of your Request subclass through + * as a Request* and using the ID string to determine + * what to cast it back to and the other end. This is + * much safer as there are no casts not confirmed by + * the ID string, and all casts are child->parent and + * can be checked at runtime with dynamic_cast<>() + */ + Request(Module* src, Module* dst, const char* idstr); /** Fetch the Request data */ char* GetData(); + /** Fetch the ID string + */ + const char* GetId(); /** Fetch the request source */ Module* GetSource(); diff --git a/src/modules.cpp b/src/modules.cpp index ca533b523..13cc3e740 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -64,17 +64,36 @@ featurelist Features; // version is a simple class for holding a modules version number -Version::Version(int major, int minor, int revision, int build, int flags) : Major(major), Minor(minor), Revision(revision), Build(build), Flags(flags) { }; +Version::Version(int major, int minor, int revision, int build, int flags) +: Major(major), Minor(minor), Revision(revision), Build(build), Flags(flags) +{ +} // admin is a simple class for holding a server's administrative info -Admin::Admin(std::string name, std::string email, std::string nick) : Name(name), Email(email), Nick(nick) { }; +Admin::Admin(std::string name, std::string email, std::string nick) +: Name(name), Email(email), Nick(nick) +{ +} -Request::Request(char* anydata, Module* src, Module* dst) : data(anydata), source(src), dest(dst) { }; +Request::Request(char* anydata, Module* src, Module* dst) +: data(anydata), source(src), dest(dst) +{ +} + +Request::Request(Module* src, Module* dst, const char* idstr) +: id(idstr), source(src), dest(dst) +{ +}; char* Request::GetData() { - return (char*)this->data; + return this->data; +} + +const char* Request::GetId() +{ + return this->id; } Module* Request::GetSource() -- cgit v1.2.3