DiagramDesigner/common/source/httpInterface.cpp

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(); //销毁请求对象
}