mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJClient.git
synced 2026-03-28 05:25:39 +03:00
feat: send xml answer
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
#include <QList>
|
||||
#include <QString>
|
||||
|
||||
#ifndef FILEDATA_H
|
||||
@@ -15,6 +16,17 @@ struct FileData
|
||||
|
||||
}; //путь
|
||||
|
||||
struct SAttribute
|
||||
{
|
||||
QString name;
|
||||
QString value;
|
||||
|
||||
};
|
||||
|
||||
struct SXmlAnswerTag{
|
||||
QString elementName;
|
||||
QList<SAttribute> attr;
|
||||
};
|
||||
|
||||
#endif // FILEDATA_H
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#include "UpdateController.h"
|
||||
#include "updatecontroller.h"
|
||||
|
||||
UpdateController::UpdateController(DataParser *parser, QObject *parent) :
|
||||
QObject(parent)
|
||||
@@ -6,8 +6,6 @@ UpdateController::UpdateController(DataParser *parser, QObject *parent) :
|
||||
this->dataParser = parser;
|
||||
localPath = QDir::currentPath() + "/Application";
|
||||
countSend = 0;
|
||||
CalculateHash();
|
||||
|
||||
}
|
||||
|
||||
void UpdateController::SendFile(QDataStream &stream)
|
||||
@@ -37,6 +35,9 @@ void UpdateController::SendFile(QDataStream &stream)
|
||||
|
||||
void UpdateController::CalculateHash()
|
||||
{
|
||||
qDebug() << "Try calculate";
|
||||
|
||||
|
||||
QDirIterator iterator(localPath,QDirIterator::Subdirectories);
|
||||
fileDataList.clear();
|
||||
QList<FileData> *files = new QList<FileData>;
|
||||
@@ -107,6 +108,3 @@ UpdateController::~UpdateController()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#ifndef FILEMANAGER_H
|
||||
#define FILEMANAGER_H
|
||||
#ifndef UPDATECONTROLLER_H
|
||||
#define UPDATECONTROLLER_H
|
||||
|
||||
|
||||
#include "Core\FileData.h"
|
||||
#include "Core\dataparser.h"
|
||||
@@ -27,7 +28,6 @@ public:
|
||||
void CalculateHash();
|
||||
~UpdateController();
|
||||
|
||||
|
||||
private:
|
||||
DataParser *dataParser;
|
||||
QString localPath;
|
||||
@@ -37,4 +37,6 @@ private:
|
||||
|
||||
};
|
||||
|
||||
#endif // FILEMANAGER_H
|
||||
|
||||
|
||||
#endif // UPDATECONTROLLER_H
|
||||
|
||||
@@ -36,6 +36,28 @@ void DataParser::CreateXML(QList<FileData> fileDataList)
|
||||
file.close();
|
||||
}
|
||||
|
||||
void DataParser::CreateAuthMessage(ClientAutorization *auth)
|
||||
{
|
||||
QFile file(tempName);
|
||||
file.open(QIODevice::WriteOnly);
|
||||
QXmlStreamWriter xmlWriter(&file);
|
||||
|
||||
xmlWriter.setAutoFormatting(true);
|
||||
xmlWriter.writeStartDocument();
|
||||
xmlWriter.writeStartElement("ClientAutorization");
|
||||
|
||||
xmlWriter.writeAttribute("Login",auth->Login);
|
||||
xmlWriter.writeAttribute("Password",auth->Password);
|
||||
|
||||
xmlWriter.writeEndElement();
|
||||
xmlWriter.writeEndElement();
|
||||
xmlWriter.writeEndDocument();
|
||||
|
||||
file.close();
|
||||
}
|
||||
|
||||
|
||||
|
||||
void DataParser::CreateServerSettings(QString address, QString port)
|
||||
{
|
||||
QFile file(settingsName);
|
||||
@@ -80,6 +102,10 @@ ServerSettings *DataParser::GetServerSettings()
|
||||
|
||||
if(name == "Address"){
|
||||
settings->Address = value;
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
if(name == "Port"){
|
||||
|
||||
@@ -13,9 +13,10 @@ class DataParser
|
||||
public:
|
||||
DataParser();
|
||||
~DataParser();
|
||||
void CreateServerSettings(QString server,QString port);
|
||||
ServerSettings* GetServerSettings();
|
||||
void CreateServerSettings(QString server,QString port);
|
||||
void CreateXML(QList<FileData> fileDataList);
|
||||
void CreateAuthMessage(ClientAutorization *auth);
|
||||
};
|
||||
|
||||
#endif // DATAPARSER_H
|
||||
|
||||
@@ -17,9 +17,10 @@ RecognizeSystem::~RecognizeSystem()
|
||||
|
||||
}
|
||||
|
||||
void RecognizeSystem::Initialize(UpdateController *updateController)
|
||||
void RecognizeSystem::Initialize(UpdateController *updateController,DataParser *dataParser)
|
||||
{
|
||||
this->updateController = updateController;
|
||||
this->dataParser = dataParser;
|
||||
}
|
||||
|
||||
void RecognizeSystem::SetSocket(QTcpSocket *socket)
|
||||
@@ -34,7 +35,6 @@ void RecognizeSystem::Recognize()
|
||||
|
||||
while(socket->bytesAvailable())
|
||||
{
|
||||
|
||||
if(packetType == PacketType::TYPE_NONE){ //определение первичного пакета
|
||||
|
||||
stream.startTransaction();
|
||||
@@ -148,7 +148,11 @@ void RecognizeSystem::Recognize()
|
||||
stream >> tmpBlock;
|
||||
|
||||
if(!stream.commitTransaction()){
|
||||
//qDebug() << Tools::GetTime() << "CLIENT: tmpBlock - FAIL";
|
||||
|
||||
if(socket->state() == QAbstractSocket::UnconnectedState){
|
||||
emit SockedDisabled();
|
||||
return;
|
||||
}
|
||||
if(socket->waitForReadyRead(TCP_READ_TIMEOUT)){
|
||||
continue;
|
||||
}
|
||||
@@ -157,7 +161,7 @@ void RecognizeSystem::Recognize()
|
||||
}
|
||||
|
||||
quint64 toFile = file.write(tmpBlock);
|
||||
emit onSendDebugLog(Tools::GetTime() + "CLIENT: toFile :" + toFile);
|
||||
emit onSendDebugLog(Tools::GetTime() + "CLIENT: toFile :" + toFile);
|
||||
|
||||
sizeReceiveData += toFile;
|
||||
countSend++;
|
||||
@@ -226,7 +230,7 @@ void RecognizeSystem::Recognize()
|
||||
packetType = PacketType::TYPE_NONE;
|
||||
}
|
||||
|
||||
if(packetType == PacketType::TYPE_NEEDUPDATE){
|
||||
if(packetType == PacketType::TYPE_NEEDUPDATE){ //нужно обновление
|
||||
|
||||
bool flag;
|
||||
|
||||
@@ -237,7 +241,52 @@ void RecognizeSystem::Recognize()
|
||||
emit onNeedUpdate(flag);
|
||||
packetType = PacketType::TYPE_NONE;
|
||||
}
|
||||
|
||||
if(packetType == PacketType::TYPE_XMLANSWER){ //ответы формата XML
|
||||
QByteArray array;
|
||||
stream.startTransaction();
|
||||
stream >> array;
|
||||
|
||||
XMLParser(array);
|
||||
|
||||
packetType = PacketType::TYPE_NONE;
|
||||
}
|
||||
|
||||
packetType = PacketType::TYPE_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
void RecognizeSystem::XMLParser(QByteArray array)
|
||||
{
|
||||
QXmlStreamReader xmlReader(array);
|
||||
|
||||
xmlReader.readNext();
|
||||
|
||||
while(!xmlReader.atEnd())
|
||||
{
|
||||
if(!xmlReader.isStartElement()) {
|
||||
xmlReader.readNext();
|
||||
continue;
|
||||
}
|
||||
|
||||
if(xmlReader.name() == "ServerNotify")
|
||||
{
|
||||
foreach(const QXmlStreamAttribute &attr, xmlReader.attributes())
|
||||
{
|
||||
QString name = attr.name().toString();
|
||||
QString value = attr.value().toString();
|
||||
|
||||
if(name == "Code"){
|
||||
if (value == "END"){
|
||||
|
||||
emit SockedDisabled();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
xmlReader.readNext();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#include <QTcpSocket>
|
||||
#include <mainwindow.h>
|
||||
#include <Core\tools.h>
|
||||
#include <Core\UpdateController.h>
|
||||
#include <Core\updatecontroller.h>
|
||||
|
||||
class UpdateController;
|
||||
|
||||
@@ -18,7 +18,7 @@ class RecognizeSystem : public QObject
|
||||
public:
|
||||
explicit RecognizeSystem(QObject *parent = 0);
|
||||
~RecognizeSystem();
|
||||
void Initialize(UpdateController* updateController);
|
||||
void Initialize(UpdateController* updateController,DataParser *dataParser);
|
||||
void SetSocket(QTcpSocket *socket);
|
||||
void Recognize();
|
||||
|
||||
@@ -27,9 +27,11 @@ signals:
|
||||
void LoadComplete();
|
||||
void onNeedUpdate(bool flag);
|
||||
void onSendDebugLog(QString message);
|
||||
void SockedDisabled();
|
||||
|
||||
private:
|
||||
UpdateController *updateController;
|
||||
DataParser *dataParser;
|
||||
QTcpSocket *socket;
|
||||
PacketType packetType;
|
||||
QString message;
|
||||
@@ -40,6 +42,8 @@ private:
|
||||
qint64 fileSize;
|
||||
int countSend;
|
||||
|
||||
void XMLParser(QByteArray array);
|
||||
|
||||
};
|
||||
|
||||
#endif // RECOGNIZESYSTEM_H
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#include "tcpclient.h"
|
||||
#include "UpdateController.h"
|
||||
#include "Core/updatecontroller.h"
|
||||
#include "externalexecuter.h"
|
||||
|
||||
#include <QDir>
|
||||
@@ -7,9 +7,7 @@
|
||||
TCPClient::TCPClient(QObject *parent) :
|
||||
QObject(parent)
|
||||
{
|
||||
socket = new QTcpSocket(this);
|
||||
|
||||
connect(socket,&QTcpSocket::readyRead,this,&TCPClient::onReadyRead);
|
||||
}
|
||||
|
||||
void TCPClient::Initialize(UpdateController *updateController,
|
||||
@@ -20,22 +18,48 @@ void TCPClient::Initialize(UpdateController *updateController,
|
||||
this->recognizeSystem = recognize;
|
||||
this->externalExecuter = externalExecuter;
|
||||
|
||||
recognize->SetSocket(socket);
|
||||
emit onSendDebugLog(Tools::GetTime() + " Client started");
|
||||
}
|
||||
|
||||
void TCPClient::SetConnect(ServerSettings *serverSettings)
|
||||
{
|
||||
socket = new QTcpSocket(this);
|
||||
|
||||
connect(socket,&QTcpSocket::readyRead,this,&TCPClient::onReadyRead);
|
||||
connect(socket,&QTcpSocket::disconnected,this,&TCPClient::SetDisconnect);
|
||||
|
||||
socket->connectToHost(serverSettings->Address,serverSettings->Port.toShort());
|
||||
emit onSendDebugLog("Try connect...");
|
||||
|
||||
recognizeSystem->SetSocket(socket);
|
||||
socket->waitForReadyRead();
|
||||
|
||||
if(socket->state() != QTcpSocket::ConnectedState){
|
||||
emit onSendDebugLog("Connect invalid");
|
||||
return;
|
||||
}else{
|
||||
emit onSendDebugLog("Connect complete");
|
||||
}
|
||||
}
|
||||
|
||||
void TCPClient::SendClientAutorization()
|
||||
{
|
||||
QDataStream stream(socket);
|
||||
stream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
|
||||
|
||||
QFile file(tempName);
|
||||
file.open(QIODevice::ReadOnly);
|
||||
|
||||
QByteArray array = file.readAll();
|
||||
stream << PacketType::TYPE_XMLANSWER;
|
||||
stream << array;
|
||||
socket->waitForBytesWritten();
|
||||
}
|
||||
|
||||
void TCPClient::SetDisconnect()
|
||||
{
|
||||
socket->disconnect();
|
||||
emit onSendDebugLog("Server disabled");
|
||||
}
|
||||
|
||||
void TCPClient::WaitWrites()
|
||||
@@ -48,12 +72,7 @@ QTcpSocket *TCPClient::GetSocket()
|
||||
return socket;
|
||||
}
|
||||
|
||||
TCPClient::~TCPClient()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void TCPClient::onMessageEntered(QString message)
|
||||
void TCPClient::MessageEntered(QString message)
|
||||
{
|
||||
QDataStream stream(socket);
|
||||
QByteArray data;
|
||||
@@ -94,7 +113,11 @@ void TCPClient::onReadyRead()
|
||||
emit onSendDebugLog("WRONG SOCKET");
|
||||
return;
|
||||
}
|
||||
//возврат на случай недоступного сокета
|
||||
|
||||
recognizeSystem->Recognize();
|
||||
}
|
||||
|
||||
TCPClient::~TCPClient()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
#include <QCoreApplication>
|
||||
#include "Core\recognizesystem.h"
|
||||
#include "Core\tools.h"
|
||||
#include "Core\UpdateController.h"
|
||||
#include "Core\updatecontroller.h"
|
||||
#include "Core\externalexecuter.h"
|
||||
|
||||
class UpdateController;
|
||||
@@ -23,6 +23,8 @@ public:
|
||||
explicit TCPClient(QObject *parent = 0);
|
||||
void Initialize(UpdateController *updateController,RecognizeSystem *recognize,ExternalExecuter *externalExecuter);
|
||||
void SetConnect(ServerSettings *serverSettings);
|
||||
void SendClientAutorization();
|
||||
void SetDisconnect();
|
||||
void WaitWrites();
|
||||
QTcpSocket* GetSocket();
|
||||
~TCPClient();
|
||||
@@ -31,7 +33,7 @@ signals:
|
||||
void onSendDebugLog(QString message);
|
||||
|
||||
public slots:
|
||||
void onMessageEntered(QString message);
|
||||
void MessageEntered(QString message);
|
||||
|
||||
private slots:
|
||||
void onReadyRead();
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
static QString hashFilename = "hash.xml";
|
||||
static QString settingsName = "settings.xml";
|
||||
static QString tempName = "temp.xml";
|
||||
|
||||
enum PacketType{
|
||||
TYPE_NONE = 0,
|
||||
@@ -18,7 +19,8 @@ enum PacketType{
|
||||
TYPE_FOLDER = 4,
|
||||
TYPE_DELETE = 5,
|
||||
TYPE_FINISH = 6,
|
||||
TYPE_NEEDUPDATE =7
|
||||
TYPE_NEEDUPDATE = 7,
|
||||
TYPE_XMLANSWER = 8
|
||||
};
|
||||
|
||||
class Tools {
|
||||
|
||||
Reference in New Issue
Block a user