#include "httpInterface.h" #include #include #include #include #include #include #include #include #include #include //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 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 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(); //销毁请求对象 }