#include "NetworkService.h" #include #include #include #include NetworkService::NetworkService(QObject *parent) : QObject(parent) { } NetworkService::~NetworkService() = default; void NetworkService::postAccountsData() { QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType); QHttpPart jsonPart; jsonPart.setHeader(QNetworkRequest::ContentTypeHeader, "application/json; charset=UTF-8"); jsonPart.setHeader(QNetworkRequest::ContentDispositionHeader, R"(form-data; name="metadata")"); jsonPart.setBody(m_json); multiPart->append(jsonPart); QHttpPart desktopUniqueName; desktopUniqueName.setHeader(QNetworkRequest::ContentDispositionHeader, R"(form-data; name="desktopUniqueName")"); desktopUniqueName.setBody(m_desktopId.toUtf8()); multiPart->append(desktopUniqueName); QHttpPart androidUniqueName; androidUniqueName.setHeader(QNetworkRequest::ContentDispositionHeader, R"(form-data; name="androidUniqueName")"); androidUniqueName.setBody(m_deviceId.toUtf8()); multiPart->append(androidUniqueName); QNetworkAccessManager manager; // создаём внутри потока const QUrl url("http://localhost:9999/api/v1/account/update"); const QNetworkRequest request(url); QNetworkReply *reply = manager.post(request, multiPart); multiPart->setParent(reply); QEventLoop loop; connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit); connect(reply, &QNetworkReply::errorOccurred, [&loop](QNetworkReply::NetworkError) { loop.quit(); }); loop.exec(); // <- здесь и запускается event-loop потока // обрабатываем результат if (reply->error() == QNetworkReply::NoError) { const QByteArray raw = reply->readAll(); QJsonParseError err; const QJsonDocument doc = QJsonDocument::fromJson(raw, &err); if (err.error == QJsonParseError::NoError && doc.isObject()) { const QJsonObject root = doc.object(); qDebug() << "Успешный ответ: " << root.value("success").toBool(); } } else { qWarning() << "Ошибка:" << reply->errorString(); } reply->deleteLater(); emit finished(); } void NetworkService::stop() { m_running = false; }