#pragma once #include #include "AppComponent.hpp" #include "logger.h" #include #include #include #include namespace PrtCnv { class PrtCnvThreadStarter; class PRTCNVLIB_EXPORT PrtCnvApplication : public QObject, public N_AppComponent::AppComponent { Q_OBJECT public: enum E_ThreadId { e_Central, e_Radio, e_Db, e_Log, e_Injection, e_RadioTraffic, e_ThreadIdMax }; PrtCnvApplication(); ~PrtCnvApplication(); void startApp(); void shutdownApp(); static void setCleanDb(bool bCleanDb); void setExerciseId(int exerciseId); int exerciseId() const { return m_exerciseId; } void setConfigFile(const QString &configFile); int32_t start() override; void waitForInit(E_ThreadId a_threadId); void waitForStart(E_ThreadId a_threadId); void waitForCreate(const E_ThreadId a_threadId); void waitForExec(E_ThreadId a_threadId); PrtCnvThreadStarter* getThreadStarter(const E_ThreadId a_threadId); void setDatabaseConnectionParams(const QString &driver, const QString &hostName, const QString &database, const QString &schemaName, const QString &userName, const QString &password); QString databaseDriver() const { return m_dbDriver; } QString databaseHostName() const { return m_dbHostName; } QString databaseName() const { return m_dbDatabaseName; } QString databaseSchemaName() const { return m_dbSchemaName; } QString databaseUserName() const { return m_dbUserName; } QString databasePassword() const { return m_dbPassword; } public slots: void logWlsTelegram(const TrainingAreaBase::TetraIcd::TrainingAreaTelegram *tele, bool bIsSend); signals: void textMessageFromPrtCnvToCentral(const QByteArray &ba); void textMessageFromCentralToPrtCnv(const QByteArray &ba); void outgoingBroadcastTelegramsRequest(int equipmentNumber, int broadcastIndex, int resetCounter); void warehouseMessageFromPtrCnv(const QByteArray &jsonData); protected: int32_t createApplication(); bool isConstructed(const E_ThreadId a_threadId) const; void setConstructed(const E_ThreadId a_threadId); bool isInitialized(const E_ThreadId a_threadId) const; void setInitialized(const E_ThreadId a_threadId); bool isCreated(const E_ThreadId a_threadId) const; void setCreated(const E_ThreadId a_threadId); bool isStarted(const E_ThreadId a_threadId) const; void setStarted(const E_ThreadId a_threadId); protected: NGL::Settings *m_Config; struct ThreadInfo { PrtCnvThreadStarter *thread = nullptr; bool isConstructed = false; bool isCreated = false; bool isInitialized = false; bool isStarted = false; } m_threadInfo[e_ThreadIdMax]; QString m_ConfigFileName; int m_exerciseId; mutable QMutex m_accessMutex; QString m_dbDriver; QString m_dbHostName; QString m_dbDatabaseName; QString m_dbSchemaName; QString m_dbUserName; QString m_dbPassword; NGL::INGLLogger &m_logger; }; }