#pragma once #include "XNObject.h" #include "XNServiceManager.h" #include "XNEventManager.h" struct XNServiceObjectPrivate; class XNServiceObject : public XNObject { XN_METATYPE(XNServiceObject, XNObject) XN_DECLARE_PRIVATE(XNServiceObject) public: XNServiceObject(); virtual ~XNServiceObject(); protected: XNServiceObject(PrivateType *p); public: const std::string &GetVersion(); const std::string &GetDescription(); const std::string &GetAuthor(); const std::string &GetXmlPath(); const XNTimePoint &GetCreateTime(); const XNTimePoint &GetChangeTime(); void SetVersion(const std::string &version); void SetDescription(const std::string &description); void SetAuthor(const std::string &author); void SetXmlPath(const std::string &xmlPath); void SetCreateTime(const XNTimePoint &createTime); void SetChangeTime(const XNTimePoint &changeTime); int RegisterEventHandler(const std::string &eventName, XNEventCallback callback, bool async = false, XNEvent::Priority priority = XNEvent::Priority::Normal); void TriggerEvent(const std::string &eventName, const std::any &eventData = std::any(), bool forceAsync = false, XNEvent::Priority priority = XNEvent::Priority::Normal); int RegisterRTEventHandler(const std::string &eventName, XNEventCallback callback); void TriggerRTEvent(const std::string &eventName, const std::any &eventData = std::any()); void SetInitializeType(uint32_t initialType); virtual void Initialize(); virtual void PrepareForExecute(); virtual void RegisterDDSParticipant(); void SetFramework(XNFrameworkPtr framework); protected: XNFrameworkPtr GetFramework() const; private: void ParseXml(); void ParseConfig(); }; XNCLASS_PTR_DECLARE(XNServiceObject) #define XN_SERVICE_INITIALIZE(ClassName) \ extern "C" XNServiceObjectPtr Initial##ClassName() \ { \ ClassName##Ptr obj = std::make_shared(); \ return obj; \ }