summaryrefslogtreecommitdiff
path: root/messages.h
diff options
context:
space:
mode:
authorJon Bergli Heier <snakebite@jvnv.net>2011-06-12 20:26:46 +0200
committerJon Bergli Heier <snakebite@jvnv.net>2011-06-12 20:26:46 +0200
commite483f468085379a986cbc48bb13a7983315475cf (patch)
treef5ba54f538cb1c3ae4880a58f112548da443c921 /messages.h
parent1f97ccdac792c0b5b07972e7d4b2f28416046ea8 (diff)
Reworked the message classes to be more coder-friendly.
Diffstat (limited to 'messages.h')
-rw-r--r--messages.h71
1 files changed, 53 insertions, 18 deletions
diff --git a/messages.h b/messages.h
index d521fef..62f5a03 100644
--- a/messages.h
+++ b/messages.h
@@ -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();
};
}