From 1f97ccdac792c0b5b07972e7d4b2f28416046ea8 Mon Sep 17 00:00:00 2001 From: Jon Bergli Heier Date: Sun, 12 Jun 2011 15:41:08 +0200 Subject: Added MSG_TYPE_PLAYER with id, name and position. --- messages.cpp | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) (limited to 'messages.cpp') diff --git a/messages.cpp b/messages.cpp index bf50d8c..68e46d2 100644 --- a/messages.cpp +++ b/messages.cpp @@ -174,3 +174,74 @@ std::string Message::get_str() { return s; } + +/* Player */ + +Player::Player() { + type = MSG_TYPE_PLAYER; + + str_len = 0; + got_len = false; +} + +Player::Player(uint32_t id, Vector3 pos, std::string name) { + type = MSG_TYPE_PLAYER; + + str_len = name.size(); + + std::ostream os(&b); + os.write((const char*)&id, sizeof(id)); + + os.write((const char*)&pos.x, sizeof(pos.x)); + os.write((const char*)&pos.y, sizeof(pos.y)); + os.write((const char*)&pos.z, sizeof(pos.z)); + + os.write((const char*)&str_len, sizeof(str_len)); + os.write(name.c_str(), str_len); + + got_len = true; +} + +std::size_t Player::payload_size() { + return (got_len ? str_len : (sizeof(uint32_t) + sizeof(float)*3 + sizeof(uint16_t))); +} + +uint32_t Player::get_id() { + std::istream is(&b); + is.read((char*)&id, sizeof(id)); + + return id; +} + +uint16_t Player::get_len() { + std::istream is(&b); + is.read((char*)&str_len, sizeof(str_len)); + + got_len = true; + + return str_len; +} + +Vector3 Player::get_pos() { + Vector3 pos; + + std::istream is(&b); + is.read((char*)&pos.x, sizeof(pos.x)); + is.read((char*)&pos.y, sizeof(pos.y)); + is.read((char*)&pos.z, sizeof(pos.z)); + + return pos; +} + +std::string Player::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; +} -- cgit v1.2.3