Changeset 6017 for branches/newapi
- Timestamp:
- 01/11/08 05:31:23 (11 months ago)
- Location:
- branches/newapi/licq/src/event
- Files:
-
- 3 modified
-
eventmanager.h (modified) (1 diff)
-
eventmanagerimpl.cpp (modified) (2 diffs)
-
eventmanagerimpl.h (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/newapi/licq/src/event/eventmanager.h
r5952 r6017 30 30 { 31 31 public: 32 virtual void registerQueue(const std::string& event,32 virtual void registerQueue(const std::string& name, 33 33 Licq::EventQueue* queue, 34 34 int priority) = 0; 35 35 36 virtual void unregisterQueue(const std::string& event,36 virtual void unregisterQueue(const std::string& name, 37 37 Licq::EventQueue* queue) = 0; 38 38 39 39 virtual void unregisterQueue(Licq::EventQueue* queue) = 0; 40 40 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; 42 43 43 44 protected: -
branches/newapi/licq/src/event/eventmanagerimpl.cpp
r5952 r6017 19 19 20 20 #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" 21 25 22 void LicqDaemon::EventManagerImpl::registerQueue(const std::string& event,26 void LicqDaemon::EventManagerImpl::registerQueue(const std::string& name, 23 27 Licq::EventQueue* queue, 24 28 int priority) 25 29 { 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); 26 37 } 27 38 28 void LicqDaemon::EventManagerImpl::unregisterQueue(const std::string& event,39 void LicqDaemon::EventManagerImpl::unregisterQueue(const std::string& name, 29 40 Licq::EventQueue* queue) 30 41 { 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); 31 52 } 32 53 33 54 void LicqDaemon::EventManagerImpl::unregisterQueue(Licq::EventQueue* queue) 34 55 { 56 Licq::WriteLocker locker(&myEventPipesMutex); 57 58 for (EventPipes::iterator pipe = myEventPipes.begin(); 59 pipe != myEventPipes.end();) 60 { 61 removeQueue(pipe++, queue); 62 } 35 63 } 36 64 37 void LicqDaemon::EventManagerImpl::sendEvent(boost::shared_ptr<Licq::Event>& event) 65 void LicqDaemon::EventManagerImpl::sendEvent(const std::string& name, 66 boost::shared_ptr<Licq::Event> event) 38 67 { 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); 39 78 } 40 79 41 80 LicqDaemon::EventManagerImpl::EventManagerImpl() 42 : myEventQueuesMutex("EventManager") 81 : myLog(Globals::getDaemonLog()), 82 myEventPipesMutex("EventManager") 43 83 { 44 84 } … … 46 86 LicqDaemon::EventManagerImpl::~EventManagerImpl() 47 87 { 88 Licq::WriteLocker locker(&myEventPipesMutex); 89 while (!myEventPipes.empty()) 90 deletePipe(myEventPipes.begin()); 48 91 } 92 93 void 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 101 void 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 22 22 23 23 #include "event/eventmanager.h" 24 #include "event/eventpipe.h" 24 25 #include "event/eventqueue.h" 25 26 #include "licq/event/event.h" 27 #include "licq/log.h" 26 28 #include "licq/thread/readwritemutex.h" 27 29 … … 35 37 { 36 38 public: 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 39 46 void unregisterQueue(Licq::EventQueue* queue); 40 47 41 void sendEvent(boost::shared_ptr<Licq::Event>& event); 48 void sendEvent(const std::string& name, 49 boost::shared_ptr<Licq::Event> event); 42 50 43 51 private: … … 47 55 ~EventManagerImpl(); 48 56 49 struct EventQueuePriority 50 { 51 EventQueue* queue; 52 int priority; 53 }; 57 Licq::Log& myLog; 54 58 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); 58 65 }; 59 66
