89 lines
2.4 KiB
C
89 lines
2.4 KiB
C
|
/*
|
||
|
Copyright (c) 2008-2009 by Jakob Schroeter <js@camaya.net>
|
||
|
This file is part of the gloox library. http://camaya.net/gloox
|
||
|
|
||
|
This software is distributed under a license. The full license
|
||
|
agreement can be found in the file LICENSE in this distribution.
|
||
|
This software may not be copied, modified, sold or distributed
|
||
|
other than expressed in the named license agreement.
|
||
|
|
||
|
This software is distributed without any warranty.
|
||
|
*/
|
||
|
|
||
|
|
||
|
#ifndef EVENTDISPATCHER_H__
|
||
|
#define EVENTDISPATCHER_H__
|
||
|
|
||
|
#include "event.h"
|
||
|
|
||
|
#include <map>
|
||
|
#include <string>
|
||
|
|
||
|
namespace gloox
|
||
|
{
|
||
|
|
||
|
class EventHandler;
|
||
|
|
||
|
/**
|
||
|
* @brief An Event dispatcher.
|
||
|
*
|
||
|
* @author Jakob Schroeter <js@camaya.net>
|
||
|
* @since 1.0
|
||
|
*/
|
||
|
class EventDispatcher
|
||
|
{
|
||
|
|
||
|
public:
|
||
|
/**
|
||
|
* Creates a new EventDispatcher object. You should not need to use this class directly.
|
||
|
*/
|
||
|
EventDispatcher();
|
||
|
|
||
|
/**
|
||
|
* Virtual Destructor.
|
||
|
*/
|
||
|
virtual ~EventDispatcher();
|
||
|
|
||
|
/**
|
||
|
* Looks for handlers for the given Event, and removes the handlers if requested.
|
||
|
* @param event The Event to dispatch.
|
||
|
* @param context An identifier that limits the EventHandlers that will get notified to
|
||
|
* those that are specifically interested in this context.
|
||
|
* @param remove Whether or not to remove the context from the list of known contexts. Useful for
|
||
|
* IQ IDs.
|
||
|
*/
|
||
|
void dispatch( const Event& event, const std::string& context, bool remove );
|
||
|
|
||
|
/**
|
||
|
* Looks for handlers for the given Event, identified by its type.
|
||
|
* @param event The event to dispatch.
|
||
|
*/
|
||
|
void dispatch( const Event& event );
|
||
|
|
||
|
/**
|
||
|
* Registers the given EventHandler to be notified about Events with the given context.
|
||
|
* The context will usually be an IQ ID.
|
||
|
* @param eh The EventHandler to register.
|
||
|
* @param context The context to register the EventHandler for.
|
||
|
*/
|
||
|
void registerEventHandler( EventHandler* eh, const std::string& context );
|
||
|
|
||
|
/**
|
||
|
* Removes the given EventHandler.
|
||
|
* @param eh The EventHandler to remove.
|
||
|
*/
|
||
|
void removeEventHandler( EventHandler* eh );
|
||
|
|
||
|
private:
|
||
|
typedef std::multimap<const std::string, EventHandler*> ContextHandlerMap;
|
||
|
typedef std::multimap<Event::EventType, EventHandler*> TypeHandlerMap;
|
||
|
|
||
|
ContextHandlerMap m_contextHandlers;
|
||
|
TypeHandlerMap m_typeHandlers;
|
||
|
|
||
|
};
|
||
|
|
||
|
}
|
||
|
|
||
|
#endif // EVENTDISPATCHER_H__
|