summaryrefslogtreecommitdiff
path: root/messages.cpp
diff options
context:
space:
mode:
authorJon Bergli Heier <snakebite@jvnv.net>2011-06-02 00:17:38 +0200
committerJon Bergli Heier <snakebite@jvnv.net>2011-06-02 00:17:38 +0200
commit555f65ad7171511d74513b7055552a941a6fe0f2 (patch)
tree5a5e10f856574c74c32532e5555abee7b6a873bd /messages.cpp
parent1211f632092db824fb2c880063599f7642c34f30 (diff)
Added a Message class with MessageType MSG_TYPE_MSG to transfer text strings.
Diffstat (limited to 'messages.cpp')
-rw-r--r--messages.cpp47
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;
+}