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 ;
pf.plugin = NULL ;
pf.file_name = plugin_name ;
pf.info_string = "" ;
std::cerr << " -> hashing." << std::endl;
uint64_t size ;
@ -232,9 +233,10 @@ bool RsPluginManager::loadPlugin(const std::string& plugin_name)
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.info_string = dlerror() ;
pinfo.info_string = val ;
return false ;
}
@ -331,7 +333,13 @@ void RsPluginManager::addConfigurations(p3ConfigMgr *ConfigMgr)
for(uint32_t i=0;i<_plugins.size();++i)
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());
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;
}
}
@ -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 p3LinkMgr ;
struct PluginInfo
class PluginInfo
{
public:
RsPlugin *plugin ;
std::string info_string ;
std::string file_hash ;

View File

@ -1,17 +1,18 @@
#pragma once
#include "services/p3service.h"
#include "plugins/pluginmanager.h"
// 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.
//
class RsPQIService: public p3Config
class RsPQIService: public p3Service, public p3Config
{
public:
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 ; }
virtual void tick() {}
virtual int tick() = 0 ;
// Functions from p3config
//

View File

@ -46,7 +46,7 @@ class QApplication;
class RsCacheService ;
class ftServer ;
class ConfigPage ;
class pqiService ;
class RsPQIService ;
// Used for the status of plugins.
//
@ -78,7 +78,7 @@ class RsPlugin
{
public:
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 MainPage *qt_page() const { return NULL ; }

View File

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