91 lines
2.6 KiB
C++
91 lines
2.6 KiB
C++
#include "DataCollection.h"
|
|
#include "BoostLog.h"
|
|
#include <QFile>
|
|
#include <QNetworkAccessManager>
|
|
#include <QNetworkReply>
|
|
#include <QTimer>
|
|
#include <boost/json/object.hpp>
|
|
#include <boost/json/parse.hpp>
|
|
#include <boost/json/serialize.hpp>
|
|
|
|
DataCollection::DataCollection(QObject *parent) : QObject{parent} {
|
|
m_manager = new QNetworkAccessManager(this);
|
|
}
|
|
|
|
void DataCollection::start(const QString &address) {
|
|
m_address = address;
|
|
m_enabled = true;
|
|
emit enabledChanged();
|
|
start();
|
|
}
|
|
|
|
void DataCollection::stop() {
|
|
m_enabled = false;
|
|
emit enabledChanged();
|
|
}
|
|
|
|
QString DataCollection::path() const {
|
|
return m_path;
|
|
}
|
|
|
|
void DataCollection::setPath(const QString &path) {
|
|
// file:///E:/Downloads/logs
|
|
auto p = path;
|
|
if (p.startsWith("file:///")) {
|
|
p.remove(0, 8);
|
|
}
|
|
if (m_path != p) {
|
|
m_path = p;
|
|
emit pathChanged();
|
|
LOG(info) << "set data path: " << m_path.toStdWString();
|
|
}
|
|
}
|
|
|
|
bool DataCollection::enabled() const {
|
|
return m_enabled;
|
|
}
|
|
|
|
void DataCollection::start() {
|
|
auto url = QString("http://%1:8080/capture.do").arg(m_address);
|
|
QNetworkRequest request;
|
|
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
|
request.setUrl(url);
|
|
|
|
boost::json::object data;
|
|
data["devid"] = 1;
|
|
auto content = boost::json::serialize(data);
|
|
QNetworkReply *reply = m_manager->post(request, QString::fromStdString(content).toLocal8Bit());
|
|
connect(reply, &QNetworkReply::finished, this, &DataCollection::onCaptureFinished);
|
|
}
|
|
|
|
void DataCollection::onCaptureFinished() {
|
|
auto reply = dynamic_cast<QNetworkReply *>(sender());
|
|
reply->deleteLater();
|
|
|
|
auto text = reply->readAll().toStdString();
|
|
|
|
auto replyVale = boost::json::parse(text);
|
|
auto root = replyVale.as_object();
|
|
|
|
m_filename = QString::fromStdString(std::string(root.at("path").as_string()));
|
|
auto url = QString("http://%1:8080/%2").arg(m_address, m_filename);
|
|
QNetworkRequest request;
|
|
request.setUrl(url);
|
|
QNetworkReply *dataReply = m_manager->get(request);
|
|
connect(dataReply, &QNetworkReply::finished, this, &DataCollection::onDataGetFinished);
|
|
}
|
|
|
|
void DataCollection::onDataGetFinished() {
|
|
auto reply = dynamic_cast<QNetworkReply *>(sender());
|
|
auto data = reply->readAll();
|
|
LOG(info) << "error: " << reply->error() << ", capture data size: " << data.size();
|
|
|
|
QFile file(m_path + "/" + m_filename);
|
|
file.open(QIODevice::WriteOnly);
|
|
file.write(data);
|
|
file.close();
|
|
if (m_enabled) {
|
|
QTimer::singleShot(0, this, [this]() { start(); });
|
|
}
|
|
}
|