Changeset 10580 for code/branches/core7/src/libraries/core/module
- Timestamp:
- Sep 12, 2015, 4:10:02 PM (9 years ago)
- Location:
- code/branches/core7/src/libraries/core/module
- Files:
-
- 2 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/core7/src/libraries/core/module/CMakeLists.txt
r10552 r10580 5 5 Plugin.cc 6 6 PluginManager.cc 7 PluginReference.cc 7 8 StaticallyInitializedInstance.cc 8 9 StaticInitializationHandlerIncludes.cc -
code/branches/core7/src/libraries/core/module/PluginManager.cc
r10552 r10580 33 33 #include "SpecialConfig.h" 34 34 #include "Plugin.h" 35 #include "PluginReference.h" 35 36 #include "core/ApplicationPaths.h" 36 37 #include "core/command/ConsoleCommandIncludes.h" 38 #include "core/object/Context.h" 37 39 38 40 namespace orxonox 39 41 { 40 SetConsoleCommand("PluginManager", "load", &PluginManager::loadPlugin); 41 SetConsoleCommand("PluginManager", "unload", &PluginManager::unloadPlugin); 42 static const std::string __CC_PluginManager_load_name = "load"; 43 static const std::string __CC_PluginManager_unload_name = "unload"; 44 45 SetConsoleCommand("PluginManager", __CC_PluginManager_load_name, &PluginManager::loadPlugin); 46 SetConsoleCommand("PluginManager", __CC_PluginManager_unload_name, &PluginManager::unloadPlugin); 42 47 43 48 PluginManager* PluginManager::singletonPtr_s = 0; … … 45 50 PluginManager::PluginManager() 46 51 { 52 ModifyConsoleCommand("PluginManager", __CC_PluginManager_load_name).setObject(this); 53 ModifyConsoleCommand("PluginManager", __CC_PluginManager_unload_name).setObject(this); 47 54 } 48 55 49 56 PluginManager::~PluginManager() 50 57 { 58 ModifyConsoleCommand("PluginManager", __CC_PluginManager_load_name).setObject(NULL); 59 ModifyConsoleCommand("PluginManager", __CC_PluginManager_unload_name).setObject(NULL); 60 61 for (std::map<std::string, PluginReference*>::iterator it = this->references_.begin(); it != this->references_.end(); ++it) 62 delete it->second; 51 63 for (std::map<std::string, Plugin*>::iterator it = this->plugins_.begin(); it != this->plugins_.end(); ++it) 52 64 delete it->second; … … 74 86 } 75 87 76 /*static*/ void PluginManager::loadPlugin(const std::string& name)88 void PluginManager::referencePlugin(const std::string& name) 77 89 { 78 Plugin* plugin = PluginManager::getInstance().plugins_[name];90 Plugin* plugin = this->plugins_[name]; 79 91 if (plugin != NULL) 80 92 plugin->load(); … … 83 95 } 84 96 85 /*static*/ void PluginManager::unloadPlugin(const std::string& name)97 void PluginManager::dereferencePlugin(const std::string& name) 86 98 { 87 Plugin* plugin = PluginManager::getInstance().plugins_[name];99 Plugin* plugin = this->plugins_[name]; 88 100 if (plugin != NULL) 89 101 plugin->unload(); … … 91 103 orxout(internal_warning) << "Cannot find plugin with name " << name << endl; 92 104 } 105 106 /** 107 * @brief Console command to manually load a plugin. The plugin stays loaded until @ref unloadPlugin is called. 108 */ 109 void PluginManager::loadPlugin(const std::string& name) 110 { 111 if (this->references_[name] == NULL) 112 { 113 this->references_[name] = new PluginReference(name); 114 } 115 else 116 orxout(internal_warning) << "Plugin " << name << " is already loaded" << endl; 117 } 118 119 /** 120 * @brief Console command to unload a plugin if it was previously loaded manually by calling @ref loadPlugin. 121 * Does not unload the plugin immediately if it is still used by another @ref PluginReference (e.g. by a @ref Level). 122 */ 123 void PluginManager::unloadPlugin(const std::string& name) 124 { 125 PluginReference* reference = this->references_[name]; 126 if (reference != NULL) 127 { 128 this->references_[name] = NULL; 129 delete reference; 130 } 131 else 132 orxout(internal_warning) << "Plugin " << name << " is already unloaded" << endl; 133 } 93 134 } -
code/branches/core7/src/libraries/core/module/PluginManager.h
r10552 r10580 48 48 void findPlugins(); 49 49 50 static void loadPlugin(const std::string& name); 51 static void unloadPlugin(const std::string& name); 50 void referencePlugin(const std::string& name); 51 void dereferencePlugin(const std::string& name); 52 53 // console commands 54 void loadPlugin(const std::string& name); 55 void unloadPlugin(const std::string& name); 52 56 53 57 private: 54 58 std::map<std::string, Plugin*> plugins_; 59 std::map<std::string, PluginReference*> references_; // references that were created by console command 55 60 56 61 static PluginManager* singletonPtr_s;
Note: See TracChangeset
for help on using the changeset viewer.