summaryrefslogtreecommitdiff
path: root/common/message.h
diff options
context:
space:
mode:
Diffstat (limited to 'common/message.h')
-rw-r--r--common/message.h37
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 {