00001
00002 #include <kore/version.h>
00003 #include <kore/kernel.h>
00004 #include <kore/servicemanager.h>
00005 #include <kore/pluginloader.h>
00006 #include <kore/modulemanager.h>
00007 #include <kore/pluginmanager.h>
00008
00009 #define KERNEL_MAJOR 0
00010 #define KERNEL_MINOR 0
00011 #define KERNEL_REVISION 1
00012 #define KERNEL_VERSION "0.0.1"
00013 #define KERNEL_NAME "Kernel"
00014 #define KERNEL_TYPE "Kernel"
00015 #define KERNEL_DESCRIPTION "Default Kore Kernel"
00016 #define KERNEL_SERVICE "Kore/Kernel/Kernel"
00017 #define KERNEL_SERVICE_DESCRIPTION "Kore Kernel service"
00018
00019 using namespace kore;
00020
00021 Kernel* Kernel::_instance = 0;
00022
00023 Kernel* Kernel::instance()
00024 {
00025 if( !_instance )
00026 setInstance(new Kernel());
00027 return _instance;
00028
00029 }
00030
00031 void Kernel::setInstance(Kernel* inst)
00032 {
00033 _instance = inst;
00034 }
00035
00036 Kernel::Kernel()
00037 {
00038 _version = new Version(KERNEL_MAJOR,KERNEL_MINOR,KERNEL_REVISION,KERNEL_VERSION);
00039 _info = new Info(this, KERNEL_NAME, KERNEL_TYPE, KERNEL_DESCRIPTION, _version, _version);
00040 setInfo(_info);
00041 _kernelService = new Service(this, KERNEL_SERVICE, KERNEL_SERVICE_DESCRIPTION);
00042 addService(_kernelService);
00043
00044 setServiceManager( new ServiceManager() );
00045 _serviceManager->registerProvider(_serviceManager);
00046 _serviceManager->registerProvider(this);
00047
00048 _moduleManager = new ModuleManager();
00049 _serviceManager->registerProvider(_moduleManager);
00050 _moduleManager->registerModule(this);
00051 _moduleManager->registerModule(_serviceManager);
00052 _moduleManager->registerModule(_moduleManager);
00053
00054 _pluginLoader = new PluginLoader();
00055 _serviceManager->registerProvider(_pluginLoader);
00056 _moduleManager->registerModule(_pluginLoader);
00057
00058 }
00059 Kernel::~Kernel()
00060 {
00061
00062
00063 _moduleManager->unregisterModule(_serviceManager);
00064 delete _serviceManager;
00065 delete _moduleManager;
00066 delete _pluginLoader;
00067 delete _info;
00068 delete _version;
00069 delete _kernelService;
00070 }
00071
00072 ServiceManager* Kernel::serviceManager() const
00073 {
00074 return _serviceManager;
00075 }
00076
00077 void Kernel::setServiceManager(ServiceManager* sm)
00078 {
00079 _serviceManager = sm;
00080 }