diff options
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();  };  }  | 
