示例#1
0
void sentry::Sentry::loadPlugins(){
    string plugindir(_config->getValue("application", "plugindir"));
    if(plugindir.empty()){
        Logger::log("Plugin directory not in config.", Logger::LOG_FATAL);
        exit(Sentry::EXIT_NO_PLUGIN_DIR);
    }else{
        plugindir += "/";
    }

    vector<string> files = _getPluginLibNames(plugindir);

    /**
     * Load the plug-ins
     */
    for(unsigned int i = 0; i < files.size(); i++){
	try{
	    string pluginfile = files.at(i);
	    IPlugin* plugin = PluginLoader::loadPlugin(pluginfile, this);

	    if(plugin != 0){
		_plugins[plugin->getName()] = plugin;
		_pluginpathmap[plugin->getName()] = pluginfile;
		vector<IHookPoint*> hookpoints = plugin->getProvidingHookPoints();

		for(int h = 0; h < hookpoints.size(); h++){
		    IHookPoint* hookpoint = hookpoints.at(h);

		    if( findHookPoint(hookpoint->getName()) == 0 ){
			_hookpoints[hookpoint->getName()] = hookpoint;
		    }else{
                        Logger::log("Ignoring already available hookpoint " + hookpoint->getName(), Logger::LOG_WARNING);
		    }
		}
	    }
	}
	catch(NoSuchLibraryException& nsle){
            Logger::log(nsle.what(), Logger::LOG_ERROR);
	}
	catch(NoSuchSymbolException& nsse){
            Logger::log(nsse.what(), Logger::LOG_ERROR);
	}

    }

    this->_activatePlugins();
}