messages.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #include <stdint.h>
  2. #include <vector>
  3. class membuf;
  4. class membuf //to avoid streambuf from boost
  5. {
  6. public:
  7. membuf( size_t size=64 );
  8. ~membuf();
  9. void write(const char* c,size_t s);
  10. void read(char*c ,size_t s);
  11. const char* buffer() const;
  12. void set(const char* , const char*);
  13. size_t size() const;
  14. void reset();
  15. private:
  16. std::vector<char> m_buffer;
  17. uint32_t m_cursor;
  18. };
  19. class pipeMessage{
  20. public:
  21. pipeMessage();
  22. virtual ~pipeMessage();
  23. virtual void serialize(membuf&) const=0;
  24. static pipeMessage* deserialize(membuf& istr);
  25. virtual int id()const =0;
  26. };
  27. void registerMessage(int id, pipeMessage* (*Factory)(membuf&));
  28. class nullMessage:public pipeMessage{
  29. public:
  30. nullMessage();
  31. ~nullMessage();
  32. static pipeMessage* create(membuf& in);
  33. int id() const;
  34. void serialize(membuf& out) const;
  35. };
  36. class lastMessage:public pipeMessage{
  37. public:
  38. lastMessage();
  39. ~lastMessage();
  40. static pipeMessage* create(membuf& in);
  41. int id() const;
  42. void serialize(membuf& out) const;
  43. private:
  44. static int m_id; // may be automatically calculated on registering
  45. };
  46. class testMessage:public pipeMessage{
  47. public:
  48. testMessage(double d);
  49. ~testMessage();
  50. static pipeMessage* create(membuf& in);
  51. int id() const;
  52. void serialize(membuf& out) const;
  53. double data() const;
  54. private:
  55. double m_data;
  56. static int m_id; // may be automatically calculated on registering
  57. };