-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcls_network_manager.cpp
More file actions
76 lines (61 loc) · 2.04 KB
/
cls_network_manager.cpp
File metadata and controls
76 lines (61 loc) · 2.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <QJsonArray>
#include <QNetworkReply>
#include <cl_frontend.h>
extern "C"
{
#include <cl_common.h>
#include <cl_json.h>
}
#include "cls_network_manager.h"
ClsNetworkManager::ClsNetworkManager()
{
qRegisterMetaType<cls_net_cb>();
connect(this, SIGNAL(finished(QNetworkReply*)),
this, SLOT(onFinished(QNetworkReply*)));
connect(this, SIGNAL(request(QString,QString,cls_net_cb)),
this, SLOT(onRequest(QString,QString,cls_net_cb)));
}
void ClsNetworkManager::onFinished(QNetworkReply *reply)
{
cls_net_cb cb = m_Requests.at(reply);
cl_network_response_t response;
response.error_code = reply->error();
QByteArray response_array = reply->readAll();
response.data = response_array.data();
bool success;
if (cl_json_get(&success, response.data, CL_JSON_KEY_SUCCESS, CL_JSON_TYPE_BOOLEAN, sizeof(bool)))
{
if (!success)
{
char reason[2048];
if (cl_json_get(reason, response.data, CL_JSON_KEY_REASON, CL_JSON_TYPE_STRING, sizeof(reason)))
cl_fe_display_message(CL_MSG_ERROR, reason);
else
cl_fe_display_message(CL_MSG_ERROR, "Request failed with no given reason.");
}
}
else
cl_fe_display_message(CL_MSG_ERROR, reply->errorString().toStdString().c_str());
if (cb.function)
cb.function(response, cb.userdata);
m_Requests.erase(reply);
}
void ClsNetworkManager::onRequest(QString url, QString data, cls_net_cb callback)
{
QUrl url_data = QUrl(url);
if (!url_data.isValid())
return;
QNetworkRequest request;
request.setHeader(QNetworkRequest::ContentTypeHeader,
QStringLiteral("application/x-www-form-urlencoded"));
#ifdef GIT_VERSION
request.setRawHeader("User-Agent", QStringLiteral("classicslive-standalone %1").arg(GIT_VERSION).toUtf8());
#else
request.setRawHeader("User-Agent", "classicslive-standalone");
#endif
request.setUrl(QUrl(url));
QByteArray post_data;
post_data.append(data);
QNetworkReply *reply = post(request, post_data);
m_Requests.insert(std::pair<QNetworkReply*, cls_net_cb>(reply, callback));
}