diff --git a/DOCS/Алексей/Board.md b/DOCS/Алексей/Board.md index 5fd63b0..3265293 100644 --- a/DOCS/Алексей/Board.md +++ b/DOCS/Алексей/Board.md @@ -15,6 +15,7 @@ kanban-plugin: board - [ ] не отправлять updateDocs если не залогинен - [ ] Отменить изменения работает некрасиво - [ ] BUSY не меняет иконку блокировки +- [ ] не работают ссылки при выгрузке в QT Client ## feature client Unity diff --git a/ServerLMS/Data/Client.h b/ServerLMS/Data/Client.h index ac0508b..fac4820 100644 --- a/ServerLMS/Data/Client.h +++ b/ServerLMS/Data/Client.h @@ -118,6 +118,15 @@ public: id = value; } + QByteArray getClientHash() + { + return clientHash; + } + void setClientHash(const QByteArray &value) + { + clientHash = value; + } + private: QString name; QString address; @@ -131,8 +140,7 @@ private: TypeClientAutorization typeClient; UserType userType; + QByteArray clientHash; }; #endif // CLIENT_H - - diff --git a/ServerLMS/Data/PacketType.h b/ServerLMS/Data/PacketType.h index 0ad1ab3..42c0241 100644 --- a/ServerLMS/Data/PacketType.h +++ b/ServerLMS/Data/PacketType.h @@ -12,7 +12,7 @@ enum PacketType TYPE_COMMAND =3, TYPE_FOLDER = 4, TYPE_DELETE = 5, - TYPE_LOADING_FINISH_WITHOUT_DOCS = 6, + UPDATE_FILES_COMPLETE = 6, TYPE_NEEDUPDATE = 7, TYPE_XMLANSWER = 8, TYPE_QT = 9, @@ -21,7 +21,7 @@ enum PacketType TYPE_CHECK_VERSION = 13, TYPE_FILESIZE = 20, TYPE_BIGXML = 21, - TYPE_FULL_LOADING_FINISH = 22, + UPDATE_DOCS_COMPLETE = 22, TYPE_XMLANSWER_MESSAGE_FOR_GUI = 90, @@ -54,6 +54,7 @@ enum PacketType RECALCULATE_HASH = 156, RECALCULATE_DOCS = 157, GET_DOCS = 158, + SEND_HASH = 159 }; template @@ -68,7 +69,7 @@ inline QString enumToString(PacketType value) { case PacketType::TYPE_COMMAND: return "TYPE_COMMAND"; case PacketType::TYPE_FOLDER: return "TYPE_FOLDER"; case PacketType::TYPE_DELETE: return "TYPE_DELETE"; - case PacketType::TYPE_LOADING_FINISH_WITHOUT_DOCS: return "TYPE_LOADING_FINISH_WITHOUT_DOCS"; + case PacketType::UPDATE_FILES_COMPLETE: return "UPDATE_FILE_COMPLETE"; case PacketType::TYPE_NEEDUPDATE: return "TYPE_NEEDUPDATE"; case PacketType::TYPE_XMLANSWER: return "TYPE_XMLANSWER"; case PacketType::TYPE_QT: return "TYPE_QT"; @@ -77,7 +78,7 @@ inline QString enumToString(PacketType value) { case PacketType::TYPE_CHECK_VERSION: return "TYPE_CHECK_VERSION"; case PacketType::TYPE_FILESIZE: return "TYPE_FILESIZE"; case PacketType::TYPE_BIGXML: return "TYPE_BIGXML"; - case PacketType::TYPE_FULL_LOADING_FINISH: return "TYPE_FULL_LOADING_FINISH"; + case PacketType::UPDATE_DOCS_COMPLETE: return "UPDATE_DOCS_COMPLETE"; case PacketType::TYPE_XMLANSWER_MESSAGE_FOR_GUI: return "TYPE_XMLANSWER_MESSAGE_FOR_GUI"; case PacketType::TYPE_XMLANSWER_QUERY_DB__LIST_INSTRUCTORS: return "TYPE_XMLANSWER_QUERY_DB__LIST_INSTRUCTORS"; case PacketType::TYPE_XMLANSWER_QUERY_DB__LIST_GROUPS: return "TYPE_XMLANSWER_QUERY_DB__LIST_GROUPS"; @@ -99,6 +100,7 @@ inline QString enumToString(PacketType value) { case PacketType::RECALCULATE_HASH: return "HASH_CALCULATE_START"; case PacketType::RECALCULATE_DOCS: return "RECALCULATE_DOCS"; case PacketType::GET_DOCS: return "GET_DOCS"; + case PacketType::SEND_HASH: return "SEND_HASH"; default: return "Unknown"; diff --git a/ServerLMS/Systems/recognizesystem.cpp b/ServerLMS/Systems/recognizesystem.cpp index 6397f1a..cc06b02 100644 --- a/ServerLMS/Systems/recognizesystem.cpp +++ b/ServerLMS/Systems/recognizesystem.cpp @@ -36,7 +36,7 @@ void RecognizeSystem::initialize(UpdateController *updateController,DataParser* void RecognizeSystem::recognize() { - QMutexLocker locker(mutex); + QMutexLocker locker(mutex); qDebug() << "Recognize thread ID " << QThread::currentThreadId(); QDataStream stream(socket); stream.setVersion(QDataStream::Qt_DefaultCompiledVersion); @@ -118,10 +118,7 @@ void RecognizeSystem::recognize() if(packetType == PacketType::TYPE_CHECK_VERSION) { - QFile checkFile(clientHash); - checkFile.open(QIODevice::ReadOnly); - updateController->compareFiles(clientHandler,checkFile.readAll()); - checkFile.close(); + updateController->compareFiles(clientHandler,client->getClientHash()); } if (packetType == PacketType::TYPE_XMLANSWER) @@ -454,11 +451,60 @@ void RecognizeSystem::recognize() emit sigSendDocs(updateController->getPathAdditionalFile(tasksAMMfileName)); } -// if(packetType == PacketType::RECALCULATE_HASH) -// { -// emit sigCalculateHash(); -// } + if (packetType == PacketType::SEND_HASH) + { + QByteArray hash; + forever + { + stream.startTransaction(); + stream >> fileSize; + + if(!stream.commitTransaction()) continue; + socket->waitForReadyRead(100); + break; + } + + forever + { + stream.startTransaction(); + stream >> tmpBlock; + + if(!stream.commitTransaction()){ + + if(socket->state() == QAbstractSocket::UnconnectedState){ + qDebug() << "UNCONNECT"; + //mutex->unlock(); + return; + } + if(socket->waitForReadyRead(100)){ + continue; + } + + continue; + } + + hash += tmpBlock; + sizeReceiveData += tmpBlock.length(); + countSend++; + + tmpBlock.clear(); + + if(sizeReceiveData == fileSize) break; + + + } + + QString logMessage = "Load from " + client->getLogin() + " "; + + filePath.clear(); + fileSize = 0; + tmpBlock.clear(); + sizeReceiveData = 0; + countSend = 0; + packetType = PacketType::TYPE_NONE; + client->setClientHash(hash); + } packetType = PacketType::TYPE_NONE; } diff --git a/ServerLMS/Systems/sendsystem.cpp b/ServerLMS/Systems/sendsystem.cpp index 5017628..d31906d 100644 --- a/ServerLMS/Systems/sendsystem.cpp +++ b/ServerLMS/Systems/sendsystem.cpp @@ -312,7 +312,8 @@ void SendSystem::updateFiles(QList fileSendList, QList delet } } - sendPacketType(PacketType::TYPE_LOADING_FINISH_WITHOUT_DOCS); + //sendPacketType(PacketType::UPDATE_FILES_COMPLETE); + sendPacketType(PacketType::UPDATE_FILES_COMPLETE); } @@ -334,7 +335,7 @@ void SendSystem::sendStop() void SendSystem::sendDocs(QString docsPath) { sendFileBlock(docsPath); - sendPacketType(PacketType::TYPE_FULL_LOADING_FINISH); + //sendPacketType(PacketType::UPDATE_DOCS_COMPLETE); } bool SendSystem::getIsSendStopped() const diff --git a/ServerLMS/Systems/tools.h b/ServerLMS/Systems/tools.h index 7ceb7c6..572661c 100644 --- a/ServerLMS/Systems/tools.h +++ b/ServerLMS/Systems/tools.h @@ -29,7 +29,7 @@ static const QString buildHashName = staticDataFolderName + "/buildHash.xml"; static const QString buildDataPath = "/Application/" + projectFolderName + "/RRJ_Data/"; static const QString tasksAMMfileName = "/docs.xml"; //"/tasksAmm.xml"; static const QString tasksFIMfileName = "/tasksFIM.xml"; -static const QString clientHash = staticDataFolderName + "/clientHash.xml"; +//static const QString clientHash = staticDataFolderName + "/clientHash.xml"; static const QString logFolderPath = "log"; static const QString configFolderName = "config"; diff --git a/ServerLMS/clienthandler/clienthandler.cpp b/ServerLMS/clienthandler/clienthandler.cpp index 0035f95..d7be669 100644 --- a/ServerLMS/clienthandler/clienthandler.cpp +++ b/ServerLMS/clienthandler/clienthandler.cpp @@ -158,7 +158,8 @@ void ClientHandler::sendNotify(QString text) void ClientHandler::sendNeedUpdate(bool flag, quint64 size, quint64 fileCount,quint64 deleteCount) { emit sigNeedUpdate(flag,size,fileCount,deleteCount); - Logger::instance().log(client->getLogin() + " send need update"); + Logger::instance(). + log(client->getLogin() + " send need update"); } void ClientHandler::sendDisable()