#pragma once #include "XNEventManager/XNEventManager.h" #include "XNObject/XNObject.h" #include "XNServiceManager/XNServiceManager.h" namespace XNSim { struct XNServiceObjectPrivate; class XNServiceObject : public XNObject { XN_METATYPE(XNServiceObject, XNObject) XN_DECLARE_PRIVATE(XNServiceObject) public: XNServiceObject(); virtual ~XNServiceObject(); protected: XNServiceObject(PrivateType *p); public: const XN_STRING &GetVersion(); const XN_STRING &GetDescription(); const XN_STRING &GetAuthor(); const XN_STRING &GetXmlPath(); const XNTimePoint &GetCreateTime(); const XNTimePoint &GetChangeTime(); void SetVersion(const XN_STRING &version); void SetDescription(const XN_STRING &description); void SetAuthor(const XN_STRING &author); void SetXmlPath(const XN_STRING &xmlPath); void SetCreateTime(const XNTimePoint &createTime); void SetChangeTime(const XNTimePoint &changeTime); XN_INT32 RegisterEventHandler(const XN_STRING &eventName, XNEventCallback callback, bool async = false, XNEvent::Priority priority = XNEvent::Priority::Normal); void TriggerEvent(const XN_STRING &eventName, const XN_ANY &eventData = XN_ANY(), bool forceAsync = false, XNEvent::Priority priority = XNEvent::Priority::Normal); XN_INT32 RegisterRTEventHandler(const XN_STRING &eventName, XNEventCallback callback); void TriggerRTEvent(const XN_STRING &eventName, const XN_ANY &eventData = XN_ANY()); void SetInitializeType(XN_UINT32 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) } // namespace XNSim #define XN_SERVICE_INITIALIZE(ClassName) \ extern "C" XNSim::XNServiceObjectPtr Initial##ClassName() { \ XNSim::ClassName##Ptr obj = std::make_shared(); \ return obj; \ }