improved plugin management to allow services to be used, and config pages to be added

git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4960 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
csoler 2012-02-18 20:29:03 +00:00
parent fbce07eab0
commit 2c6a2b4ee7
5 changed files with 29 additions and 14 deletions

View file

@ -198,6 +198,7 @@ bool RsPluginManager::loadPlugin(const std::string& plugin_name)
PluginInfo pf ; PluginInfo pf ;
pf.plugin = NULL ; pf.plugin = NULL ;
pf.file_name = plugin_name ; pf.file_name = plugin_name ;
pf.info_string = "" ;
std::cerr << " -> hashing." << std::endl; std::cerr << " -> hashing." << std::endl;
uint64_t size ; uint64_t size ;
@ -232,9 +233,10 @@ bool RsPluginManager::loadPlugin(const std::string& plugin_name)
if(handle == NULL) if(handle == NULL)
{ {
std::cerr << " Cannot open plugin: " << dlerror() << std::endl ; const char *val = dlerror() ;
std::cerr << " Cannot open plugin: " << val << std::endl ;
pinfo.status = PLUGIN_STATUS_DLOPEN_ERROR ; pinfo.status = PLUGIN_STATUS_DLOPEN_ERROR ;
pinfo.info_string = dlerror() ; pinfo.info_string = val ;
return false ; return false ;
} }
@ -331,7 +333,13 @@ void RsPluginManager::addConfigurations(p3ConfigMgr *ConfigMgr)
for(uint32_t i=0;i<_plugins.size();++i) for(uint32_t i=0;i<_plugins.size();++i)
if(_plugins[i].plugin != NULL && _plugins[i].plugin->configurationFileName().length() > 0) if(_plugins[i].plugin != NULL && _plugins[i].plugin->configurationFileName().length() > 0)
{ {
if( _plugins[i].plugin->rs_cache_service() != NULL)
ConfigMgr->addConfiguration(_plugins[i].plugin->configurationFileName(), _plugins[i].plugin->rs_cache_service()); ConfigMgr->addConfiguration(_plugins[i].plugin->configurationFileName(), _plugins[i].plugin->rs_cache_service());
else if(_plugins[i].plugin->rs_pqi_service() != NULL)
ConfigMgr->addConfiguration(_plugins[i].plugin->configurationFileName(), _plugins[i].plugin->rs_pqi_service());
else
continue ;
std::cerr << " Added configuration for plugin " << _plugins[i].plugin->getPluginName() << ", with file " << _plugins[i].plugin->configurationFileName() << std::endl; std::cerr << " Added configuration for plugin " << _plugins[i].plugin->getPluginName() << ", with file " << _plugins[i].plugin->configurationFileName() << std::endl;
} }
} }
@ -401,3 +409,8 @@ RsCacheService::RsCacheService(uint16_t service_type,uint32_t config_type,uint32
{ {
} }
RsPQIService::RsPQIService(uint16_t service_type,uint32_t config_type,uint32_t tick_delay_in_seconds, RsPluginHandler* pgHandler)
: p3Service(service_type),p3Config(config_type)
{
}

View file

@ -10,8 +10,9 @@ class p3ConfigMgr ;
class p3ServiceServer ; class p3ServiceServer ;
class p3LinkMgr ; class p3LinkMgr ;
struct PluginInfo class PluginInfo
{ {
public:
RsPlugin *plugin ; RsPlugin *plugin ;
std::string info_string ; std::string info_string ;
std::string file_hash ; std::string file_hash ;

View file

@ -1,17 +1,18 @@
#pragma once #pragma once
#include "services/p3service.h"
#include "plugins/pluginmanager.h" #include "plugins/pluginmanager.h"
// The following class abstracts the construction of a peer-to-peer service. The user only has to // The following class abstracts the construction of a peer-to-peer service. The user only has to
// supply RS with a type ID. If the ID is already in use, RS will complain. // supply RS with a type ID. If the ID is already in use, RS will complain.
// //
class RsPQIService: public p3Config class RsPQIService: public p3Service, public p3Config
{ {
public: public:
RsPQIService(uint16_t type,uint32_t config_type,uint32_t tick_delay_in_seconds, RsPluginHandler* pgHandler) ; RsPQIService(uint16_t type,uint32_t config_type,uint32_t tick_delay_in_seconds, RsPluginHandler* pgHandler) ;
uint32_t tickDelay() const { return _tick_delay_in_seconds ; } uint32_t tickDelay() const { return _tick_delay_in_seconds ; }
virtual void tick() {} virtual int tick() = 0 ;
// Functions from p3config // Functions from p3config
// //

View file

@ -46,7 +46,7 @@ class QApplication;
class RsCacheService ; class RsCacheService ;
class ftServer ; class ftServer ;
class ConfigPage ; class ConfigPage ;
class pqiService ; class RsPQIService ;
// Used for the status of plugins. // Used for the status of plugins.
// //
@ -78,7 +78,7 @@ class RsPlugin
{ {
public: public:
virtual RsCacheService *rs_cache_service() const { return NULL ; } virtual RsCacheService *rs_cache_service() const { return NULL ; }
virtual pqiService *rs_pqi_service() const { return NULL ; } virtual RsPQIService *rs_pqi_service() const { return NULL ; }
virtual uint16_t rs_service_id() const { return 0 ; } virtual uint16_t rs_service_id() const { return 0 ; }
virtual MainPage *qt_page() const { return NULL ; } virtual MainPage *qt_page() const { return NULL ; }

View file

@ -127,7 +127,7 @@ RSettingsWin::initStackedWidget()
RsPlugin *pl = rsPlugins->plugin(i) ; RsPlugin *pl = rsPlugins->plugin(i) ;
if(pl->qt_config_page() != NULL) if(pl->qt_config_page() != NULL)
stackedWidget->addWidget(pl->qt_config_page()) ; addPage(pl->qt_config_page()) ;
} }
// make the first page the default. // make the first page the default.