Changeset 6026 for branches/newapi

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

Added some event handling to the daemon

Location:
branches/newapi/licq/src
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • branches/newapi/licq/src/daemon.cpp

    r6018 r6026  
    1919 
    2020#include "daemon.h" 
     21#include "event/eventqueue.h" 
    2122#include "event/eventmanager.h" 
    2223#include "event/eventqueuename.h" 
    2324#include "globals.h" 
     25#include "licq/event/eventdispatcher.h" 
     26#include "licq/event/eventloop.h" 
    2427#include "licq/exception/invalidargumentexception.h" 
    2528#include "licq/exception/runtimeexception.h" 
     
    9295    myEventManager(eventManager) 
    9396{ 
    94   // Empty 
     97  myEventLoop = new Licq::EventLoop(); 
     98  myEventQueue = new EventQueue("daemon"); 
     99  myEventDispatcher = new Licq::EventDispatcher(*myEventLoop, *myEventQueue, this); 
     100 
     101  myEventManager->registerQueue(EventQueueName::daemon, myEventQueue, 0); 
    95102} 
    96103 
    97104LicqDaemon::Daemon::~Daemon() 
    98105{ 
    99   // Empty 
     106  myEventManager->unregisterQueue(EventQueueName::daemon, myEventQueue); 
     107 
     108  delete myEventDispatcher; 
     109  delete static_cast<EventQueue*>(myEventQueue); 
     110  delete myEventLoop; 
    100111} 
    101112 
     
    188199int LicqDaemon::Daemon::main() 
    189200{ 
    190   sleep(2); 
    191   return 1; 
     201  if (myPluginManager->pluginsRunning() == 0) 
     202  { 
     203    myLog.warning("No plugins running; exiting"); 
     204    return 1; 
     205  } 
     206 
     207  myEventDispatcher->setDefaultCallback(&Daemon::onEvent, this); 
     208  myEventDispatcher->setCallback("daemon.exit", &Daemon::onExitEvent, this); 
     209  myEventDispatcher->setCallback("plugin.stopped", &Daemon::onPluginStopped, this); 
     210 
     211  return myEventLoop->run(); 
     212} 
     213 
     214bool LicqDaemon::Daemon::onEvent(Licq::Event::Ptr event) 
     215{ 
     216  myLog.debug() << "Received event " << event->getName(); 
     217  return true; 
     218} 
     219 
     220bool LicqDaemon::Daemon::onExitEvent(Licq::Event::Ptr) 
     221{ 
     222  myLog.debug() << "Stopping all plugins"; 
     223  myPluginManager->stopAllPlugins(); 
     224  return true; 
     225} 
     226 
     227bool LicqDaemon::Daemon::onPluginStopped(Licq::Event::Ptr event) 
     228{ 
     229  assert(event->hasProperty("id")); 
     230  myLog.debug() << "Plugin stopped; id = " <<  
     231      event->getProperty<Licq::Plugin::Id>("id"); 
     232  myPluginManager->cleanupPlugin(event->getProperty<Licq::Plugin::Id>("id")); 
     233 
     234  if (myPluginManager->pluginsRunning() == 0) 
     235  { 
     236    myLog.debug() << "All plugins are stopped; exiting"; 
     237    myEventLoop->exit(0); 
     238  } 
     239 
     240  return true; 
    192241} 
    193242 
  • branches/newapi/licq/src/daemon.h

    r6018 r6026  
    2929namespace Licq 
    3030{ 
     31class EventDispatcher; 
     32class EventLoop; 
     33class EventQueue; 
    3134class Log; 
    3235} 
     
    5255  const std::string& getBaseDir() const; 
    5356 
     57  bool onEvent(Licq::Event::Ptr event); 
     58  bool onExitEvent(Licq::Event::Ptr event); 
     59  bool onPluginStopped(Licq::Event::Ptr event); 
     60 
    5461  // From Licq::Daemon 
    5562  void sendEvent(Licq::Event::Ptr event); 
    5663  void sendEventToDaemon(Licq::Event::Ptr event); 
    5764  void sendEventToPlugin(Licq::Event::Ptr event, Licq::Plugin::Id id); 
    58  
    5965  void getPluginInformation(Licq::Plugin::InformationVector* info); 
    6066 
     
    6369  PluginManager* myPluginManager; 
    6470  EventManager* myEventManager; 
     71 
     72  Licq::EventLoop* myEventLoop; 
     73  Licq::EventQueue* myEventQueue; 
     74  Licq::EventDispatcher* myEventDispatcher; 
    6575 
    6676  std::string myBaseDir;