#ifndef MESSAGE_H #define MESSAGE_H #include #include using boost::make_shared; using boost::dynamic_pointer_cast; #include #include namespace Message { namespace Types { //! Message types. enum Type { Undefined, Hello, Login, LoginResponse, LobbyStatus, LobbyAction, GameStart, Ready, RoundStart, RoundState, RoundAction, RoundEnd, GameEnd }; } using Types::Type; class Base { protected: Base(Type t) : type(t) {} public: const Type type; virtual std::pair serialize() = 0; virtual void deserialize(uint8_t* data, std::size_t bytes) = 0; }; class Hello : public Base { public: typedef boost::shared_ptr p; Hello(); Hello(const std::string& v); std::string version; virtual std::pair serialize(); virtual void deserialize(uint8_t* data, std::size_t bytes); }; class Login : public Base { public: typedef boost::shared_ptr p; Login(); Login(const std::string& n); std::string nick; virtual std::pair serialize(); virtual void deserialize(uint8_t* data, std::size_t bytes); }; class LoginResponse : public Base { public: typedef boost::shared_ptr p; LoginResponse(); LoginResponse(bool ok); bool login_ok; virtual std::pair serialize(); virtual void deserialize(uint8_t* data, std::size_t bytes); }; class GameStart : public Base { public: typedef boost::shared_ptr p; GameStart(); virtual std::pair serialize(); virtual void deserialize(uint8_t* data, std::size_t bytes); }; typedef boost::shared_ptr p; }; #endif