diff options
author | Jon Bergli Heier <snakebite@jvnv.net> | 2011-06-12 20:26:46 +0200 |
---|---|---|
committer | Jon Bergli Heier <snakebite@jvnv.net> | 2011-06-12 20:26:46 +0200 |
commit | e483f468085379a986cbc48bb13a7983315475cf (patch) | |
tree | f5ba54f538cb1c3ae4880a58f112548da443c921 /messages.h | |
parent | 1f97ccdac792c0b5b07972e7d4b2f28416046ea8 (diff) |
Reworked the message classes to be more coder-friendly.
Diffstat (limited to 'messages.h')
-rw-r--r-- | messages.h | 71 |
1 files changed, 53 insertions, 18 deletions
@@ -19,46 +19,77 @@ enum MessageType { class MessageBase { protected: uint8_t type; - boost::asio::streambuf b; + + template<typename T> + static inline void read(boost::asio::ip::tcp::socket& socket, T& v) { + boost::asio::read(socket, boost::asio::buffer(&v, sizeof(T))); + } + static std::string read_string(boost::asio::ip::tcp::socket& socket); + + template<typename T> + static inline void write(boost::asio::ip::tcp::socket& socket, T& v) { + boost::asio::write(socket, boost::asio::buffer(&v, sizeof(T))); + } + + static void write_string(boost::asio::ip::tcp::socket& socket, std::string str); + + //! Does the actual sending of data per packet type. + virtual void do_send(boost::asio::ip::tcp::socket& socket) = 0; public: MessageBase(); virtual ~MessageBase() {}; + //! Sends the packet type and calls do_send(). void send(boost::asio::ip::tcp::socket& socket); - virtual std::size_t payload_size(); - virtual void read(boost::asio::ip::tcp::socket& socket); + virtual void recv(boost::asio::ip::tcp::socket& socket) = 0; static uint8_t read_type(boost::asio::ip::tcp::socket& socket); }; class Hello : public MessageBase { + protected: + uint8_t version; + + virtual void do_send(boost::asio::ip::tcp::socket& socket); + public: Hello(); Hello(uint8_t version); - virtual std::size_t payload_size(); - uint8_t read_version(); + virtual void recv(boost::asio::ip::tcp::socket& socket); + + uint8_t get_version(); }; class Pos : public MessageBase { + protected: + Vector3 pos; + + virtual void do_send(boost::asio::ip::tcp::socket& socket); + public: Pos(); - Pos(float x, float y, float z); + Pos(Vector3 pos); - virtual std::size_t payload_size(); - void get_pos(float& x, float& y, float& z); + virtual void recv(boost::asio::ip::tcp::socket& socket); + + Vector3 get_pos(); }; class Chunk : public MessageBase { protected: - bool got_coords; + int64_t x, y; + float *data; + + virtual void do_send(boost::asio::ip::tcp::socket& socket); public: Chunk(); Chunk(int64_t x, int64_t y); - virtual std::size_t payload_size(); + virtual void recv(boost::asio::ip::tcp::socket& socket); + void set_data(float *data); float* get_data(); void get_coords(int64_t& x, int64_t& y); @@ -66,14 +97,16 @@ class Chunk : public MessageBase { class Message : public MessageBase { protected: - uint16_t str_len; - bool got_len; + std::string msg; + + virtual void do_send(boost::asio::ip::tcp::socket& socket); public: Message(); Message(std::string msg); - virtual std::size_t payload_size(); + virtual void recv(boost::asio::ip::tcp::socket& socket); + uint16_t get_len(); std::string get_str(); }; @@ -81,18 +114,20 @@ class Message : public MessageBase { class Player : public MessageBase { protected: uint32_t id; - uint16_t str_len; - bool got_len; + Vector3 pos; + std::string name; + + virtual void do_send(boost::asio::ip::tcp::socket& socket); public: Player(); Player(uint32_t id, Vector3 pos, std::string name); - virtual std::size_t payload_size(); + virtual void recv(boost::asio::ip::tcp::socket& socket); + uint32_t get_id(); Vector3 get_pos(); - uint16_t get_len(); - std::string get_str(); + std::string get_name(); }; } |