#pragma once #include namespace L2Bot::Domain::Serializers { class IncomingMessage { public: enum class Type { none, invalidate, move, acquireTarget, attack, pickup, useSkill, useItem, toggleSoulshot, sit, stand }; const Type GetType() const { return m_Type; } template const auto GetContent() const { return std::static_pointer_cast(m_Content); } template const T GetRawContent() const { return *std::static_pointer_cast(m_Content).get(); } IncomingMessage(Type type, std::shared_ptr content) : m_Type(type), m_Content(content) { } IncomingMessage(Type type) : m_Type(type) { } IncomingMessage() = default; virtual ~IncomingMessage() = default; private: Type m_Type = Type::none; std::shared_ptr m_Content; }; }