Subversion Repositories HomeAutomation

Rev

Rev 1319 | 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 "message/Message.h"
  20. #include "log/Logger.h"
  21. #include "thread/Thread.h"
  22. #include "thread/Queue.hpp"
  23. #include <boost/make_shared.hpp>
  24.  
  25. namespace atom {
  26.  
  27. using namespace message;
  28.  
  29. class Subscriber : public boost::signals::trackable, public thread::Thread
  30. {
  31. public:
  32.     typedef boost::shared_ptr<Subscriber> Pointer;
  33.  
  34.     Subscriber(bool receive_from_self);
  35.     virtual ~Subscriber();
  36.  
  37. protected:
  38.     void PutMessage(Message::pointer message);
  39.     Message::pointer CreateMessage() const;
  40.  
  41.     virtual void OnMessage(Message::pointer message) = 0;
  42.  
  43. private:
  44.     log::Logger LOG;
  45.  
  46.     thread::Queue<Message::pointer> queue_;
  47.     bool receive_from_self_;
  48.  
  49.     boost::condition on_message_condition_;
  50.     boost::mutex guard_mutex_;
  51.  
  52.     void Slot_OnMessage(Message::pointer message);
  53.  
  54.     void Run();
  55. };
  56.  
  57. }
  58. }
  59.  
  60. #endif /* SUBSCRIBER_H_ */
  61.