151 lines
4.4 KiB
C++
151 lines
4.4 KiB
C++
#include "httpInterface.h"
|
|
#include <QDebug>
|
|
#include <QFile>
|
|
#include <QXmlStreamReader>
|
|
#include <QMessageBox>
|
|
#include <QJsonObject>
|
|
#include <QJsonDocument>
|
|
#include <QNetworkRequest>
|
|
#include <QNetworkAccessManager>
|
|
#include <QNetworkReply>
|
|
#include <QJsonArray>
|
|
|
|
//HttpInterface* HttpInterface::instance = nullptr;
|
|
|
|
HttpInterface::HttpInterface(QObject* parent)
|
|
:QObject(parent)
|
|
{
|
|
m_sFileName = QString("setting.xml");
|
|
_manager = new QNetworkAccessManager(this);
|
|
initial();
|
|
}
|
|
|
|
HttpInterface::~HttpInterface()
|
|
{
|
|
if(_manager)
|
|
_manager->deleteLater();
|
|
}
|
|
|
|
void HttpInterface::initial()
|
|
{
|
|
readXML();
|
|
connect(_manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)));
|
|
}
|
|
|
|
void HttpInterface::readXML()
|
|
{
|
|
if (m_sFileName.isEmpty())
|
|
return;
|
|
|
|
QFile *pFile = new QFile(m_sFileName);
|
|
if (!pFile->open(QIODevice::ReadOnly | QFile::Text))
|
|
{
|
|
QMessageBox::information(NULL, QString("title"), QString::fromWCharArray(L"配置文件打开错误"));
|
|
return;
|
|
}
|
|
|
|
QXmlStreamReader* m_pReader = new QXmlStreamReader(pFile);
|
|
while (!m_pReader->atEnd() && !m_pReader->hasError())
|
|
{
|
|
m_pReader->lineNumber();
|
|
QXmlStreamReader::TokenType token = m_pReader->readNext();
|
|
if (token == QXmlStreamReader::StartDocument)
|
|
continue;
|
|
|
|
//qDebug() << m_pReader->name();
|
|
if (m_pReader->isStartElement())
|
|
{
|
|
if(m_pReader->name() == QString("HttpInterface"))
|
|
{
|
|
QXmlStreamAttributes attributes = m_pReader->attributes();
|
|
_Host = attributes.value("Ip").toString();
|
|
_Port = attributes.value("Port").toString();
|
|
}
|
|
else if(m_pReader->name() == QString("GetPointData"))
|
|
{
|
|
_Interface = m_pReader->readElementText();
|
|
}
|
|
}
|
|
m_pReader->readNext();
|
|
}
|
|
if (m_pReader->hasError())
|
|
{
|
|
qDebug() << m_pReader->errorString();
|
|
}
|
|
m_pReader->clear();
|
|
delete m_pReader;
|
|
m_pReader = NULL;
|
|
pFile->close();
|
|
delete pFile;
|
|
pFile = NULL;
|
|
}
|
|
|
|
/*HttpInterface* HttpInterface::GetInstance()
|
|
{
|
|
if(instance == nullptr)
|
|
{
|
|
instance = new HttpInterface();
|
|
}
|
|
return instance;
|
|
}*/
|
|
|
|
void HttpInterface::getPointData(QString type,QString station,QString component,QString begin,QString end)
|
|
{
|
|
QNetworkRequest request;
|
|
QString scheme = "http";
|
|
QString requestHeader = scheme + QString("://") + _Host + QString(":") + _Port + QString("/") + _Interface;
|
|
QString fullRequest;
|
|
if(begin.isEmpty() && end.isEmpty())
|
|
fullRequest = requestHeader + QString("?station=%1&component=%2&point=%3").arg(station,component,type);
|
|
else
|
|
fullRequest = requestHeader + QString("?station=%1&component=%2&point=%3&begin=%4&end=%5").arg(station,component,type,begin,end);
|
|
request.setUrl(QUrl(fullRequest));
|
|
_manager->get(request);
|
|
}
|
|
|
|
void HttpInterface::replyFinished(QNetworkReply *reply)
|
|
{
|
|
QString allinfo = reply->readAll();
|
|
|
|
QJsonParseError err;
|
|
QJsonDocument json_recv = QJsonDocument::fromJson(allinfo.toUtf8(),&err);//解析json对象
|
|
if(!json_recv.isNull())
|
|
{
|
|
QJsonObject object = json_recv.object();
|
|
if(object.contains("data"))
|
|
{
|
|
/*QJsonObject dataObj = object["data"].toObject();
|
|
QString type = dataObj["point"].toString();
|
|
|
|
QJsonArray nodesJsonArray = dataObj["values"].toArray();
|
|
|
|
QMap<qint64,double> map;
|
|
for (QJsonValueRef nodeJson : nodesJsonArray)
|
|
{
|
|
QJsonObject node = nodeJson.toObject();
|
|
QString time = node["time"].toString();
|
|
double value = node["value"].toDouble();
|
|
qint64 tval = time.toLongLong();
|
|
map.insert(tval,value);
|
|
}*/
|
|
QJsonArray nodesJsonArray = object["data"].toArray();
|
|
|
|
QMap<qint64,double> map;
|
|
for (QJsonValueRef nodeJson : nodesJsonArray)
|
|
{
|
|
QJsonObject node = nodeJson.toObject();
|
|
QString time = node["time"].toString();
|
|
double value = node["value"].toDouble();
|
|
qint64 tval = time.toLongLong();
|
|
map.insert(tval,value);
|
|
}
|
|
emit sendPointData("v",map);
|
|
}
|
|
|
|
}else
|
|
{
|
|
qDebug()<<"json_recv is NULL or is not a object !!";
|
|
}
|
|
reply->deleteLater(); //销毁请求对象
|
|
}
|