#pragma once #include "nvhttp.h" #include "nvaddress.h" #include #include #include #include class NvComputer { friend class PcMonitorThread; friend class ComputerManager; friend class PendingQuitTask; private: void sortAppList(); bool updateAppList(QVector newAppList); bool pendingQuit; public: explicit NvComputer(NvHTTP& http, QString serverInfo); explicit NvComputer(QSettings& settings); void setRemoteAddress(QHostAddress); bool update(NvComputer& that); bool wake(); bool isReachableOverVpn(); QVector uniqueAddresses() const; void serialize(QSettings& settings) const; enum PairState { PS_UNKNOWN, PS_PAIRED, PS_NOT_PAIRED }; enum ComputerState { CS_UNKNOWN, CS_ONLINE, CS_OFFLINE }; // Ephemeral traits ComputerState state; PairState pairState; NvAddress activeAddress; uint16_t activeHttpsPort; int currentGameId; QString gfeVersion; QString appVersion; QVector displayModes; int maxLumaPixelsHEVC; int serverCodecModeSupport; QString gpuModel; bool isSupportedServerVersion; // Persisted traits NvAddress localAddress; NvAddress remoteAddress; NvAddress ipv6Address; NvAddress manualAddress; QByteArray macAddress; QString name; bool hasCustomName; QString uuid; QSslCertificate serverCert; QVector appList; // Synchronization mutable QReadWriteLock lock; private: uint16_t externalPort; };