diff options
Diffstat (limited to 'common/message.h')
-rw-r--r-- | common/message.h | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/common/message.h b/common/message.h index 0d11f02..1c9276d 100644 --- a/common/message.h +++ b/common/message.h @@ -6,9 +6,6 @@ using boost::make_shared; using boost::dynamic_pointer_cast; -#include <boost/archive/text_oarchive.hpp> -#include <boost/archive/text_iarchive.hpp> - #include <stdint.h> #include <vector> #include <string> @@ -57,6 +54,7 @@ namespace Message { virtual void deserialize(uint8_t* data, std::size_t bytes); }; + template<class Sub> class BoostBase : public Base { protected: BoostBase(Type t); @@ -65,8 +63,10 @@ namespace Message { virtual std::pair<uint8_t*, std::size_t> 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; + template<class Archive> + void serialize(Archive & ar, const unsigned int version) { + ar & dynamic_cast<Sub&>(*this); + } }; class Hello : public Base { @@ -108,7 +108,7 @@ namespace Message { virtual void deserialize(uint8_t* data, std::size_t bytes); }; - class GameStart : public BoostBase { + class GameStart : public BoostBase<GameStart> { public: typedef boost::shared_ptr<GameStart> p; @@ -117,8 +117,11 @@ namespace Message { std::vector<std::string> players; int player_id; - virtual void serialize(boost::archive::text_oarchive& ar); - virtual void deserialize(boost::archive::text_iarchive& ar); + template<class Archive> + void serialize(Archive & ar, const unsigned int version) { + ar & players; + ar & player_id; + } }; class Ready : public NullBase { @@ -135,7 +138,7 @@ namespace Message { RoundStart(); }; - class RoundState : public BoostBase { + class RoundState : public BoostBase<RoundState> { public: typedef boost::shared_ptr<RoundState> p; @@ -165,11 +168,15 @@ namespace Message { Actions possible_actions; - virtual void serialize(boost::archive::text_oarchive& ar); - virtual void deserialize(boost::archive::text_iarchive& ar); + template<class Archive> + void serialize(Archive & ar, const unsigned int version) { + ar & players; + ar & dora; + ar & possible_actions; + } }; - class RoundAction : public BoostBase { + class RoundAction : public BoostBase<RoundAction> { public: typedef boost::shared_ptr<RoundAction> p; @@ -177,8 +184,10 @@ namespace Message { Action action; - virtual void serialize(boost::archive::text_oarchive& ar); - virtual void deserialize(boost::archive::text_iarchive& ar); + template<class Archive> + void serialize(Archive & ar, const unsigned int version) { + ar & action; + } }; class RoundEnd : public NullBase { |