Попытка оптимизации

This commit is contained in:
2026-02-24 10:10:59 +03:00
parent a3651496b7
commit eb95db696a
2 changed files with 258 additions and 244 deletions

View File

@@ -5,10 +5,11 @@ RecognizeSystem::RecognizeSystem(QObject *parent):
QObject(parent),
versionContainer(nullptr),
dataParser(nullptr),
postProcessorSystem(nullptr)
postProcessorSystem(nullptr),
client(nullptr)
{
packetType = PacketType::TYPE_NONE;
filePath.clear();
filePath = "";
fileSize = 0;
sizeReceiveData = 0;
tmpBlock.clear();
@@ -18,68 +19,75 @@ RecognizeSystem::RecognizeSystem(QObject *parent):
void RecognizeSystem::initialize(DataParser *dataParser, VersionContainer *versionContainer,PostProcessorSystem *postProcessorSystem,Client *client)
{
this->versionContainer = versionContainer;
this->postProcessorSystem = postProcessorSystem;
this->dataParser = dataParser;
this->postProcessorSystem = postProcessorSystem;
this->client = client;
}
const int BLOCK_SIZE = 1024 * 1024; // Размер блока
void RecognizeSystem::recognize(QTcpSocket *socket)
{
qDebug() << "RecognizeThreadId " << QThread::currentThreadId();
//qDebug() << "RecognizeThreadId " << QThread::currentThreadId();
QDataStream stream(socket);
stream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
while(socket->bytesAvailable())
{
if (socket->state() != QTcpSocket::ConnectedState)
{
qDebug() << "RecognizeSystem::recognize socket->state() != QTcpSocket::ConnectedState";
return;
}
if (socket->state() != QTcpSocket::ConnectedState) return;
if(packetType == PacketType::TYPE_NONE){ //определение первичного пакета
/*
if(!socket->waitForReadyRead(TCP_READ_TIMEOUT))
{
continue;
}
*/
switch ((int)packetType)
{
case PacketType::TYPE_NONE: //определение первичного пакета
{
stream.startTransaction();
stream >> packetType;
if(!stream.commitTransaction())
{
emit sigSendDebugLog(Tools::getTime() + " CLIENT: packetType - FAIL commitTransaction");
if(socket->waitForReadyRead(TCP_READ_TIMEOUT)){
emit sigSendDebugLog("ERROR: PACKET TYPE READ TIMEOUT");
return;
socket->waitForReadyRead(TCP_READ_TIMEOUT);
continue;
}
//qDebug() << Tools::GetTime() << "CLIENT: type: " << packetType;
}
continue;
}
//qDebug() << Tools::GetTime() << "CLIENT: type: " << packetType;
}
if(packetType == PacketType::TYPE_FOLDER){ //создание папок
case PacketType::TYPE_FOLDER: //создание папок
{
stream.startTransaction();
stream >> filePath;
if(!stream.commitTransaction()){
if(!stream.commitTransaction())
{
continue;
}
filePath = Tools::createReceiveFullPath(filePath,versionContainer->getServerVersionData());
QDir dir(filePath);
if(!dir.exists()){
if(dir.mkpath(filePath)){
qDebug() << "Dir Created";
if(!dir.exists())
{
if(dir.mkpath(filePath))
{
qDebug() << "Dir Created: " << filePath;
}
}
packetType = PacketType::TYPE_NONE;
emit sigUpdateBytesAvailable();
continue;
}
break;
if(packetType == PacketType::TYPE_FILE) //загрузка файлов
case PacketType::TYPE_FILE: //загрузка файлов
{
//ПОЛУЧЕНИЕ ПУТИ
//ПОЛУЧЕНИЕ РАЗМЕРА ФАЙЛА
@@ -89,15 +97,10 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
stream >> filePath;
stream >> fileSize;
if(!stream.commitTransaction()){
if(!stream.commitTransaction())
{
emit sigSendDebugLog(Tools::getTime() + "CLIENT: filePath, fileSize - FAIL commitTransaction");
if (!socket->waitForReadyRead(TCP_READ_TIMEOUT)) {
emit sigSendDebugLog(Tools::getTime() + "CLIENT: ERROR! readyRead timeout - filePath, fileSize!!!");
return;
}
continue;
}
filePath = Tools::createReceiveFullPath(filePath,versionContainer->getServerVersionData());
@@ -105,11 +108,10 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
emit sigSendDebugLog("CLIENT: filesize: " + QString::number(fileSize));
emit sigSendDebugLog("CLIENT: filePath: " + filePath);
socket->waitForReadyRead(100);
//socket->waitForReadyRead(100);
break;
}
//ПОЛУЧЕНИЕ САМОГО ФАЙЛА
emit sigSendDebugLog(Tools::getTime() + "AfterRead size and path BytesAvailable: " + socket->bytesAvailable());
@@ -120,7 +122,8 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
{
file.remove(); //удаление файла, если он уже есть, но необходимо обновить
emit sigSendDebugLog(Tools::getTime() + "Delete exist file: " + filePath);
socket->waitForReadyRead(100);
//socket->waitForReadyRead(100);
}
tmpBlock.clear();
@@ -130,22 +133,18 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
file.open(QFile::WriteOnly);
if(! file.isOpen())
{
int marker = 0;
QMessageBox::critical(nullptr, "P31", "POINT 31");
}
QMessageBox::critical(nullptr, "P1", "isOpen false. File: " + file.fileName());
if(! file.isWritable())
{
int marker = 0;
QMessageBox::critical(nullptr, "P32", "POINT 32");
}
QMessageBox::critical(nullptr, "P2", "isWritable false. File: " + file.fileName());
while(true)
{
socket->waitForReadyRead(10);
if(socket->bytesAvailable() <= 0)
{
socket->waitForReadyRead(TCP_READ_TIMEOUT);
continue;
}
if(fileSize - sizeReceiveData >= BLOCK_SIZE)
tmpBlock = socket->read(BLOCK_SIZE);
@@ -155,7 +154,10 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
qint64 bytesReceived = tmpBlock.length();
if(bytesReceived <= 0)
{
QMessageBox::critical(nullptr, "P3", "bytesReceived <= 0. File: " + file.fileName());
continue;
}
sizeReceiveData += bytesReceived;
countSend++;
@@ -165,8 +167,8 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
if(toFile <= 0)
{
//emit sigUpdateBytesAvailable();
QMessageBox::critical(nullptr, "P2", "POINT 33");
break;
QMessageBox::critical(nullptr, "P4", "write toFile <= 0. File: " + file.fileName());
continue;
}
tmpBlock.clear();
@@ -181,8 +183,7 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
}
else if(sizeReceiveData > fileSize)
{
int marker = 0;
QMessageBox::critical(nullptr, "P40", "POINT 34");
QMessageBox::critical(nullptr, "P5", "sizeReceiveData > fileSize");
}
}
@@ -197,13 +198,15 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
sizeReceiveData = 0;
countSend = 0;
}
break;
if(packetType == PacketType::TYPE_DELETE) //удаление лишних файлов (рекурсивно удаляет все содежимое)
case PacketType::TYPE_DELETE: //удаление лишних файлов (рекурсивно удаляет все содежимое)
{
stream.startTransaction();
stream >> filePath;
if(!stream.commitTransaction()){
if(!stream.commitTransaction())
{
continue;
}
@@ -211,7 +214,6 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
QFileInfo fileInfo(filePath);
if(fileInfo.exists())
{
if(fileInfo.isFile())
@@ -220,22 +222,19 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
file.remove();
}
if(fileInfo.isDir()){
if(fileInfo.isDir())
{
QDir dir(filePath);
dir.removeRecursively();
}
qDebug() << Tools::getTime() << "Deleted: " << filePath;
}
packetType = PacketType::TYPE_NONE;
continue;
}
break;
if(packetType == PacketType::TYPE_NEEDUPDATE)
{ //нужно обновление
case PacketType::TYPE_NEEDUPDATE: //нужно обновление
{
bool flag = false;
quint64 size = 0;
quint64 fileCount = 0;
@@ -247,62 +246,73 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
stream >> fileCount;
stream >> fileDelete;
if(!stream.commitTransaction()){
if(!stream.commitTransaction())
{
continue;
}
emit sigNeedUpdate(flag,size,fileCount,fileDelete);
packetType = PacketType::TYPE_NONE;
}
break;
if(packetType == PacketType::TYPE_XMLANSWER){ //ответы формата XML
case PacketType::TYPE_XMLANSWER: //ответы формата XML
{
QByteArray array;
stream.startTransaction();
stream >> array;
if(!stream.commitTransaction()){
if(!stream.commitTransaction())
{
continue;
}
dataParser->xmlParser(array);
packetType = PacketType::TYPE_NONE;
}
break;
if(packetType == PacketType::HASH_READY)
case PacketType::HASH_READY:
{
emit sigCheckUpdate();
}
break;
if(packetType == PacketType::RECALCULATE_HASH)
case PacketType::RECALCULATE_HASH:
{
emit sigdRecalculateHashOnServerState();
}
break;
if(packetType == PacketType::BUSY)
case PacketType::BUSY:
{
emit sigAnimationActivated(true);
}
break;
if(packetType == PacketType::FREE)
case PacketType::FREE:
{
emit sigAnimationActivated(false);
}
break;
if (packetType == PacketType::TYPE_XMLANSWER_DOCS_CHANGED) //на случай общего обновления
case PacketType::TYPE_XMLANSWER_DOCS_CHANGED: //на случай общего обновления
{
if (client->getIsLoggedIn())
{
emit sigSendPacketType(PacketType::GET_DOCS);
}
}
break;
if (packetType == PacketType::UPDATE_FILE_COMPLETE)
case PacketType::UPDATE_FILE_COMPLETE:
{
postProcessorSystem->calculateCommonHash();
emit sigLoadComplete();
emit sigSendPacketType(PacketType::GET_DOCS);
packetType = PacketType::TYPE_NONE;
}
break;
default:
qCritical() << "RecognizeSystem::recognize packetType unknown!";
}
packetType = PacketType::TYPE_NONE;

View File

@@ -14,6 +14,8 @@
#include <Data\streamingversiondata.h>
#include <Core\hashcomparer.h>
const int BLOCK_SIZE = 1024 * 1024; // Размер блока
class RecognizeSystem : public QObject
{
Q_OBJECT
@@ -21,8 +23,10 @@ class RecognizeSystem : public QObject
public:
explicit RecognizeSystem(QObject *parent = 0);
~RecognizeSystem(){};
void initialize(DataParser *dataParser, VersionContainer* versionContainer,PostProcessorSystem *postProcessorSystem,Client *client);
void recognize(QTcpSocket *socket);
signals:
void sigUpdateBytesAvailable();
void sigLoadComplete();
@@ -40,13 +44,13 @@ private:
VersionContainer *versionContainer;
DataParser *dataParser;
PostProcessorSystem *postProcessorSystem;
PacketType packetType;
QString filePath;
QByteArray tmpBlock;
Client *client;
qint64 sizeReceiveData;
PacketType packetType;
QString filePath;
qint64 fileSize;
qint64 sizeReceiveData;
QByteArray tmpBlock;
int countSend;
};