From 2c6d82abe3c82041991066ca84ac067771756818 Mon Sep 17 00:00:00 2001 From: Vegard Storheil Eriksen Date: Mon, 15 Nov 2010 12:14:30 +0100 Subject: Added Message::NullBase and Message::BoostBase. Edited Message::GameStart to contain list of players. --- common/message.cpp | 65 ++++++++++++++++++++++++++++++++++++++++++------------ common/message.h | 40 ++++++++++++++++++++++++++------- server/SConstruct | 2 +- 3 files changed, 84 insertions(+), 23 deletions(-) diff --git a/common/message.cpp b/common/message.cpp index 526a3fd..a72bac9 100644 --- a/common/message.cpp +++ b/common/message.cpp @@ -1,6 +1,51 @@ #include "message.h" +#include +#include + #include +#include + +Message::Base::Base(Type t) : type(t) { + +} + +Message::NullBase::NullBase(Type t) : Base(t) { + +} + +std::pair Message::NullBase::serialize() { + return std::pair(0, 0); +} + +void Message::NullBase::deserialize(uint8_t* data, std::size_t bytes) { + +} + +Message::BoostBase::BoostBase(Type t) : Base(t) { + +} + +std::pair Message::BoostBase::serialize() { + std::ostringstream os; + boost::archive::text_oarchive oa(os); + + serialize(oa); + + std::size_t s = os.str().size(); + uint8_t* buf = new uint8_t[s]; + + memcpy(buf, os.str().c_str(), s); + + return std::pair(buf, s); +} + +void Message::BoostBase::deserialize(uint8_t* data, std::size_t bytes) { + std::istringstream is(std::string((char*)data, bytes)); + boost::archive::text_iarchive ia(is); + + deserialize(ia); +} Message::Hello::Hello() : Base(Types::Hello) { @@ -64,26 +109,18 @@ void Message::LoginResponse::deserialize(uint8_t* data, std::size_t bytes) { login_ok = bool(data[0]); } -Message::GameStart::GameStart() : Base(Types::GameStart) { +Message::GameStart::GameStart() : BoostBase(Types::GameStart) { } -std::pair Message::GameStart::serialize() { - return std::pair(0, 0); -} - -void Message::GameStart::deserialize(uint8_t* data, std::size_t bytes) { - +void Message::GameStart::serialize(boost::archive::text_oarchive& ar) { + ar & players; } -Message::Ready::Ready() : Base(Types::Ready) { - -} - -std::pair Message::Ready::serialize() { - return std::pair(0, 0); +void Message::GameStart::deserialize(boost::archive::text_iarchive& ar) { + ar & players; } -void Message::Ready::deserialize(uint8_t* data, std::size_t bytes) { +Message::Ready::Ready() : NullBase(Types::Ready) { } diff --git a/common/message.h b/common/message.h index b2d3078..bd68efe 100644 --- a/common/message.h +++ b/common/message.h @@ -6,7 +6,11 @@ using boost::make_shared; using boost::dynamic_pointer_cast; +#include +#include + #include +#include #include namespace Message { @@ -32,7 +36,7 @@ namespace Message { class Base { protected: - Base(Type t) : type(t) {} + Base(Type t); public: const Type type; @@ -41,6 +45,27 @@ namespace Message { virtual void deserialize(uint8_t* data, std::size_t bytes) = 0; }; + class NullBase : public Base { + protected: + NullBase(Type t); + + public: + virtual std::pair serialize(); + virtual void deserialize(uint8_t* data, std::size_t bytes); + }; + + class BoostBase : public Base { + protected: + BoostBase(Type t); + + public: + virtual std::pair serialize(); + virtual void deserialize(uint8_t* data, std::size_t bytes); + + virtual void serialize(boost::archive::text_oarchive& ar) = 0; + virtual void deserialize(boost::archive::text_iarchive& ar) = 0; + }; + class Hello : public Base { public: typedef boost::shared_ptr p; @@ -80,24 +105,23 @@ namespace Message { virtual void deserialize(uint8_t* data, std::size_t bytes); }; - class GameStart : public Base { + class GameStart : public BoostBase { public: typedef boost::shared_ptr p; GameStart(); - virtual std::pair serialize(); - virtual void deserialize(uint8_t* data, std::size_t bytes); + std::vector players; + + virtual void serialize(boost::archive::text_oarchive& ar); + virtual void deserialize(boost::archive::text_iarchive& ar); }; - class Ready : public Base { + class Ready : public NullBase { public: typedef boost::shared_ptr p; Ready(); - - virtual std::pair serialize(); - virtual void deserialize(uint8_t* data, std::size_t bytes); }; typedef boost::shared_ptr p; diff --git a/server/SConstruct b/server/SConstruct index bc7a5f1..ddf93ae 100644 --- a/server/SConstruct +++ b/server/SConstruct @@ -12,7 +12,7 @@ if env['PLATFORM'] == 'win32': env.Append(LINKFLAGS = ['-Wl,--enable-auto-import']) env.Append(LIBS = ['libboost_system-mgw44-mt-1_44.a', 'wsock32', 'ws2_32']) else: - env.Append(LIBS = ['boost_system', 'pthread']) + env.Append(LIBS = ['boost_system', 'boost_serialization', 'pthread']) if not GetOption('release'): env.Append(CPPFLAGS = ['-Wall', '-g']) -- cgit v1.2.3