/** * {{ namespace }} Function Topic Client implementation * $Id$ * $HeadURL$ * $Author$ */ {% autoescape off %} // filename: {{ namespace_abbr }}_ftc_impl.h #pragma once #include <{{ include_prefix }}/{{ namespace_abbr }}_ftc.h> #include <{{ include_prefix }}/{{ namespace_abbr }}_ftc_types.h> #include <{{ include_prefix }}/logger.h> #include #include #include #include #include #if !defined(MAKE_SVC{{ namespace_abbr_upper }}CLIENT_LIB) #error "You are not allowed to include this file in your code!" #endif namespace {{ namespace }} { namespace Interface { class FtcImpl final : public QObject, public Ftc { Q_OBJECT public: explicit FtcImpl(const std::shared_ptr &ddsConnector); ~FtcImpl(); bool enableAll(bool enable = true) override; {% for ft in functionTopics.member %} bool enable{{ ft.name }}(bool enable = true) override; bool is{{ ft.name }}Enabled() const override { return m_ftc{{ ft.name }} != nullptr; } {% endfor %} {% for ft in functionTopics.member %} // // Function Topic '{{ ft.name }}' // /// Classic request: public: int64_t {{ ft.requestFlc }}(const {{ ft.requestType }} &request, {{ ft.replyHandler }} *handler) override; // returns the uniqueId used for this request int64_t {{ ft.requestFlc }}(const {{ ft.requestType }} &request, const std::function &cb) override; // returns the uniqueId used for this request int64_t last{{ ft.request }}UniqueId() const override { return m_last{{ ft.request }}UniqueId; } private Q_SLOTS: void {{ ft.onReply }}(const {{ namespace }}::{{ ft.reply }} &reply, int uniqueId, bool bRequestFinished); void {{ ft.onError }}(int reason, int uniqueId, int requestId); private: QHash> m_{{ ft.replyHandlerFlc }}; int64_t m_last{{ ft.request }}UniqueId = -1; /// Modern request: public: /* Executes the request and blocks (enters Qt's event loop) until the reply has arrived. * NOTE: If reply has a FunctionReplyWithState, this function only returns the first reply and returns. {% if ft.isCoreFt %} * Returns the id of the FunctionReply.{% endif %}*/ {% if ft.isCoreFt %}int32_t{% else %}{{ ft.replyTypeFro }}{% endif %} {{ ft.requestFlc }}(const {{ ft.requestType }} &request) noexcept(false) override; private: int m_currentlyOpen_{{ ft.requestFlc }}Requests { 0 }; std::unique_ptr m_ftc{{ ft.name }}; {% endfor %} private: std::shared_ptr m_ddsConnector; LOGGER_T m_logger; }; } // namespace Interface } // namespace {{ namespace }} {% endautoescape %}