Changeset 4884 for branches/erijo-dev

Show
Ignore:
Timestamp:
04/05/07 03:04:10 (20 months ago)
Author:
erijo
Message:

Add a class for dispatching events to handlers and make the daemon use it.

Location:
branches/erijo-dev/licq
Files:
2 added
3 modified

Legend:

Unmodified
Added
Removed
  • branches/erijo-dev/licq/src/daemon.cpp

    r4882 r4884  
    2323#include <time.h> 
    2424 
     25void aEventHandler(const Licq::IEventPtr& event) 
     26{ 
     27  Licq::ILog* log; 
     28  int count; 
     29  if (event->getProperty("ILog", &log) && event->getProperty("count", &count)) 
     30  { 
     31    log->info("in aEventHandler with event #%lu and count %d",  
     32              event->getId(), count); 
     33  } 
     34} 
     35 
    2536void Licq::TDaemon::onEvent(const IEventPtr& event) 
    2637{ 
    2738  Log.info("TDaemon::onEvent(%s [%lu])", event->getName().c_str(), event->getId()); 
    28   TEventHandlers::iterator handler = EventHandlers.find(event->getName()); 
    29   if (handler != EventHandlers.end()) 
    30   { 
    31     Log.debug("Calling handler for %s", event->getName().c_str()); 
    32     (this->*(handler->second))(event); 
    33   } 
    3439} 
    3540 
     
    6065    event = IEvent::create(0, "invalid:event"); 
    6166    pushEvent(event); 
     67 
     68    event = IEvent::create(0, "log:event"); 
     69    event->setProperty("ILog", (Licq::ILog*)&Log); 
     70    event->setProperty("count", count); 
     71    pushEvent(event); 
    6272  } 
    6373 
     
    8393 
    8494Licq::TDaemon::TDaemon() 
    85   : PluginRepository(NULL), EventLoop(&EventQueue, this) 
     95  : PluginRepository(NULL), EventLoop(&EventQueue, &EventDispatcher) 
    8696{ 
    8797  // Setup event handlers 
    88   EventHandlers["plugin:create"] = &TDaemon::onPluginCreate; 
     98  EventDispatcher.setDefaultCallback(&TDaemon::onEvent, this); 
     99  EventDispatcher.setCallback("plugin:create", &TDaemon::onPluginCreate, this); 
     100  EventDispatcher.setCallback("log:event", &aEventHandler); 
    89101} 
    90102 
  • branches/erijo-dev/licq/src/daemon.h

    r4883 r4884  
    2222 
    2323#include "licq/interface/daemon.h" 
     24#include "licq/eventdispatcher.h" 
    2425#include "licq/eventloop.h" 
    2526 
     
    3334 
    3435class TDaemon : public IDaemon, 
    35                 public IEventHandler, 
    3636                public ITimeoutHandler, 
    3737                public IFileDescriptorHandler 
     
    4343  TEventQueue EventQueue; 
    4444  TEventLoop EventLoop; 
     45  TEventDispatcher EventDispatcher; 
    4546  TPipe Pipe; 
    4647 
    47   typedef void (TDaemon::*FnEventHandler)(const IEventPtr& event); 
    48   typedef std::map<std::string, FnEventHandler> TEventHandlers; 
    49   TEventHandlers EventHandlers; 
    50  
    51   // From IEventHandler 
     48  // Event handlers 
    5249  void onEvent(const IEventPtr& event); 
    53  
    54   // Event handlers 
    5550  void onPluginCreate(const IEventPtr& event); 
    5651 
  • branches/erijo-dev/licq/src/event/CMakeLists.txt

    r4883 r4884  
    11set(event_SRCS 
    22  event.cpp 
     3  eventdispatcher.cpp 
    34  eventloop.cpp 
    45  eventqueue.cpp