Changeset 6015 for branches/newapi

Show
Ignore:
Timestamp:
01/11/08 05:28:58 (11 months ago)
Author:
erijo
Message:

Moved starting and stopping of plugin instances to the PluginInstance? class.

Location:
branches/newapi/licq/src/plugin
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • branches/newapi/licq/src/plugin/plugininstance.h

    r6012 r6015  
    2121#define LICQDAEMON_PLUGININSTANCE_H 
    2222 
     23#include "licq/event/event.h" 
    2324#include "licq/interface/plugin.h" 
    2425 
     
    4041{ 
    4142public: 
     43  enum State 
     44  { 
     45    StateNotLoaded, 
     46    StateLoaded, 
     47    StateStarted, 
     48    StateStopping, 
     49    StateStopped 
     50  }; 
     51 
    4252  virtual Licq::Plugin::Id load(int argc, char** argv) = 0; 
     53 
     54  virtual void start() = 0; 
     55  virtual void initiateStop(Licq::Event::Ptr stopEvent) = 0; 
     56  virtual void completeStop(bool force) = 0; 
     57 
     58  virtual State getState() const = 0; 
    4359 
    4460  virtual Licq::Plugin::Id getPluginId() const = 0; 
  • branches/newapi/licq/src/plugin/plugininstanceimpl.cpp

    r6013 r6015  
    2828 
    2929#include <cassert> 
     30#include <csignal> 
    3031#include <cstring> 
    3132 
     
    4546  : myInformation(info), 
    4647    myLibrary(library), 
     48    myState(StateNotLoaded), 
    4749    myPlugin(NULL), 
    4850    myThread(NULL), 
     
    5456LicqDaemon::PluginInstanceImpl::~PluginInstanceImpl() 
    5557{ 
    56   assert(myThread->getState() != Licq::Thread::StateRunning); 
     58  assert(myState != StateStarted && myState != StateStopping); 
     59 
    5760  delete myThread; 
    5861 
    59   myLibrary->destroyPlugin(myPlugin); 
    60   myPlugin = NULL; 
     62  if (myPlugin != NULL) 
     63  { 
     64    myLibrary->destroyPlugin(myPlugin); 
     65    myPlugin = NULL; 
     66  } 
    6167 
    6268  // Cleanup mySetup 
     
    7177Licq::Plugin::Id LicqDaemon::PluginInstanceImpl::load(int argc, char** argv) 
    7278{ 
    73   assert(myPlugin == NULL); 
     79  assert(myState == StateNotLoaded); 
    7480 
    7581  // Set up argc and argv for the plugin 
     
    98104  } 
    99105 
    100   // Create the thread 
     106  myState = StateLoaded; 
    101107  myThread = new Licq::Thread(myPlugin); 
    102108 
    103109  return mySetup.id; 
    104110} 
     111 
     112void LicqDaemon::PluginInstanceImpl::start() 
     113{ 
     114  assert(myState == StateLoaded); 
     115  myThread->start(); 
     116  myState = StateStarted; 
     117} 
     118 
     119void LicqDaemon::PluginInstanceImpl::initiateStop(Licq::Event::Ptr stopEvent) 
     120{ 
     121  assert(myState == StateStarted); 
     122  mySetup.eventQueue->push(stopEvent); 
     123  myState = StateStopping; 
     124} 
     125 
     126void LicqDaemon::PluginInstanceImpl::completeStop(bool force) 
     127{ 
     128  assert(myState == StateStopping); 
     129 
     130  if (force) 
     131    myThread->kill(SIGTERM); 
     132  myThread->join(); 
     133 
     134  myState = StateStopped; 
     135} 
  • branches/newapi/licq/src/plugin/plugininstanceimpl.h

    r6012 r6015  
    5252  Licq::Plugin::Id load(int argc, char** argv); 
    5353 
     54  void start(); 
     55  void initiateStop(Licq::Event::Ptr stopEvent); 
     56  void completeStop(bool force); 
     57 
     58  State getState() const; 
     59 
    5460  /** 
    5561   * @returns This plugin instance's plugin information. 
     
    8490  Licq::Plugin::Information::Ptr myInformation; 
    8591  boost::shared_ptr<PluginLibrary> myLibrary; 
     92  State myState; 
    8693 
    8794  Licq::Plugin::Setup mySetup; 
     
    94101 
    95102} // namespace LicqDaemon 
     103 
     104inline LicqDaemon::PluginInstance::State 
     105LicqDaemon::PluginInstanceImpl::getState() const 
     106{ 
     107  return myState; 
     108} 
    96109 
    97110inline Licq::Plugin::Id LicqDaemon::PluginInstanceImpl::getPluginId() const