/** * Websocket C++ API for building control unit * $Id$ * $HeadURL$ * $Author$ * Created by Christian Ehrlicher, SLSE, 2017-01-30 */ #pragma once #include #include #include #include #include #include #include class QWebSocket; namespace BuildingControlUnit { namespace Json { namespace Telegrams { class BaseTelegram; } class WebSocketHandler; class BUILDINGCONTROLJSON_EXPORT Api : public QObject { Q_OBJECT public: explicit Api(QObject *parent = nullptr); bool init(quint16 listenPort); void sendHitResult(const HitResult &hitResult, const QMap &contaminationStates, QWebSocket *ws); void sendBsmState(const QVector &bsmStates, QWebSocket *ws); void sendRelayState(const QString &segment, const qint64 stateTime, const qint64 offlineTime, const QVector &relayStates, QWebSocket *ws); void sendEffectOverrides(const QString &segment, const qint64 stateTime, const qint64 offlineTime, const QVector &effectOverrides, QWebSocket *ws); public Q_SLOTS: void onHitResult(const HitResult &hitResult, const QMap &contaminationStates, bool playSound); void onBsmState(const QVector &bsmStates); void onRelayState(const RelayState &relayState); Q_SIGNALS: void damageStateRequest(int originatorId, DamageState damageState, const QVector &roomIds); void setContaminationStateRequest(const std::vector &contaminationStates); void resetContaminationRequest(); void setEffectStatesRequest( const QString &hostname, const QVector &effectStates); void switchRelayRequest( const QString &hostname, const SwitchRelayValues &switchRelayValues); void setFortifyFactorRequest(int originatorId, const QVector &foritfyInfos); void relayStatesRequest(const QString &hostname, const QVector &RelayStateInfos); void bsmTriggerFlashlightRequest(int sensorId, const QString &hostname, int numberOfFlashes, int pauseBetweenFlashesSec); // tasInd void centralEffectSimulationHit(const qint64 effectTimeMSec, const int chargeTypeId, const int destructiveFactor, const int penetrationFactor, const int aesId, const LtsUtils::QPoint3D &relImpact, const QString &properties); void centralEffectSimulationHit3D(const qint64 effectTimeMSec, const int chargeTypeId, const int destructiveFactor, const int penetrationFactor, const int aesId, const LtsUtils::QPoint3D &relImpact, const LtsUtils::QPoint3D &relDetonationLocation, const double detonationDistance, const QString &properties); // debug - simulate BSM hit void simulateBSMHit(qint64 timeMSec, int sensorId, int originatorId, int chargeTypeId, int deposition1, int deposition2); // request status for a bsm void getBsmConfiguration(int sensorId); void getBsmBitTimeout(int sensorId); void getBsmTechnicalStatus(int sensorId); void webSocketConnected(QWebSocket *ws); private Q_SLOTS: void onTelegramReceived(const std::shared_ptr &tele); private: WebSocketHandler *m_webSocketHandler; NGL::INGLLogger &m_logger; }; } // namespace Json } // namespace BuildingControlUnit