/** * WebSocket connection to AVS to retrieve AVS events * $Id$ * $HeadURL$ * $Author$ * Created by Christian Ehrlicher, SLSE, 2017-02-06 */ #pragma once #include #include #include #include #include "logger.h" #include "dds_handler.h" #include "eem_db.h" #include #include #include #include #include class QWebSocket; namespace ExerciseEventManagement { class MainHandler; class WebSocketEventServer; using DbHandler = NGLDB::DbServiceHandler; struct AvsData { int id; qint64 eventTime; qint64 endTime; ProjectDataManagement::EventType eventType; QString streamName; int mainStructureElementId; QSharedPointer timer; // no plain ptr here since AvsData is copied AvsData() : id(0) , eventTime(0) , endTime(-1) , eventType(ProjectDataManagement::EventType::Unknown) , mainStructureElementId(0) , timer(new QTimer) { timer->setSingleShot(true); timer->setInterval(3000); } }; class WebSocketAvs : public QObject { Q_OBJECT public: WebSocketAvs(MainHandler *mainHandler, const std::shared_ptr &ddsHandler, const std::shared_ptr &db, const std::shared_ptr &eventServer, const std::shared_ptr &avmDtc, const std::shared_ptr &ismDtc, int exerciseId, QObject *parent = nullptr); ~WebSocketAvs(); void setWsUrl(const QString &url); void init(); private Q_SLOTS: void onTextMessageReceived(const QString &message); void handleAvsData(const AvsData &data, const bool &lastRangeClosed); int publishData(const QString &streamName); void openWebSocket(); void closeWebSocket(); void onWebSocketError(QAbstractSocket::SocketError error); void onWebSocketConnected(); void onWebSocketDisconnected(); void onSendExerciseId(); void onCleanUpDbInternal(); QMap> getAllAvsData(); QMap> getAllInternalDbData(); private: AvsData jsonObjectToAvsData(const QJsonObject &obj); Database::EemEvent avsDataToEemEvent(const AvsData &data); ExerciseEventManagement::Event avsDataToEvent(const AvsData &data); private: std::shared_ptr m_ddsHandler; ///< Pointer to DDS handler std::shared_ptr m_dbHandler; std::shared_ptr m_eventServer; std::shared_ptr m_avmDtc; std::shared_ptr m_ismDtc; MainHandler *m_mainHandler; QWebSocket *m_wsSocket; QTimer *m_wsReconnectTimer; QTimer *m_cleanupTimer; QString m_wsUrl; QMap m_avsDataMap; int m_exerciseId; qint64 m_lastUpdate; bool m_bWebSocketDisconnectedWarnedOnce; LOGGER_T m_logger; }; } // namespace ExerciseEventManagement