Changeset 6017 for branches/newapi

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

Implemented methods in EventManager? for (un)register event queues and for sending events.

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

Legend:

Unmodified
Added
Removed
  • branches/newapi/licq/src/event/eventmanager.h

    r5952 r6017  
    3030{ 
    3131public: 
    32   virtual void registerQueue(const std::string& event, 
     32  virtual void registerQueue(const std::string& name, 
    3333                             Licq::EventQueue* queue, 
    3434                             int priority) = 0; 
    3535 
    36   virtual void unregisterQueue(const std::string& event, 
     36  virtual void unregisterQueue(const std::string& name, 
    3737                               Licq::EventQueue* queue) = 0; 
    3838 
    3939  virtual void unregisterQueue(Licq::EventQueue* queue) = 0; 
    4040 
    41   virtual void sendEvent(boost::shared_ptr<Licq::Event>& event) = 0; 
     41  virtual void sendEvent(const std::string& name, 
     42                         boost::shared_ptr<Licq::Event> event) = 0; 
    4243 
    4344protected: 
  • branches/newapi/licq/src/event/eventmanagerimpl.cpp

    r5952 r6017  
    1919 
    2020#include "event/eventmanagerimpl.h" 
     21#include "licq/thread/readlocker.h" 
     22#include "licq/thread/writelocker.h" 
     23#include "globals.h" 
     24#include "util/tr.h" 
    2125 
    22 void LicqDaemon::EventManagerImpl::registerQueue(const std::string& event, 
     26void LicqDaemon::EventManagerImpl::registerQueue(const std::string& name, 
    2327                                                 Licq::EventQueue* queue, 
    2428                                                 int priority) 
    2529{ 
     30  Licq::WriteLocker locker(&myEventPipesMutex); 
     31 
     32  EventPipes::iterator pipe = myEventPipes.find(name); 
     33  if (pipe == myEventPipes.end()) 
     34    pipe = myEventPipes.insert(std::make_pair(name, new EventPipe(name))).first; 
     35 
     36  pipe->second->addQueue(queue, priority); 
    2637} 
    2738 
    28 void LicqDaemon::EventManagerImpl::unregisterQueue(const std::string& event, 
     39void LicqDaemon::EventManagerImpl::unregisterQueue(const std::string& name, 
    2940                                                   Licq::EventQueue* queue) 
    3041{ 
     42  Licq::WriteLocker locker(&myEventPipesMutex); 
     43 
     44  EventPipes::iterator pipe = myEventPipes.find(name); 
     45  if (pipe == myEventPipes.end()) 
     46  { 
     47    myLog.warning(tr("No queues registered for %1%") % name); 
     48    return; 
     49  } 
     50 
     51  removeQueue(pipe, queue); 
    3152} 
    3253 
    3354void LicqDaemon::EventManagerImpl::unregisterQueue(Licq::EventQueue* queue) 
    3455{ 
     56  Licq::WriteLocker locker(&myEventPipesMutex); 
     57 
     58  for (EventPipes::iterator pipe = myEventPipes.begin(); 
     59       pipe != myEventPipes.end();) 
     60  { 
     61    removeQueue(pipe++, queue); 
     62  } 
    3563} 
    3664 
    37 void LicqDaemon::EventManagerImpl::sendEvent(boost::shared_ptr<Licq::Event>& event) 
     65void LicqDaemon::EventManagerImpl::sendEvent(const std::string& name, 
     66                                             boost::shared_ptr<Licq::Event> event) 
    3867{ 
     68  Licq::ReadLocker locker(&myEventPipesMutex); 
     69 
     70  EventPipes::iterator pipe = myEventPipes.find(name); 
     71  if (pipe == myEventPipes.end()) 
     72  { 
     73    myLog.warning(tr("No queues registered for %1%") % name); 
     74    return; 
     75  } 
     76 
     77  pipe->second->processEvent(event); 
    3978} 
    4079 
    4180LicqDaemon::EventManagerImpl::EventManagerImpl() 
    42   : myEventQueuesMutex("EventManager") 
     81  : myLog(Globals::getDaemonLog()), 
     82    myEventPipesMutex("EventManager") 
    4383{ 
    4484} 
     
    4686LicqDaemon::EventManagerImpl::~EventManagerImpl() 
    4787{ 
     88  Licq::WriteLocker locker(&myEventPipesMutex); 
     89  while (!myEventPipes.empty()) 
     90    deletePipe(myEventPipes.begin()); 
    4891} 
     92 
     93void LicqDaemon::EventManagerImpl::removeQueue(EventPipes::iterator pipe, 
     94                                               Licq::EventQueue* queue) 
     95{ 
     96  pipe->second->removeQueue(queue); 
     97  if (pipe->second->empty()) 
     98    deletePipe(pipe); 
     99} 
     100 
     101void LicqDaemon::EventManagerImpl::deletePipe(EventPipes::iterator pipe) 
     102{ 
     103  delete pipe->second; 
     104  myEventPipes.erase(pipe); 
     105} 
  • branches/newapi/licq/src/event/eventmanagerimpl.h

    r5952 r6017  
    2222 
    2323#include "event/eventmanager.h" 
     24#include "event/eventpipe.h" 
    2425#include "event/eventqueue.h" 
    2526#include "licq/event/event.h" 
     27#include "licq/log.h" 
    2628#include "licq/thread/readwritemutex.h" 
    2729 
     
    3537{ 
    3638public: 
    37   void registerQueue(const std::string& event, Licq::EventQueue* queue, int priority); 
    38   void unregisterQueue(const std::string& event, Licq::EventQueue* queue); 
     39  void registerQueue(const std::string& name, 
     40                     Licq::EventQueue* queue, 
     41                     int priority); 
     42 
     43  void unregisterQueue(const std::string& name, 
     44                       Licq::EventQueue* queue); 
     45 
    3946  void unregisterQueue(Licq::EventQueue* queue); 
    4047 
    41   void sendEvent(boost::shared_ptr<Licq::Event>& event); 
     48  void sendEvent(const std::string& name, 
     49                 boost::shared_ptr<Licq::Event> event); 
    4250 
    4351private: 
     
    4755  ~EventManagerImpl(); 
    4856 
    49   struct EventQueuePriority 
    50   { 
    51     EventQueue* queue; 
    52     int priority; 
    53   }; 
     57  Licq::Log& myLog; 
    5458 
    55   typedef std::vector<EventQueuePriority> EventQueues; 
    56   std::map<std::string, EventQueues> myEventQueues; 
    57   Licq::ReadWriteMutex myEventQueuesMutex; 
     59  typedef std::map<std::string, EventPipe*> EventPipes; 
     60  EventPipes myEventPipes; 
     61  Licq::ReadWriteMutex myEventPipesMutex; 
     62 
     63  void removeQueue(EventPipes::iterator pipe, Licq::EventQueue* queue); 
     64  void deletePipe(EventPipes::iterator pipe); 
    5865}; 
    5966