#ifndef MESSAGES_H #define MESSAGES_H #include namespace message { enum MessageType { MSG_TYPE_NONE = 0, MSG_TYPE_HELLO, MSG_TYPE_POS, MSG_TYPE_CHUNK }; class MessageBase { protected: uint8_t type; boost::asio::streambuf b; public: MessageBase(); virtual ~MessageBase() {}; void send(boost::asio::ip::tcp::socket& socket); virtual std::size_t payload_size(); virtual void read(boost::asio::ip::tcp::socket& socket); static uint8_t read_type(boost::asio::ip::tcp::socket& socket); }; class Hello : public MessageBase { public: Hello(); Hello(uint8_t version); virtual std::size_t payload_size(); uint8_t read_version(); }; class Pos : public MessageBase { public: Pos(); Pos(float x, float y, float z); virtual std::size_t payload_size(); void get_pos(float& x, float& y, float& z); }; class Chunk : public MessageBase { protected: bool got_coords; public: Chunk(); Chunk(int64_t x, int64_t y); virtual std::size_t payload_size(); void set_data(float *data); float* get_data(); void get_coords(int64_t& x, int64_t& y); }; } #endif