/** * @RDE_HEADER@ * SimpleCommand * $Id$ * $HeadURL$ * $Author$ * Created by Christian Fröbel, SLSE, 2017-07-11 */ #pragma once #include "icommand.h" #include namespace AudioVideoManagement { class IAvaComm; class IAvaCommandDoneObserver; class IVdComm; class IVdCommandDoneObserver; namespace detail { /** * A SimpleCommand synchronises only with the OK response sent by the AVS. * In order to invoke the actual command, a function object needs to be supplied * which then calls the corresponding method on AvaComm or VdComm. * * @author Christian Fröbel */ template class SimpleCommand : public ICommand { public: /** * The AVS responds to some commands with more than one OK. In that case * the number of expected OK-responses can be specified. */ SimpleCommand(const QString &commandDesc, Comm *comm, DoneObserver *observer, std::function commandInvoker, int okCount = 1); QString debug() const override { return m_commandDesc; } void send() override; private slots: void onOk(); private: void done(); std::function m_commandInvoker; const int m_expectedOkCount; int m_okCount{0}; Comm *m_comm; DoneObserver *m_observer; QString m_commandDesc; }; } // namespace detail namespace AvaCommands { using SimpleCommand = detail::SimpleCommand; } namespace VdCommands { using SimpleCommand = detail::SimpleCommand; } } // namespace AudioVideoManagement