00001 /* 00002 00003 $Log$ 00003 Revision 1.4 2003/01/27 00:22:39 brain 00003 Modified documentation 00003 00004 Revision 1.2 2003/01/26 23:52:59 brain 00005 Modified documentation for base classes 00006 Added base classes 00007 00008 Revision 1.1.1.1 2003/01/23 19:45:58 brain 00009 InspIRCd second source tree 00010 00011 Revision 1.12 2003/01/22 20:59:10 brain 00012 Added FileReader class documentation 00013 00014 Revision 1.11 2003/01/22 20:49:16 brain 00015 Added FileReader file-caching class 00016 Changed m_randquote to use FileReader class 00017 00018 Revision 1.10 2003/01/22 00:57:27 brain 00019 Changes to documentation 00020 00021 Revision 1.9 2003/01/22 00:44:26 brain 00022 Added documentation comments 00023 00024 Revision 1.8 2003/01/21 20:31:24 brain 00025 Modified to add documentation 00026 Added ConfigReader class for modules 00027 00028 Revision 1.7 2003/01/15 22:47:44 brain 00029 Changed user and channel structs to classes (finally) 00030 00031 Revision 1.6 2003/01/13 22:30:50 brain 00032 Added Admin class (holds /admin info for modules) 00033 Added methods to Server class 00034 00035 00036 */ 00037 00038 00039 #ifndef __PLUGIN_H 00040 #define __PLUGIN_H 00041 00042 #include "dynamic.h" 00043 #include "base.h" 00044 #include <string> 00045 #include <deque> 00046 00049 typedef deque<string> file_cache; 00050 00051 00052 // This #define allows us to call a method in all 00053 // loaded modules in a readable simple way, e.g.: 00054 // 'FOREACH_MOD OnConnect(user);' 00055 00056 #define FOREACH_MOD for (int i = 0; i <= MODCOUNT; i++) modules[i]-> 00057 00058 // class Version holds the version information of a Module, returned 00059 // by Module::GetVersion (thanks RD) 00060 00065 class Version : public classbase 00066 { 00067 public: 00068 const int Major, Minor, Revision, Build; 00069 Version(int major, int minor, int revision, int build); 00070 }; 00071 00072 00078 class Admin : public classbase 00079 { 00080 public: 00081 const string Name, Email, Nick; 00082 Admin(string name,string email,string nick); 00083 }; 00084 00090 class Module : public classbase 00091 { 00092 public: 00096 Module(); 00100 virtual ~Module(); 00105 virtual Version GetVersion(); 00109 virtual void OnUserConnect(userrec* user); 00113 virtual void OnUserQuit(userrec* user); 00118 virtual void OnUserJoin(userrec* user, chanrec* channel); 00123 virtual void OnUserPart(userrec* user, chanrec* channel); 00124 }; 00125 00126 00132 class Server : public classbase 00133 { 00134 public: 00138 Server(); 00142 virtual ~Server(); 00143 00147 virtual void SendOpers(string s); 00152 virtual void Debug(string s); 00157 virtual void Send(int Socket, string s); 00162 virtual void SendServ(int Socket, string s); 00167 virtual void SendFrom(int Socket, userrec* User, string s); 00172 virtual void SendTo(userrec* Source, userrec* Dest, string s); 00179 virtual void SendChannel(userrec* User, chanrec* Channel, string s,bool IncludeSender); 00184 virtual bool CommonChannels(userrec* u1, userrec* u2); 00192 virtual void SendCommon(userrec* User, string text,bool IncludeSender); 00197 virtual void SendWallops(userrec* User, string text); 00198 00202 virtual bool IsNick(string nick); 00206 virtual userrec* FindNick(string nick); 00210 virtual chanrec* FindChannel(string channel); 00215 virtual string ChanMode(userrec* User, chanrec* Chan); 00218 virtual string GetServerName(); 00221 virtual string GetNetworkName(); 00227 virtual Admin GetAdmin(); 00228 00229 }; 00230 00237 class ConfigReader : public classbase 00238 { 00239 protected: 00242 string fname; 00243 public: 00248 ConfigReader(); // default constructor reads ircd.conf 00252 ConfigReader(string filename); // read a module-specific config 00256 ~ConfigReader(); 00261 string ReadValue(string tag, string name, int index); 00268 int Enumerate(string tag); 00272 bool Verify(); 00273 }; 00274 00275 00276 00282 class FileReader : public classbase 00283 { 00284 file_cache fc; 00285 public: 00290 FileReader(); 00296 FileReader(string filename); 00300 ~FileReader(); 00306 void LoadFile(string filename); 00311 string GetLine(int x); 00317 int FileSize(); 00318 }; 00319 00320 00327 class ModuleFactory : public classbase 00328 { 00329 public: 00330 ModuleFactory() { } 00331 virtual ~ModuleFactory() { } 00336 virtual Module * CreateModule() = 0; 00337 }; 00338 00339 #endif