/** * {{ namespace }} Function Topic Server interface * $Id$ * $HeadURL$ * $Author$ */ {% autoescape off %} // filename: {{ namespace_abbr }}_fts.h #pragma once #include <{{ include_prefix }}/{{ namespace_abbr }}_export.h> #include <{{ include_prefix }}/{{ namespace_abbr }}.hpp> #include namespace DDSConnector { class DdsConnector; } namespace {{ namespace }} { namespace Interface { class Fts { protected: Fts() = default; public: virtual ~Fts() = default; /** * Create a new instance for {{ namespace }}::Interface::Dts. * The caller takes ownership of the returned instance */ {{ namespace_abbr_upper }}_SERVER_EXPORT static std::shared_ptr create(const std::shared_ptr &ddsConnector); /** * A unique identifier for this FTC */ {{ namespace_abbr_upper }}_SERVER_EXPORT static inline const char *identifier() { return "{{ namespace }}.Interface.Fts"; } /** * initialize this Fts instance with all function topic servers */ virtual bool enableAll(bool enable = true) = 0; /** * only initialize the specific function topic writer (can be called instead enableAll()) */ {% for ft in functionTopics.member %} virtual bool enable{{ ft.name }}(bool enable = true) = 0; virtual bool is{{ ft.name }}Enabled() const = 0; {% endfor %} {% for ft in functionTopics.member %} // // Function Topic '{{ ft.name }}' // class {{ ft.requestHandler }} { public: explicit {{ ft.requestHandler }}(const std::shared_ptr &fts) : m_fts(fts) { if (fts) fts->set{{ ft.requestHandler }}(this); } virtual ~{{ ft.requestHandler }}() { auto sp = m_fts.lock(); if (sp) sp->set{{ ft.requestHandler }}(nullptr); } virtual void {{ ft.onRequest }}(const rti::core::SampleIdentity &cookie, const {{ ft.requestType }} &request) = 0; private: std::weak_ptr m_fts; }; virtual void set{{ ft.requestHandler }}({{ ft.requestHandler }} *handler) = 0; virtual bool {{ ft.replyFlc }}(const rti::core::SampleIdentity &cookie, const {{ ft.replyType }} &reply) = 0; {% if ft.isCoreFt %} virtual bool {{ ft.replyFlc }}(const rti::core::SampleIdentity &cookie, const Core::FunctionReplyObject &replyObject) = 0; {% endif %} {% endfor %} }; } // namespace Interface } // namespace {{ namespace }} {% endautoescape %}