00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __PEEKABOT_SUBSCRIBER_HH
00019 #define __PEEKABOT_SUBSCRIBER_HH
00020
00021
00022 #include <set>
00023 #include <boost/thread/recursive_mutex.hpp>
00024
00025 #include "Message.hh"
00026
00027
00028 namespace peekabot
00029 {
00030
00031
00038 class Subscriber
00039 {
00040 friend class MessageHub;
00041
00042 public:
00046 virtual void handle_message(const Message &) throw() = 0;
00047
00052 virtual ~Subscriber();
00053
00054 private:
00062 void add_subscription(MessageType type, MessageHub *hub) throw();
00063
00071 void remove_subscription(MessageType type, MessageHub *hub) throw();
00072
00073 private:
00078 typedef std::set<std::pair<MessageType, MessageHub *> > SubscriptionSet;
00079
00085 SubscriptionSet m_subscriptions;
00086
00090 mutable boost::recursive_mutex m_mutex;
00091 };
00092
00093 }
00094
00095
00096 #endif // __PEEKABOT_SUBSCRIBER_HH