00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef MODULE_H
00018 #define MODULE_H
00019
00020 #include <vector>
00021
00022 using namespace std;
00023
00025 const int MODULE_NAME_LENGTH = 30;
00026
00030 class module
00031 {
00032 public:
00033
00034
00035
00036
00037
00042
00043
00044
00045
00046
00047
00048
00049 virtual int get_status( void ) = 0;
00050 virtual char* get_name( void ) = 0;
00051
00052 protected:
00053
00054 virtual int mod_load( void ) = 0;
00055 virtual int mod_unload( void ) = 0;
00056 virtual int handle_msg( const char* msg ) = 0;
00057
00058
00059
00060
00061
00062
00063
00065 friend class module_master;
00066 };
00067
00068
00072 struct module_info
00073 {
00074 char name[ MODULE_NAME_LENGTH + 1 ];
00075 module* ptr;
00076
00078 int id;
00079 };
00080
00085 class module_master
00086 {
00087 public:
00088
00089 int register_module( module *m );
00090 int unregister_module( module *m );
00091 int unload_all( void );
00092
00093 int broadcast( const char* msg );
00094
00095 module* get_module( const char* name, int id = -1 );
00096 module* get_module( int id );
00097
00098 static module_master& ptr( void );
00099
00100 private:
00101 module_master( void );
00102 module_master( const module_master& );
00103
00104 vector<module_info> db;
00105 };
00106
00107 #endif