feat: send xml answer

This commit is contained in:
semenov
2024-08-15 15:30:22 +03:00
parent f7ebfcca5f
commit 6878eb0697
41 changed files with 1499 additions and 876 deletions

View File

@@ -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

View File

@@ -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()
{
}

View File

@@ -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

View File

@@ -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"){

View File

@@ -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

View File

@@ -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();
}
}

View File

@@ -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

View File

@@ -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()
{
}

View File

@@ -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();

View File

@@ -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 {