#ifndef PARKINGSPACEGUIDEREMOTESERVER_H #define PARKINGSPACEGUIDEREMOTESERVER_H #include #include #include #include #include #include #include #include #include #include "IVrConfig.h" class IVrZeroMQPublisher; class IVrZeroMQServer; class QUdpSocket; class ParkingSpaceGuideRemoteServer : public QObject { public: using ModelHandler = std::function; using StartHandler = std::function; using StopHandler = std::function; using StatusProvider = std::function; using RunningProvider = std::function; using StringProvider = std::function; using LogHandler = std::function; using PasswordHandler = std::function; using BoolHandler = std::function; using JsonObjectProvider = std::function; using SessionsProvider = std::function; using SamplesProvider = std::function; using ModelValidator = std::function; struct ControlHandlers { ModelHandler modelHandler; StartHandler startHandler; StopHandler stopHandler; StatusProvider statusProvider; RunningProvider runningProvider; RunningProvider activatedProvider; StringProvider workModeProvider; LogHandler logHandler; PasswordHandler passwordHandler; BoolHandler maintenanceHandler; BoolHandler chockHandler; JsonObjectProvider panelConfigProvider; SessionsProvider sessionsProvider; SamplesProvider samplesProvider; ModelValidator modelValidator; }; explicit ParkingSpaceGuideRemoteServer(QObject* parent = nullptr); ~ParkingSpaceGuideRemoteServer() override; bool Start(const RemoteViewConfig& config, ControlHandlers handlers); void Stop(); bool IsRunning() const; bool PublishStatus(const std::string& statusJson); QString LastError() const; private: QByteArray HandleControlMessage(const QByteArray& request); void HandleDiscoveryDatagrams(); QJsonObject BuildServerInfo(const QString& command) const; std::string DeviceId() const; void SetError(const QString& message); private: RemoteViewConfig m_config; IVrZeroMQServer* m_controlServer = nullptr; IVrZeroMQPublisher* m_statusPublisher = nullptr; QUdpSocket* m_discoverySocket = nullptr; ControlHandlers m_handlers; std::atomic m_running{false}; mutable std::mutex m_publishMutex; mutable std::mutex m_errorMutex; QString m_lastError; }; #endif // PARKINGSPACEGUIDEREMOTESERVER_H