/** * @RDE_HEADER@ * Video download communication * $Id$ * $HeadURL$ * $Author$ * Created by Astrid Müller, SGAS, 2018-02-22 */ #pragma once #include "ivd_comm.h" #include "ava_types.h" #include "avm_export.h" #include "logger.h" #include #include #include #include class QByteArray; class QString; class QStringList; namespace AudioVideoManagement { /** * Implements the client-side of the RCP/VD-Protocoll -- i.e. the communication with AVS_Export. * * The Idea of this class is simply to provide * 1. Methods to issue commands * 2. Signals for incoming replys (defined in IVdComm). * 3. Possibly reconnecting when the connection got lost. * Observing the connection using KeepAlives is done by VdSession. * * A command can have multiple replys and thus can trigger multiple signals. * The layer above is then responsible to keep track of certain states in the protocol * and to e.g. assemble the received information into a more abstract format. * * @see VdControl * @see VdSession * @author Astrid Müller, Christian Fröbel */ class AVM_COMMON_EXPORT VdComm : public IVdComm { Q_OBJECT public: VdComm(const QString &vdHost, quint16 vdPort); void start(); void forceDisconnect() override; void switchContext(int exerciseId) override; void vdSetScript(const QString &scriptName, AvaStreamType typ, int fileSplitting, const QVector &streams, const QString &exportedDirBaseName, const QString &absolutePath) override; void vdReleaseScript(const QString &scriptName) override; void keepAlive() override; private slots: void onReadyRead(QTcpSocket *socket); private: enum class Response { Ok = 200, ScriptInfo = 230, ScriptState = 231, ScriptPos = 233, ExportProgress = 271, InvalidNameList = 292, KeepAlive = 298, EndOfParameterList = 299 }; void parseResponse(const QByteArray &line); AVSocketWrapper m_avSocket; LOGGER_T m_logger; LOGGER_T m_loggerIO; }; } // namespace AudioVideoManagement