From c254900cb80b64fe3fd5cd410c5bdbb1a8b663cb Mon Sep 17 00:00:00 2001 From: semenov Date: Fri, 27 Jun 2025 12:42:29 +0300 Subject: [PATCH] bugfix: sent packetType --- ServerLMS/Data/PacketType.h | 1 + ServerLMS/Systems/processingsystem.cpp | 4 +- ServerLMS/Systems/recognizesystem.cpp | 55 +++++++++++++++++++- ServerLMS/Systems/sendsystem.cpp | 69 +++++++++++++++----------- 4 files changed, 95 insertions(+), 34 deletions(-) diff --git a/ServerLMS/Data/PacketType.h b/ServerLMS/Data/PacketType.h index 3b1929d..1296b5a 100644 --- a/ServerLMS/Data/PacketType.h +++ b/ServerLMS/Data/PacketType.h @@ -17,6 +17,7 @@ enum PacketType TYPE_UPDATE = 12, TYPE_CHECK_VERSION = 13, TYPE_FILESIZE = 20, + TYPE_BIGXML = 21, TYPE_XMLANSWER_MESSAGE_FOR_GUI = 90, diff --git a/ServerLMS/Systems/processingsystem.cpp b/ServerLMS/Systems/processingsystem.cpp index 5ec5a4d..72998da 100644 --- a/ServerLMS/Systems/processingsystem.cpp +++ b/ServerLMS/Systems/processingsystem.cpp @@ -475,12 +475,12 @@ void ProcessingSystem::sendTaskListToUnity(ClientHandler *client) //AMM QList listTasksAMM = providerDBLMS->GetListTasksAMMofTrainee(id_trainee); QByteArray arrayAnswerTasksAMM = dataParser->DbAnswer()->listTasksAMMofTrainee(true, &listTasksAMM, id_trainee); - client->sendXmlAnswer(arrayAnswerTasksAMM, PacketType::TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_TRAINEE); + client->sendFileBlockByteArray(arrayAnswerTasksAMM, PacketType::TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_TRAINEE); //FIM QList listTasksFIM = providerDBLMS->GetListTasksFIMofTrainee(id_trainee); QByteArray arrayAnswerFIM = dataParser->DbAnswer()->listTasksFIMofTrainee(true, &listTasksFIM, id_trainee); - client->sendXmlAnswer(arrayAnswerFIM, PacketType::TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_TRAINEE); + client->sendFileBlockByteArray(arrayAnswerFIM, PacketType::TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_TRAINEE); } } diff --git a/ServerLMS/Systems/recognizesystem.cpp b/ServerLMS/Systems/recognizesystem.cpp index 9556042..f77b1df 100644 --- a/ServerLMS/Systems/recognizesystem.cpp +++ b/ServerLMS/Systems/recognizesystem.cpp @@ -74,8 +74,6 @@ void RecognizeSystem::recognize() packetType = static_cast(numPackage); socket->peek(read,4); - //data = socket->readAll(); - if(!stream.commitTransaction()) continue; continue; } @@ -135,6 +133,59 @@ void RecognizeSystem::recognize() continue; } + if(packetType == PacketType::TYPE_BIGXML) + { + if (clientHandler->getClient()->getIsUnity()) + { + char *readBuffer = new char[4]; + socket->read(readBuffer,4); + fileSize = *((int*)readBuffer); + + stream.commitTransaction(); + //if(!) continue; + //ПОЛУЧЕНИЕ САМОГО ФАЙЛА + qDebug() << (Tools::getTime() + "AfterRead size and path BytesAvailable: " + socket->bytesAvailable()); + + qint64 readSize = 65535; + forever + { + + if(fileSize < readSize) + { + readSize = fileSize; + qDebug() << "LastPackage: " << readSize; + } + + socket->waitForReadyRead(20); + tmpBlock = socket->read(readSize); + + data.append(tmpBlock); + + fileSize -= readSize; + sizeReceiveData += readSize; + countSend++; + + tmpBlock.clear(); + + if(fileSize == 0) break; + } + + qDebug() << (Tools::getTime() + "File loaded"); + + //ОЧИСТКА ПОСЛЕ ПЕРЕДАЧИ + fileSize = 0; + tmpBlock.clear(); + sizeReceiveData = 0; + countSend = 0; + + emit sigXmlParser(clientHandler,data); + + packetType = PacketType::TYPE_NONE; + continue; + + } + } + if(packetType == PacketType::TYPE_FOLDER) //создание папок { if(client->getIsUnity()) diff --git a/ServerLMS/Systems/sendsystem.cpp b/ServerLMS/Systems/sendsystem.cpp index f0bebec..0dbbb5c 100644 --- a/ServerLMS/Systems/sendsystem.cpp +++ b/ServerLMS/Systems/sendsystem.cpp @@ -92,21 +92,33 @@ void SendSystem::sendFileBlockByteArray(QByteArray array, PacketType packetType) { qDebug() << "sendFileBlockByteArray thread: " << QThread::currentThreadId(); - QDataStream stream(socket); - stream.setVersion(QDataStream::Qt_DefaultCompiledVersion); + if(!client->getIsUnity()) + { + QDataStream stream(socket); + stream.setVersion(QDataStream::Qt_DefaultCompiledVersion); - fileSize = array.size(); + fileSize = array.size(); - if(fileSize == 0){ - emit sigSendToLogger(Tools::getTime() + " WARNING! Zero size "); - return; - } + if(fileSize == 0){ + emit sigSendToLogger(Tools::getTime() + " WARNING! Zero size "); + return; + } - stream << packetType; //Отправляем тип блока + stream << packetType; //Отправляем тип блока + stream << fileSize; + stream << array; + } + else + { + sendPacketType(packetType); + QByteArray message; + int size = array.length(); + message.append(reinterpret_cast(&size), sizeof(int)); + socket->write(message); + socket->write(array); + } - stream << fileSize; - stream << array; } void SendSystem::sendVersion() @@ -187,10 +199,21 @@ void SendSystem::sendDeleteBlock(QString path) void SendSystem::sendPacketType(PacketType packetType) { - QDataStream stream(socket); - stream.setVersion(QDataStream::Qt_DefaultCompiledVersion); - stream << packetType; - socket->waitForReadyRead(100); + if(!client->getIsUnity()) + { + + QDataStream stream(socket); + stream.setVersion(QDataStream::Qt_DefaultCompiledVersion); + stream << packetType; + socket->waitForReadyRead(100); + } + else + { + QByteArray message; + int type = (int)packetType; + message.append(reinterpret_cast(&type), sizeof(int)); + socket->write(message); + } } void SendSystem::sendHello() @@ -219,26 +242,12 @@ void SendSystem::sendXmlAnswer(QByteArray array, PacketType packetType) } else { - //QByteArray buffer(512,0); + sendPacketType(packetType); QByteArray message; - message.append("size="); int size = array.length(); message.append(reinterpret_cast(&size), sizeof(int)); - - qDebug() << "Message size " << message.length(); - qDebug() << array.length(); socket->write(message); - - if(array.length() <= 512) - { -// QByteArray buffer2(512,0); -// memcpy(buffer2.data(),array.data(),array.length()); - socket->write(array); - } - else - { - socket->write(array); - } + socket->write(array); } }