Initial commit
This commit is contained in:
commit
b7d90b9afe
16245 files changed
+3396666
No files matched your search
Executable
+106
@@ -0,0 +1,106 @@
|
||||
/**
|
||||
* A single building instance
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
* Created by Christian Ehrlicher, SLSE, 2017-02-06
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <QAbstractSocket>
|
||||
#include <QProcess>
|
||||
#include <QVector>
|
||||
#include <QUrl>
|
||||
#include "ism_handler.h"
|
||||
#include "logger.h"
|
||||
#include <bld.hpp>
|
||||
#include <web_socket_telegrams.h>
|
||||
|
||||
class QWebSocket;
|
||||
namespace AssetManagement {
|
||||
class RelayInfo;
|
||||
}
|
||||
namespace Buildings
|
||||
{
|
||||
class BuildingProcess : public QObject
|
||||
, protected InfrastructureManagement::Interface::Ftc::StructureElementUpdateEffectOverrideReplyHandler
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
BuildingProcess(MainHandler *mainHandler,
|
||||
const QString &procName,
|
||||
const BuildingInfo &info,
|
||||
const bool initBuilding,
|
||||
QObject *parent = nullptr);
|
||||
~BuildingProcess();
|
||||
|
||||
void setBuildingInfo(const BuildingInfo &info);
|
||||
void newRelayInfos(const QMap<int, AssetManagement::RelayInfo> &map);
|
||||
const BuildingInfo &buildingInfo() const { return m_buildingInfo; }
|
||||
quint16 getWebsocketPort() {return QUrl::fromEncoded(m_wsUrl.toLocal8Bit()).port();}
|
||||
|
||||
protected:
|
||||
void onStructureElementUpdateEffectOverrideReply(const Core::FunctionReplyObject &replyObject) override final;
|
||||
|
||||
|
||||
public Q_SLOTS:
|
||||
bool start();
|
||||
void shutdown();
|
||||
void setHistoryState(const Buildings::HistoryState &historyState);
|
||||
bool setVulnerabilityState(ProjectDataManagement::VulnerabilityState state, const std::vector<int> &roomIds);
|
||||
bool setContaminationState(const int &bldId, const ContaminationState &contaminationState);
|
||||
bool resetContaminationState();
|
||||
bool setFortifyFactors(const std::vector<Buildings::FortifyFactor> &fortifyFactors);
|
||||
bool setEffectStates(const int assetId, const QByteArray &properties);
|
||||
bool relayState(const std::vector<Buildings::RelayStateItem> &relayStates);
|
||||
bool sendCesHitOnBuilding(const qint64 effectTimeMSec, const int chargeTypeId, const int destructiveFactor, const int penetrationFactor,
|
||||
const int aesId, const Core::GeoPosition &impactPosition,
|
||||
const QString &properties);
|
||||
bool sendCesHit3DonBuilding(const qint64 effectTimeMSec, const int chargeTypeId, const int destructiveFactor, const int penetrationFactor, const int aesId, const Core::GeoPosition &impactPosition,
|
||||
const Core::GeoPosition &detonationLocation, double detonationDistance,
|
||||
const QString &properties);
|
||||
bool switchRelay(const SwitchRelayRequest &data);
|
||||
bool triggerFlashlight(const TriggerBsmFlashRequest data);
|
||||
|
||||
private Q_SLOTS:
|
||||
void onReadyRead();
|
||||
void onProcessFinished(int exitCode, QProcess::ExitStatus exitStatus);
|
||||
void onTextMessageReceived(const QString &message);
|
||||
void openWebSocket();
|
||||
void closeWebSocket();
|
||||
void onWebSocketError(QAbstractSocket::SocketError error);
|
||||
void onWebSocketConnected();
|
||||
void onWebSocketDisconnected();
|
||||
private:
|
||||
void handleBsmState(BuildingControlUnit::Json::Telegrams::BsmState *tel);
|
||||
void handleHitResult(BuildingControlUnit::Json::Telegrams::HitResult *tel);
|
||||
void handleReconnectEgcu(const QString &segment);
|
||||
void handleRelayState(BuildingControlUnit::Json::Telegrams::RelayState *tel);
|
||||
void handleEffectOverride(BuildingControlUnit::Json::Telegrams::EffectOverride *tel);
|
||||
void sendHitLine(const BuildingState &state);
|
||||
void onHitLineInfoTimeout();
|
||||
void historyState(const BuildingState &state);
|
||||
bool writeFile(const QString &fn, const QByteArray &data);
|
||||
QByteArray generateBuildingConfigData() const;
|
||||
QByteArray generateChargesData() const;
|
||||
static bool isValidPos(const Core::GeoPosition &pos);
|
||||
private:
|
||||
MainHandler *m_mainHandler;
|
||||
BuildingInfo m_buildingInfo;
|
||||
QWebSocket *m_wsSocket;
|
||||
QTimer *m_wsReconnectTimer;
|
||||
QTimer *m_hitLineInfoTimer;
|
||||
QString m_wsUrl;
|
||||
QProcess m_proc;
|
||||
int m_hitLineId;
|
||||
Buildings::HistoryState m_historyState;
|
||||
QMap<int, BuildingHitLineInfo> m_hitLineInfoMap;
|
||||
QMap<int, AssetManagement::RelayInfo> m_relayInfos;
|
||||
QMap<int, QString> m_effectStates; // key = assetId, value = properties SetEffectStates
|
||||
QMap<int, BsmState> m_bsmStates;
|
||||
QHash<int,int> m_effectOverridesReconnect; // [GUEZE 2011]
|
||||
bool m_initBuilding;
|
||||
LOGGER_T m_logger;
|
||||
};
|
||||
} // namespace Buildings
|
||||
Reference in new issue
Block a user