Subversion Repositories HomeAutomation

Rev

Rev 1317 | Rev 1319 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed

  1. /*
  2.  * Subscriber.h
  3.  *
  4.  *  Created on: Apr 25, 2009
  5.  *      Author: Mattias Runge
  6.  */
  7.  
  8. #ifndef SUBSCRIBER_H_
  9. #define SUBSCRIBER_H_
  10.  
  11. #include <iostream>
  12.  
  13. #include <boost/bind.hpp>
  14. #include <boost/signal.hpp>
  15. #include <boost/thread.hpp>
  16. #include <boost/thread/mutex.hpp>
  17. #include <boost/thread/condition.hpp>
  18. #include <boost/thread/locks.hpp>
  19. #include "Broker.h"
  20. #include "message/Message.h"
  21. #include "log/Logger.h"
  22. #include "thread/Thread.h"
  23. #include "thread/Queue.hpp"
  24. #include <boost/make_shared.hpp>
  25.  
  26. namespace atom {
  27. namespace broker {
  28.  
  29. using namespace utils;
  30. using namespace message;
  31.  
  32. class Subscriber : public boost::signals::trackable, public thread::Thread
  33. {
  34.     typedef boost::mutex::scoped_lock lock;
  35.  
  36. public:
  37.     typedef boost::shared_ptr<Subscriber> pointer;
  38.  
  39.     Subscriber(boost::shared_ptr<Broker> broker, bool receiveFromMyself);
  40.     virtual ~Subscriber();
  41.  
  42. protected:
  43.     boost::shared_ptr<Broker> myBroker;
  44.  
  45.     void put(Message::pointer message);
  46.     virtual void onNewMessage(Message::pointer message);
  47.  
  48. private:
  49.     log::Logger LOG;
  50.     thread::Queue<Message::pointer> myQueue;
  51.     bool myReceiveFromMyself;
  52.     boost::condition myCondition;
  53.     boost::mutex myMutex;
  54.  
  55.     void newMessageHandler(Message::pointer message);
  56.     void run();
  57. };
  58.  
  59. }
  60. }
  61.  
  62. #endif /* SUBSCRIBER_H_ */
  63.