reSIProcate/DialogUsageManager  9694
Public Member Functions | Private Member Functions | Private Attributes
resip::EventDispatcher< E > Class Template Reference

#include <EventDispatcher.hxx>

Inheritance diagram for resip::EventDispatcher< E >:
Inheritance graph
[legend]
Collaboration diagram for resip::EventDispatcher< E >:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 EventDispatcher ()
bool dispatch (Message *msg)
void addListener (Postable *listener)
void removeListener (Postable *listener)

Private Member Functions

std::vector< Postable * >::iterator find (Postable *listener)

Private Attributes

std::vector< Postable * > mListeners
Mutex mMutex

Detailed Description

template<class E>
class resip::EventDispatcher< E >

Definition at line 15 of file EventDispatcher.hxx.


Constructor & Destructor Documentation

template<class E>
resip::EventDispatcher< E >::EventDispatcher ( ) [inline]

Definition at line 18 of file EventDispatcher.hxx.

      {
      }

Member Function Documentation

template<class E>
void resip::EventDispatcher< E >::addListener ( Postable listener) [inline]

Definition at line 52 of file EventDispatcher.hxx.

Referenced by resip::DialogUsageManager::registerForConnectionTermination().

      {
         Lock lock(mMutex);
         std::vector<Postable*>::iterator it = find(listener);
         if (it == mListeners.end())
         {
            mListeners.push_back(listener);
         }
      }
template<class E>
bool resip::EventDispatcher< E >::dispatch ( Message msg) [inline]

Definition at line 22 of file EventDispatcher.hxx.

Referenced by resip::DialogUsageManager::internalProcess().

      {
         Lock lock(mMutex);
         bool ret = false;
         
         E* event = dynamic_cast<E*>(msg);
         if (event)
         {
            if(mListeners.size() > 0)
            {
               ret = true;
               unsigned int counter = 1;
               for (std::vector<Postable*>::iterator it = mListeners.begin(); it != mListeners.end(); ++it)
               {
                  if (counter == mListeners.size())
                  {
                     (*it)->post(msg);
                  }
                  else
                  {
                     ++counter;
                     (*it)->post(msg->clone());
                  }
               }
            }         
         }

         return ret;
      }
template<class E>
std::vector<Postable*>::iterator resip::EventDispatcher< E >::find ( Postable listener) [inline, private]

Definition at line 76 of file EventDispatcher.hxx.

Referenced by resip::EventDispatcher< ConnectionTerminated >::addListener(), and resip::EventDispatcher< ConnectionTerminated >::removeListener().

      {
         std::vector<Postable*>::iterator it;
         for (it = mListeners.begin(); it != mListeners.end(); ++it)
         {
            if (listener == *it)
            {
               break;
            }
         }
         return it;
      }
template<class E>
void resip::EventDispatcher< E >::removeListener ( Postable listener) [inline]

Definition at line 62 of file EventDispatcher.hxx.

Referenced by resip::DialogUsageManager::unRegisterForConnectionTermination().

      {
         Lock lock(mMutex);
         std::vector<Postable*>::iterator it = find(listener);         
         if (it != mListeners.end())
         {
            mListeners.erase(it);
         }
      }

Member Data Documentation

template<class E>
std::vector<Postable*> resip::EventDispatcher< E >::mListeners [private]
template<class E>
Mutex resip::EventDispatcher< E >::mMutex [private]

The documentation for this class was generated from the following file: