/** * Base class which provides a common class to get tx/rx handler * $Id$ * $HeadURL$ * $Author$ * Created by Christian Ehrlicher, SLSE, 2016-09-26 */ #pragma once #include #include #include #include "training_area_telegrams.h" class QSqlDatabase; namespace NGL { class Settings; } namespace TrainingAreaBase { class DdsHandler; class SendToTab; class TxMixin; class RecvFromTab; namespace Plugin { class Interface; class DataProvider { public: DataProvider() = default; virtual ~DataProvider() = default; virtual int exerciseId() const = 0; virtual bool useTetraScrambling() const = 0; virtual ProjectDataManagement::RadioGroup exerciseRadioGroup() const = 0; virtual TetraIcd::ExerciseEnvironmentData exerciseEnvironmentData() const = 0; virtual TetraIcd::ExerciseStateData exerciseStateData() const = 0; // returns a container which contains the assignment of the equipments to an exercise virtual TetraIcd::ExerciseEquipmentAssignmentComplete exerciseEquipmentAssignment() const = 0; virtual QVector aesTelegrams() const = 0; virtual QSqlDatabase databaseConnection() const = 0; virtual QString databaseSchemaName() const = 0; virtual int domainId() const = 0; }; class Plugin { public: Plugin() = default; virtual ~Plugin() = default; // This createInterface Method is used for Plugins that have a websocket server and need to register a port in the service management virtual std::shared_ptr createInterface(DataProvider *pdp, const std::shared_ptr &recvFromTabCb, const std::shared_ptr &sendToTabCb, const std::shared_ptr &ddsHandler, NGL::Settings *settings) = 0; }; class Interface : public QObject { Q_OBJECT public: Interface() = default; virtual ~Interface() = default; virtual bool init() = 0; virtual std::shared_ptr sendToTab() = 0; virtual bool isDebugInterface() const = 0; virtual bool canSendData() const = 0; virtual void exerciseChanged () = 0; virtual const char *name() const = 0; virtual bool turnOn(bool turnOn) { Q_UNUSED(turnOn); return false; } // Plugins can reimplement this method for turn on/off. signals: void connectionState(const QString &name, bool connectionState); void directMessage(const QByteArray &jsonMessage); }; } // namespace Plugin } // namespace TrainingAreaBase Q_DECLARE_INTERFACE(TrainingAreaBase::Plugin::Plugin, "special:3:tetra")