diff options
author | Jon Bergli Heier <snakebite@jvnv.net> | 2011-06-02 00:17:38 +0200 |
---|---|---|
committer | Jon Bergli Heier <snakebite@jvnv.net> | 2011-06-02 00:17:38 +0200 |
commit | 555f65ad7171511d74513b7055552a941a6fe0f2 (patch) | |
tree | 5a5e10f856574c74c32532e5555abee7b6a873bd /messages.cpp | |
parent | 1211f632092db824fb2c880063599f7642c34f30 (diff) |
Added a Message class with MessageType MSG_TYPE_MSG to transfer text strings.
Diffstat (limited to 'messages.cpp')
-rw-r--r-- | messages.cpp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/messages.cpp b/messages.cpp index 7bff612..bf50d8c 100644 --- a/messages.cpp +++ b/messages.cpp @@ -127,3 +127,50 @@ void Chunk::get_coords(int64_t& x, int64_t& y) { is.read((char*)&y, sizeof(y)); got_coords = true; } + +/* Message */ + +Message::Message() { + type = MSG_TYPE_MSG; + + str_len = 0; + got_len = false; +} + +Message::Message(std::string msg) { + type = MSG_TYPE_MSG; + + str_len = msg.size(); + + std::ostream os(&b); + os.write((const char*)&str_len, sizeof(str_len)); + os.write(msg.c_str(), str_len); + + got_len = true; +} + +std::size_t Message::payload_size() { + return (got_len ? str_len : sizeof(uint16_t)); +} + +uint16_t Message::get_len() { + std::istream is(&b); + is.read((char*)&str_len, sizeof(str_len)); + + got_len = true; + + return str_len; +} + +std::string Message::get_str() { + std::string s; + + char *buf = new char[str_len]; + std::istream is(&b); + is.read(buf, str_len); + + s.assign(buf, str_len); + delete[] buf; + + return s; +} |