From 71215cf5ec2edd5f487ed5bb579e1be02c7aff0f Mon Sep 17 00:00:00 2001 From: semenov Date: Wed, 23 Jul 2025 12:32:38 +0300 Subject: [PATCH] bugfix: versions * refactoring call update after update from client * refactoring common client deAuth * add packet for notify hash calculate start * bugfix update static data --- DOCS/ProcessingSystem scheme.md | 253 ++++++++++++++++++ DOCS/Алексей/ProcessingSystem scheme.md | 130 --------- .../connectorToServer/Core/FileData.h | 2 +- .../widgets/versionselectwidget.cpp | 4 +- .../widgets/versionselectwidget.h | 4 +- ServerLMS/Data/PacketType.h | 3 +- ServerLMS/Systems/Parsers/dataparser.cpp | 3 - ServerLMS/Systems/assetsmanager.cpp | 3 +- ServerLMS/Systems/processingsystem.cpp | 15 ++ ServerLMS/Systems/processingsystem.h | 1 + ServerLMS/Systems/recognizesystem.cpp | 4 +- ServerLMS/Systems/updatecontroller.cpp | 14 +- ServerLMS/Systems/updatecontroller.h | 1 + ServerLMS/clienthandler.cpp | 7 +- ServerLMS/clienthandler.h | 1 - ServerLMS/multithreadserver.cpp | 2 +- ServerLMS/serverlmswidget.cpp | 18 +- ServerLMS/serverlmswidget.h | 3 - 18 files changed, 297 insertions(+), 171 deletions(-) create mode 100644 DOCS/ProcessingSystem scheme.md delete mode 100644 DOCS/Алексей/ProcessingSystem scheme.md diff --git a/DOCS/ProcessingSystem scheme.md b/DOCS/ProcessingSystem scheme.md new file mode 100644 index 0000000..58e4e8f --- /dev/null +++ b/DOCS/ProcessingSystem scheme.md @@ -0,0 +1,253 @@ +--- + +excalidraw-plugin: parsed +tags: [excalidraw] + +--- +==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠== You can decompress Drawing data with the command palette: 'Decompress current Excalidraw file'. For more info check in plugin settings under 'Saving' + + +# Excalidraw Data + +## Text Elements +ClientServerGUI ^6Nu6FkAI + +Client ^qYxPhLRc + +Unity ^X0KjhPzB + +DB ^w8JAyq9g + +processingClientAutorization ^m0XWBAAZ + +clientHandler ^V9sV6vZu + +providerDB ^tql9O4gb + +dataParser ^I5cKWcDb + +processingClientDeAutorization ^cRGk1reW + +clientHandler ^JtKDGDuT + +providerDB ^XRyhU4Ir + +dataParser ^TJscfbbe + +processingClientDeAutorization ^IovF8Dv8 + +Оправка Task 1 шт от GUI Servera + ^kOhBerWn + +Server ^HcCrxVer + +обновление списка ^HmSmAweu + +Unity ^tw2sz3Vn + +обновление таски ^TSPA5X20 + +включает ID trainee ^SVZNOxeV + +task id ^GiPYHwKk + +статус ^PUDc6fOX + +статус ^vXe4Siw0 + +task id ^86esGExG + +Оправка Task 1 шт от GUI Servera + ^1VZ3qEMk + +Server ^PsK8FOfY + +обновление таски или СПИСКА ^Y7aizM4k + +обновление таски ИЛИ СПИСКА ^m07dCG6s + +Unity ^8zVkCEDq + +включает ID trainee ^U3bdXf1o + +статус ^AaXB7vu3 + +task id ^8XfnxTl0 + +включает ID trainee ^A8ODKH6T + +статус + ^FFbqjIWD + +task id ^iSKRtg5R + +атрибут ^KkXsbV5Q + +атрибут ^smbL8wa9 + +TASKS ^VF7A5CRC + +%% +## Drawing +```compressed-json +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 +``` +%% \ No newline at end of file diff --git a/DOCS/Алексей/ProcessingSystem scheme.md b/DOCS/Алексей/ProcessingSystem scheme.md deleted file mode 100644 index f73639a..0000000 --- a/DOCS/Алексей/ProcessingSystem scheme.md +++ /dev/null @@ -1,130 +0,0 @@ ---- - -excalidraw-plugin: parsed -tags: [excalidraw] - ---- -==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠== You can decompress Drawing data with the command palette: 'Decompress current Excalidraw file'. For more info check in plugin settings under 'Saving' - - -# Excalidraw Data - -## Text Elements -ClientServerGUI ^6Nu6FkAI - -Client ^qYxPhLRc - -Unity ^X0KjhPzB - -DB ^w8JAyq9g - -processingClientAutorization ^m0XWBAAZ - -clientHandler ^V9sV6vZu - -providerDB ^tql9O4gb - -dataParser ^I5cKWcDb - -processingClientDeAutorization ^cRGk1reW - -clientHandler ^JtKDGDuT - -providerDB ^XRyhU4Ir - -dataParser ^TJscfbbe - -processingClientDeAutorization ^IovF8Dv8 - -gHBDT ^tGwlEMh4 - -%% -## Drawing -```compressed-json -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 -``` -%% \ No newline at end of file diff --git a/InstructorsAndTrainees/connectorToServer/Core/FileData.h b/InstructorsAndTrainees/connectorToServer/Core/FileData.h index e586069..a12244d 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/FileData.h +++ b/InstructorsAndTrainees/connectorToServer/Core/FileData.h @@ -10,7 +10,7 @@ struct FileData QString hash; bool operator==(const FileData& other)const{ - if(this->path==(other.path)) return true; + if(this->path==(other.path) && this->hash == other.hash) return true; return false; } diff --git a/InstructorsAndTrainees/widgets/versionselectwidget.cpp b/InstructorsAndTrainees/widgets/versionselectwidget.cpp index a1e0920..c36974d 100644 --- a/InstructorsAndTrainees/widgets/versionselectwidget.cpp +++ b/InstructorsAndTrainees/widgets/versionselectwidget.cpp @@ -51,7 +51,7 @@ void VersionSelectWidget::fillView(QList *serverData) } } -void VersionSelectWidget::on_verListView_itemDoubleClicked(QListWidgetItem *item) +void VersionSelectWidget::on_verListView_itemClicked(QListWidgetItem *item) { foreach(StreamingVersionData *data,*serverDataList) { @@ -170,3 +170,5 @@ VersionSelectWidget::~VersionSelectWidget() delete ui; } + + diff --git a/InstructorsAndTrainees/widgets/versionselectwidget.h b/InstructorsAndTrainees/widgets/versionselectwidget.h index 123bc4f..4d61106 100644 --- a/InstructorsAndTrainees/widgets/versionselectwidget.h +++ b/InstructorsAndTrainees/widgets/versionselectwidget.h @@ -34,11 +34,10 @@ public: void resizeEvent(QResizeEvent *event) override; private slots: - void on_verListView_itemDoubleClicked(QListWidgetItem *item); void on_createDuplicateButton_clicked(); void on_DeleteVersionButton_clicked(); void on_switchServerVersionButton_clicked(); - + void on_verListView_itemClicked(QListWidgetItem *item); void slot_activateLoadAnimation(bool flag); signals: @@ -48,6 +47,7 @@ signals: void sigSendNotify(QString message); private: + Ui::VersionSelectWidget *ui; SendSystem *sendSystem; QList *serverDataList; diff --git a/ServerLMS/Data/PacketType.h b/ServerLMS/Data/PacketType.h index 1296b5a..b141ff0 100644 --- a/ServerLMS/Data/PacketType.h +++ b/ServerLMS/Data/PacketType.h @@ -41,7 +41,8 @@ enum PacketType COPY_VERSION = 152, DELETE_DATA_VERSION = 153, BUSY = 154, - FREE = 155 + FREE = 155, + HASH_CALCULATE_START = 156 }; diff --git a/ServerLMS/Systems/Parsers/dataparser.cpp b/ServerLMS/Systems/Parsers/dataparser.cpp index e8dbbfb..b65eec1 100644 --- a/ServerLMS/Systems/Parsers/dataparser.cpp +++ b/ServerLMS/Systems/Parsers/dataparser.cpp @@ -20,9 +20,6 @@ QObject(parent) mutex = new QMutex; - if (!QDir(staticDataFolderName).exists()){ - QDir().mkdir(staticDataFolderName); - } qDebug() << "ParserThread: " << QThread::currentThreadId(); } diff --git a/ServerLMS/Systems/assetsmanager.cpp b/ServerLMS/Systems/assetsmanager.cpp index 7e39bd0..ef7ade2 100644 --- a/ServerLMS/Systems/assetsmanager.cpp +++ b/ServerLMS/Systems/assetsmanager.cpp @@ -78,6 +78,7 @@ void AssetsManager::fillDatas() } } } + void AssetsManager::setVersionList(QList *streamingVersion) { datas->clear(); @@ -327,7 +328,7 @@ void AssetsManager::writeVersionsToFile(QList version,boo file.close(); } -void AssetsManager::createFirstVersionListXML(QList version) //TODO: переименовать и перебросить в AssetManager +void AssetsManager::createFirstVersionListXML(QList version) { QFile file(versionListFile); QList *temp = new QList(); diff --git a/ServerLMS/Systems/processingsystem.cpp b/ServerLMS/Systems/processingsystem.cpp index d0003f2..7d1e06c 100644 --- a/ServerLMS/Systems/processingsystem.cpp +++ b/ServerLMS/Systems/processingsystem.cpp @@ -142,6 +142,21 @@ void ProcessingSystem::processingClientDeAutorization(ClientHandler *client, Cli emit sigListsInstructorsTraineesChanged(); } +//упращенная деавторизация при выключении сервера +void ProcessingSystem::processingClientDeAutorization(QString login) +{ + //Отмена авторизации в БД + + if(providerDBLMS->deAuthorizationTrainee(login)) + {//Деавторизовался обучаемый + + } + else if(providerDBLMS->deAuthorizationInstructor(login)) + {//Деавторизовался инструктор + + } +} + void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQueryToDB clientQueryToDB, int id, void* data) { qDebug() << "ProcessingQueryThread " << QThread::currentThreadId(); diff --git a/ServerLMS/Systems/processingsystem.h b/ServerLMS/Systems/processingsystem.h index a09ecdd..7cc8996 100644 --- a/ServerLMS/Systems/processingsystem.h +++ b/ServerLMS/Systems/processingsystem.h @@ -43,6 +43,7 @@ public: void sendListTasksAMMofTraineetoClient(ClientHandler* client, int id_trainee); void sendListTasksFIMofTraineetoClient(ClientHandler* client, int id_trainee); ClientHandler* getUnityClientById(int id); + void processingClientDeAutorization(QString login); signals: void sigUpdateListClients(); void sigListsInstructorsTraineesChanged(); diff --git a/ServerLMS/Systems/recognizesystem.cpp b/ServerLMS/Systems/recognizesystem.cpp index 63971a6..31f1710 100644 --- a/ServerLMS/Systems/recognizesystem.cpp +++ b/ServerLMS/Systems/recognizesystem.cpp @@ -23,8 +23,8 @@ void RecognizeSystem::initialize(UpdateController *updateController,DataParser* this->sendSystem = sendSystem; socket = handler->getSocket(); - connect(this,&RecognizeSystem::sigCalculateHash,updateController,&UpdateController::calculateFullHash,Qt::AutoConnection); - connect(this,&RecognizeSystem::sigCalculateHash,updateController,&UpdateController::setUpCurrentServerHash,Qt::AutoConnection); + connect(this,&RecognizeSystem::sigCalculateHash,updateController,&UpdateController::calculateFullHashWithSetup,Qt::AutoConnection); + //connect(this,&RecognizeSystem::sigCalculateHash,updateController,&UpdateController::setUpCurrentServerHash,Qt::AutoConnection); connect(this,&RecognizeSystem::sigChangeVersion,updateController,&UpdateController::changeAssetVersion,Qt::AutoConnection); connect(this,&RecognizeSystem::sigDeleteVersion,updateController,&UpdateController::deleteAssetVersion,Qt::AutoConnection); connect(this,&RecognizeSystem::sigCopyVersion,updateController,&UpdateController::createCopyVersion,Qt::AutoConnection); diff --git a/ServerLMS/Systems/updatecontroller.cpp b/ServerLMS/Systems/updatecontroller.cpp index c86de7f..2ebe0c7 100644 --- a/ServerLMS/Systems/updatecontroller.cpp +++ b/ServerLMS/Systems/updatecontroller.cpp @@ -29,7 +29,7 @@ void UpdateController::initialize(CommonClientHandler *commonClientHandler,DataP connect(this,&UpdateController::sigLogMessage,logger,&Logger::addTextToLogger,Qt::AutoConnection); calculateFullHash(); - currentStreamingPath = assetManager->setVersion("base"); + currentStreamingPath = assetManager->setVersion("base"); //TODO: сохрнаять предыдущую версию и загружать ее при включении setUpCurrentServerHash(); mutex = new QMutex; @@ -82,18 +82,28 @@ void UpdateController::showHash() void UpdateController::calculateFullHash() { + qDebug() << "Calculate hash..."; commonClientHandler->slot_sendPacketToAllClients(PacketType::BUSY); auto *list = calculateHash(buildPath); saveHash(buildHashName,list); calculateSharedHash(); emit sigLogMessage("Calculate hash complete"); commonClientHandler->slot_sendPacketToAllClients(PacketType::FREE); + qDebug() << "Calculate complete..."; +} + +void UpdateController::calculateFullHashWithSetup() +{ + commonClientHandler->slot_sendPacketToAllClients(PacketType::HASH_CALCULATE_START); + calculateFullHash(); + setUpCurrentServerHash(); + commonClientHandler->slot_sendPacketToAllClients(PacketType::HASH_READY); } void UpdateController::saveHash(QString fileName,QList *fileList) { QFile hashFile(fileName); - hashFile.open(QIODevice::WriteOnly); + hashFile.open(QIODevice::WriteOnly | QIODevice::Truncate); QXmlStreamWriter xmlWriter(&hashFile); QListIterator fileDataIterator(*fileList); diff --git a/ServerLMS/Systems/updatecontroller.h b/ServerLMS/Systems/updatecontroller.h index f22b150..5daf24e 100644 --- a/ServerLMS/Systems/updatecontroller.h +++ b/ServerLMS/Systems/updatecontroller.h @@ -36,6 +36,7 @@ public: void compareFiles(ClientHandler* handler, QByteArray array); void showHash(); void calculateFullHash(); + void calculateFullHashWithSetup(); void calculateSharedHash(); void sendNewVersionList(); void setCurrentStreamingPath(QString path); diff --git a/ServerLMS/clienthandler.cpp b/ServerLMS/clienthandler.cpp index 5710ea9..c01d390 100644 --- a/ServerLMS/clienthandler.cpp +++ b/ServerLMS/clienthandler.cpp @@ -45,7 +45,7 @@ void ClientHandler::initialize(int descriptor,ServerLMSWidget *serverWidget, connect(this,&ClientHandler::sigFolderBlock,sendSystem,&SendSystem::sendFolderBlock,Qt::AutoConnection); connect(this,&ClientHandler::sigGetIsSendStopped,sendSystem,&SendSystem::getIsSendStopped,Qt::AutoConnection); connect(this,&ClientHandler::sigSendDeleteBlock,sendSystem,&SendSystem::sendDeleteBlock,Qt::AutoConnection); - connect(this,&ClientHandler::sigSendFinish,sendSystem,&SendSystem::sendPacketType,Qt::AutoConnection); + //connect(this,&ClientHandler::sigSendFinish,sendSystem,&SendSystem::sendPacketType,Qt::AutoConnection); connect(this,&ClientHandler::sigSendMessageBlock,sendSystem,&SendSystem::sendMessageBlock,Qt::AutoConnection); connect(this,&ClientHandler::sigNeedUpdate,sendSystem,&SendSystem::sendNeedUpdate,Qt::AutoConnection); connect(this,&ClientHandler::sigSendNotify,sendSystem,&SendSystem::sendNotify,Qt::AutoConnection); @@ -129,11 +129,6 @@ void ClientHandler::sendDeleteBlock(QString path) emit sigSendDeleteBlock(path); } -void ClientHandler::sendFinish() -{ - emit sigSendFinish(PacketType::TYPE_FINISH); -} - void ClientHandler::sendMessageBlock(QString text) { emit sigSendMessageBlock(text); diff --git a/ServerLMS/clienthandler.h b/ServerLMS/clienthandler.h index 3a799ea..a1641aa 100644 --- a/ServerLMS/clienthandler.h +++ b/ServerLMS/clienthandler.h @@ -57,7 +57,6 @@ signals: void sigFileBlockByteArray(QByteArray array, PacketType packetType); bool sigGetIsSendStopped(); void sigSendDeleteBlock(QString path); - void sigSendFinish(PacketType packetType); void sigSendMessageBlock(QString text); void sigNeedUpdate(bool flag,quint64 size,quint64 fileCount,quint64 deleteCount); void sigClientDisconnected(QString address,QString port); diff --git a/ServerLMS/multithreadserver.cpp b/ServerLMS/multithreadserver.cpp index 50a0217..3e8a5fb 100644 --- a/ServerLMS/multithreadserver.cpp +++ b/ServerLMS/multithreadserver.cpp @@ -56,6 +56,6 @@ void MultiThreadServer::slotDisconnectClient(QString peerAddress, QString peerPo emit sigSendToLogger("SERVER: Client " + login + " disconnected"); serverLmsWidget->slotUpdateListClients(); - serverLmsWidget->autorizationHandler(login); + serverLmsWidget->getProcessingSystem()->processingClientDeAutorization(login); } diff --git a/ServerLMS/serverlmswidget.cpp b/ServerLMS/serverlmswidget.cpp index c640492..770652b 100644 --- a/ServerLMS/serverlmswidget.cpp +++ b/ServerLMS/serverlmswidget.cpp @@ -8,7 +8,6 @@ #include "serverlmswidget.h" #include "ui_serverlmswidget.h" - ServerLMSWidget::ServerLMSWidget(QWidget *parent) : QWidget(parent), ui(new Ui::ServerLMSWidget), @@ -84,20 +83,6 @@ ServerLMSWidget::ServerLMSWidget(QWidget *parent) : qDebug() << "MAIN THREAD: " << QThread::currentThreadId(); } -void ServerLMSWidget::autorizationHandler(QString login) -{ - //Отмена авторизации в БД - - if(providerDBLMS->deAuthorizationTrainee(login)) - {//Деавторизовался обучаемый - - } - else if(providerDBLMS->deAuthorizationInstructor(login)) - {//Деавторизовался инструктор - - } -} - void ServerLMSWidget::setError(int code) { errorCode = code; @@ -152,7 +137,7 @@ bool ServerLMSWidget::stopServer() emit sigLog("To Client: " + str); //slotDisconnectClient(clientsMap[idSocket]->get, QString peerPort) - autorizationHandler(clientsMap[idSocket]->getClient()->getLogin()); + processingSystem->processingClientDeAutorization(clientsMap[idSocket]->getClient()->getLogin()); clientsMap[idSocket]->sigSocketClose(); //clientsMap.remove(idSocket); @@ -232,7 +217,6 @@ void ServerLMSWidget::slotAddToLog(QString msg) ui->listWidgetLogger->scrollToBottom(); } - void ServerLMSWidget::on_btnStartServer_clicked() { if(startServer()) diff --git a/ServerLMS/serverlmswidget.h b/ServerLMS/serverlmswidget.h index c3d1555..c0c7205 100644 --- a/ServerLMS/serverlmswidget.h +++ b/ServerLMS/serverlmswidget.h @@ -47,10 +47,8 @@ public: explicit ServerLMSWidget(QWidget *parent = nullptr); ~ServerLMSWidget(); - void autorizationHandler(QString login); void setError(int code); - protected: // Метод получения событий // В нём будет производиться проверка события смены перевода приложения @@ -134,7 +132,6 @@ private: QTranslator qtLanguageTranslator; int errorCode; - }; #endif // SERVERLMSWIDGET_H