6 #ifndef SWIFT_CORE_AFV_CONNECTION_APISERVERCONNECTION_H
7 #define SWIFT_CORE_AFV_CONNECTION_APISERVERCONNECTION_H
10 #include <QJsonDocument>
11 #include <QNetworkAccessManager>
12 #include <QNetworkReply>
13 #include <QNetworkRequest>
24 namespace swift::core::afv::connection
52 void connectTo(
const QString &username,
const QString &password,
const QString &client,
62 void updateTransceivers(
const QString &callsign,
const QVector<TransceiverDto> &transceivers);
71 bool setUrl(
const QString &url);
74 const QString &
getUrl()
const {
return m_addressUrl; }
80 const QString &
getClient()
const {
return m_client; }
86 template <
typename TResponse>
87 TResponse postNoRequest(
const QString &resource)
89 if (!this->sendToNetworkIfAuthenticated())
97 QUrl url(m_addressUrl);
98 url.setPath(resource);
99 QNetworkRequest request(url);
100 request.setRawHeader(
"Authorization",
"Bearer " + m_jwt);
102 const QByteArray receivedData = this->postWithResponse(request);
103 const QJsonDocument doc = QJsonDocument::fromJson(receivedData);
104 const TResponse response = TResponse::fromJson(doc.object());
109 template <
typename TResponse>
110 QVector<TResponse> getAsVector(
const QString &resource)
112 if (!this->sendToNetworkIfAuthenticated())
120 QUrl url(m_addressUrl);
121 url.setPath(resource);
122 QNetworkRequest request(url);
123 request.setRawHeader(
"Authorization",
"Bearer " + m_jwt);
125 const QByteArray receivedData = this->getWithResponse(request);
126 const QJsonDocument jsonDoc = QJsonDocument::fromJson(receivedData);
127 QVector<TResponse> dtos;
128 if (jsonDoc.isArray())
130 const QJsonArray rootArray = jsonDoc.array();
131 for (
const auto &o : rootArray)
133 const QJsonObject d = o.toObject();
134 const TResponse dto = TResponse::fromJson(d);
142 QByteArray getWithResponse(
const QNetworkRequest &request);
145 QByteArray postWithResponse(
const QNetworkRequest &request,
const QByteArray &data = {});
148 void postNoResponse(
const QString &resource,
const QJsonDocument &json);
151 void deleteResource(
const QString &resource);
157 void logReplyErrorMessage(
const QNetworkReply *reply,
const QString &addMsg = {});
160 void logRequestDuration(
const QNetworkReply *reply,
const QString &addMsg = {});
163 QEventLoop *newEventLoop();
166 bool sendToNetworkIfAuthenticated()
const;
169 static bool isShuttingDown();
171 QString m_addressUrl;
175 QUuid m_networkVersion;
177 QDateTime m_expiryLocalUtc;
178 qint64 m_serverToUserOffsetMs;
179 bool m_isAuthenticated =
false;
const QString & getPassword() const
User data.
static const QStringList & getLogCategories()
Categories.
void removeCallsign(const QString &callsign)
Remove callsign from network.
PostCallsignResponseDto addCallsign(const QString &callsign)
Add callsign to network.
const QString & getClient() const
User data.
void forceDisconnect()
Force disconnect from network.
bool isAuthenticated() const
User authenticated?
ServerError
Server errors.
const QString & getUserName() const
User data.
QVector< StationDto > getAllAliasedStations()
All aliased stations.
void connectTo(const QString &username, const QString &password, const QString &client, const QUuid &networkVersion, ConnectionCallback callback)
Connect to network.
void updateTransceivers(const QString &callsign, const QVector< TransceiverDto > &transceivers)
Update transceivers.
const QString & getUrl() const
Get the URL.
const QUuid & getNetworkVersion() const
User data.
bool setUrl(const QString &url)
Set the URL.
CApiServerConnection(const QString &address, QObject *parent=nullptr)
Constructor.
Callable wrapper for a member function with function signature F.