feat: add update scenario

This commit is contained in:
semenov
2025-11-19 14:03:24 +03:00
parent c0d6571f2c
commit 560b7ff4cb
16 changed files with 469 additions and 313 deletions

View File

@@ -12,7 +12,7 @@ enum PacketType
TYPE_COMMAND =3,
TYPE_FOLDER = 4,
TYPE_DELETE = 5,
TYPE_FINISH = 6,
TYPE_LOADING_FINISH_WITHOUT_DOCS = 6,
TYPE_NEEDUPDATE = 7,
TYPE_XMLANSWER = 8,
TYPE_QT = 9,
@@ -21,6 +21,7 @@ enum PacketType
TYPE_CHECK_VERSION = 13,
TYPE_FILESIZE = 20,
TYPE_BIGXML = 21,
TYPE_FULL_LOADING_FINISH = 22,
TYPE_XMLANSWER_MESSAGE_FOR_GUI = 90,
@@ -50,7 +51,9 @@ enum PacketType
DELETE_DATA_VERSION = 153,
BUSY = 154,
FREE = 155,
HASH_CALCULATE_START = 156,
RECALCULATE_HASH = 156,
RECALCULATE_DOCS = 157,
GET_DOCS = 158,
};
template<typename T>
@@ -60,39 +63,45 @@ template<>
inline QString enumToString(PacketType value) {
switch(value) {
case PacketType::TYPE_NONE: return "TYPE_NONE";
case PacketType::TYPE_UNITY: return "TYPE_UNITY";
case PacketType::TYPE_FILE: return "TYPE_FILE";
case PacketType::TYPE_COMMAND: return "TYPE_COMMAND";
case PacketType::TYPE_FOLDER: return "TYPE_FOLDER";
case PacketType::TYPE_DELETE: return "TYPE_DELETE";
case PacketType::TYPE_FINISH: return "TYPE_FINISH";
case PacketType::TYPE_NEEDUPDATE: return "TYPE_NEEDUPDATE";
case PacketType::TYPE_XMLANSWER: return "TYPE_XMLANSWER";
case PacketType::TYPE_QT: return "TYPE_QT";
case PacketType::TYPE_DISABLE: return "TYPE_DISABLE";
case PacketType::TYPE_UPDATE: return "TYPE_UPDATE";
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::CHANGE_DATA_VERSION: return "CHANGE_DATA_VERSION";
case PacketType::COPY_VERSION: return "COPY_VERSION";
case PacketType::DELETE_DATA_VERSION: return "DELETE_DATA_VERSION";
case PacketType::BUSY: return "BUSY";
case PacketType::FREE: return "FREE";
case PacketType::HASH_CALCULATE_START: return "HASH_CALCULATE_START";
case PacketType::HASH_READY: return "HASH_READY";
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";
case PacketType::TYPE_XMLANSWER_QUERY_DB__LIST_TRAINEES: return "TYPE_XMLANSWER_QUERY_DB__LIST_TRAINEES";
case PacketType::TYPE_XMLANSWER_QUERY_DB__LIST_COMPUTERS: return "TYPE_XMLANSWER_QUERY_DB__LIST_COMPUTERS";
case PacketType::TYPE_XMLANSWER_QUERY_DB__LIST_CLASSROOMS: return "TYPE_XMLANSWER_QUERY_DB__LIST_CLASSROOMS";
case PacketType::TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_TRAINEE: return "TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_TRAINEE";
case PacketType::TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_TRAINEE: return "TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_TRAINEE";
case PacketType::TYPE_XMLANSWER_QUERY_TASKS_XML_FIM: return "TYPE_XMLANSWER_QUERY_TASKS_XML_FIM";
case PacketType::TYPE_XMLANSWER_QUERY_TASKS_XML_AMM: return "TYPE_XMLANSWER_QUERY_TASKS_XML_AMM";
case PacketType::TYPE_UNITY: return "TYPE_UNITY";
case PacketType::TYPE_FILE: return "TYPE_FILE";
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::TYPE_NEEDUPDATE: return "TYPE_NEEDUPDATE";
case PacketType::TYPE_XMLANSWER: return "TYPE_XMLANSWER";
case PacketType::TYPE_QT: return "TYPE_QT";
case PacketType::TYPE_DISABLE: return "TYPE_DISABLE";
case PacketType::TYPE_UPDATE: return "TYPE_UPDATE";
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::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";
case PacketType::TYPE_XMLANSWER_QUERY_DB__LIST_TRAINEES: return "TYPE_XMLANSWER_QUERY_DB__LIST_TRAINEES";
case PacketType::TYPE_XMLANSWER_QUERY_DB__LIST_COMPUTERS: return "TYPE_XMLANSWER_QUERY_DB__LIST_COMPUTERS";
case PacketType::TYPE_XMLANSWER_QUERY_DB__LIST_CLASSROOMS: return "TYPE_XMLANSWER_QUERY_DB__LIST_CLASSROOMS";
case PacketType::TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_TRAINEE: return "TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_TRAINEE";
case PacketType::TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_TRAINEE: return "TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_TRAINEE";
case PacketType::TYPE_XMLANSWER_QUERY_TASKS_XML_FIM: return "TYPE_XMLANSWER_QUERY_TASKS_XML_FIM";
case PacketType::TYPE_XMLANSWER_QUERY_TASKS_XML_AMM: return "TYPE_XMLANSWER_QUERY_TASKS_XML_AMM";
case PacketType::TYPE_XMLANSWER_DOCS_CHANGED: return "TYPE_XMLANSWER_DOCS_CHANGED";
case PacketType::TYPE_XMLANSWER_QUERY_LIST_SUB_PROC_AMM: return "TYPE_XMLANSWER_QUERY_LIST_SUB_PROC_AMM";
case PacketType::HASH_READY: return "HASH_READY";
case PacketType::CHANGE_DATA_VERSION: return "CHANGE_DATA_VERSION";
case PacketType::COPY_VERSION: return "COPY_VERSION";
case PacketType::DELETE_DATA_VERSION: return "DELETE_DATA_VERSION";
case PacketType::BUSY: return "BUSY";
case PacketType::FREE: return "FREE";
case PacketType::RECALCULATE_HASH: return "HASH_CALCULATE_START";
case PacketType::RECALCULATE_DOCS: return "RECALCULATE_DOCS";
case PacketType::GET_DOCS: return "GET_DOCS";
default: return "Unknown";
default: return "Unknown";
}
}
#endif // PACKETTYPE_H

View File

@@ -114,6 +114,7 @@ void CommonClientHandler::slot_sendPacketToAllClients(PacketType packetType)
if (!handler->getClient()->getIsLoggedIn()) continue;
handler->sendPacketType(packetType);
Logger::instance().log("AllSending " + handler->getClient()->getLogin() + " " + enumToString(packetType));
}
}

View File

@@ -41,7 +41,7 @@ bool DocsUpdater::updateDocsXML()
{
QMutexLocker locker(&mtxAccess);
QString nameDocsFile = tasksAMMfileName;
QString nameDocsFile = tasksAMMfileName; //кручу верчу запутать хочу!
QString pathDocsFile = updateController->getPathAdditionalFile(nameDocsFile);
QDomDocument docTasksDOM;

View File

@@ -50,9 +50,11 @@ void FastHashCalculator::calculateHashes(QString path)
QFileInfo fileInfo = fileIterator.fileInfo();
QString path = fileInfo.absoluteFilePath();
//фильтры
if (fileInfo.isHidden()) continue;
if (!fileInfo.isFile()) continue;
if (fileInfo.fileName().contains(".meta")) continue;
if (fileInfo.fileName() == "docs.xml") continue;
files.append(path);
}

View File

@@ -41,8 +41,6 @@ void ProcessingSystem::processingClientAutorization(ClientHandler *client, Clien
client->sendXmlAnswer(arrayAnswer);
QString str = QString(arrayAnswer);
Logger::instance().log("To Client: " + str);
return;
}
@@ -597,8 +595,6 @@ void ProcessingSystem::processingClientNotify(ClientHandler *client, ClientNotif
{
chatSystem->sendOldMessages(clientData->getId());
}
Logger::instance().log(clientData->getLogin() + " notifyCode " + clientNotify.Code,LogLevel::DEBUG);
}
void ProcessingSystem::setCurrentDataInfo(DataInfo *dataInfo)

View File

@@ -28,6 +28,8 @@ void RecognizeSystem::initialize(UpdateController *updateController,DataParser*
connect(this,&RecognizeSystem::sigDeleteVersion,updateController,&UpdateController::deleteAssetVersion,Qt::AutoConnection);
connect(this,&RecognizeSystem::sigCopyVersion,updateController,&UpdateController::createCopyVersion,Qt::AutoConnection);
connect(this,&RecognizeSystem::sigXmlParser,dataParser->getProcessParser(),&ProcessParser::slot_read,Qt::AutoConnection);
connect(this,&RecognizeSystem::sigRecalculateDocs,server,&ServerLMSWidget::slot_UpdateDocs,Qt::AutoConnection);
connect(this,&RecognizeSystem::sigSendDocs,sendSystem,&SendSystem::sendDocs,Qt::AutoConnection);
qDebug() << "Recognize init thread ID " << QThread::currentThreadId();
}
@@ -70,8 +72,7 @@ void RecognizeSystem::recognize()
if (packetType != PacketType::TYPE_NONE)
{
QString result = enumToString(packetType);
Logger::instance().log(client->getLogin() +
" RECEIVE pack " +
Logger::instance().log("RECEIVE FROM: " + client->getLogin() + " " +
result ,LogLevel::DEBUG);
//секция на случай прихода неизвестного пакета
if(result == "Unknown")
@@ -111,7 +112,7 @@ void RecognizeSystem::recognize()
sendSystem->updateFiles(updateController->getFileSendList(),
updateController->getFileDeleteList());
qDebug()<< "Call update";
qDebug()<< "Call update no docs";
packetType = PacketType::TYPE_NONE;
}
@@ -140,6 +141,7 @@ void RecognizeSystem::recognize()
qDebug() << data;
emit sigXmlParser(clientHandler,data);
Logger::instance().log(" Text " + QString(data), LogLevel::DEBUG);
packetType = PacketType::TYPE_NONE;
continue;
}
@@ -373,12 +375,6 @@ void RecognizeSystem::recognize()
continue;
}
if (packetType == PacketType::TYPE_FINISH)
{
emit sigCalculateHash();
packetType = PacketType::TYPE_NONE;
}
if(packetType == PacketType::CHANGE_DATA_VERSION)
{
stream.startTransaction();
@@ -447,6 +443,22 @@ void RecognizeSystem::recognize()
clientHandler->sendDisable();
}
if(packetType == PacketType::RECALCULATE_DOCS)
{
emit sigCalculateHash();
emit sigRecalculateDocs();
}
if(packetType == PacketType::GET_DOCS)
{
emit sigSendDocs(updateController->getPathAdditionalFile(tasksAMMfileName));
}
// if(packetType == PacketType::RECALCULATE_HASH)
// {
// emit sigCalculateHash();
// }
packetType = PacketType::TYPE_NONE;
}

View File

@@ -37,6 +37,8 @@ signals:
void sigChangeVersion(QString versionName);
void sigDeleteVersion(QString versionName);
void sigCopyVersion(QString versionName,QString newVersionName,QString author);
void sigRecalculateDocs();
void sigSendDocs(QString docsPath);
private:
UpdateController *updateController;

View File

@@ -211,7 +211,7 @@ void SendSystem::sendDeleteBlock(QString path)
void SendSystem::sendPacketType(PacketType packetType)
{
Logger::instance().log("C: " + client->getLogin() + " send pack " + enumToString(packetType), LogLevel::DEBUG);
Logger::instance().log(" SEND TO: " + client->getLogin() + " " + enumToString(packetType), LogLevel::DEBUG);
if (client->getClientType() == TypeClientAutorization::TYPE_QT_CLIENT ||
client->getClientType() == TypeClientAutorization::TYPE_GUI)
{
@@ -238,8 +238,8 @@ void SendSystem::sendHello()
void SendSystem::sendXmlAnswer(QByteArray array, PacketType packetType)
{
qDebug() << "SendSystemThread: " << QThread::currentThreadId();
Logger::instance().log("C: " + client->getLogin() + " send pack " + enumToString(packetType) +
" " + QString::fromUtf8(array),LogLevel::DEBUG);
Logger::instance().log("SEND TO: "+ client->getLogin() + " " + enumToString(packetType) + "\n Text: " +
QString(array),LogLevel::DEBUG);
if (client->getClientType() == TypeClientAutorization::TYPE_QT_CLIENT ||
client->getClientType() == TypeClientAutorization::TYPE_GUI)
@@ -312,9 +312,10 @@ void SendSystem::updateFiles(QList<FileData> fileSendList, QList<FileData> delet
}
}
sendPacketType(PacketType::TYPE_FINISH);
sendPacketType(PacketType::TYPE_LOADING_FINISH_WITHOUT_DOCS);
}
void SendSystem::socketClose()
{
socket->close();
@@ -330,6 +331,12 @@ void SendSystem::sendStop()
isSendStopped = true;
}
void SendSystem::sendDocs(QString docsPath)
{
sendFileBlock(docsPath);
sendPacketType(PacketType::TYPE_FULL_LOADING_FINISH);
}
bool SendSystem::getIsSendStopped() const
{
return isSendStopped;

View File

@@ -32,6 +32,7 @@ public:
void sendHello();
void sendNotify(QString notify);
void sendStop();
void sendDocs(QString docPath);
void sendXmlAnswer(QByteArray array, PacketType packetType = PacketType::TYPE_XMLANSWER);
void sendNeedUpdate(bool flag,quint64 size,quint64 fileCount,quint64 deleteCount);
void updateFiles(QList<FileData> fileSendList, QList<FileData> deleteList);
@@ -42,6 +43,7 @@ public:
~SendSystem();
void updateFilesFULL(QList<FileData> fileSendList, QList<FileData> deleteList);
public slots:
void socketClose();
void sendVersion();

View File

@@ -46,6 +46,7 @@ void UpdateController::changeAssetVersion(QString versionName)
qDebug() << "UpdateController thread ID " << QThread::currentThreadId();
currentStreamingPath = assetManager->setVersion(versionName);
setUpCurrentServerHash();
emit sigUpdateDocs();
commonClientHandler->slot_sendPacketToAllClients(PacketType::HASH_READY);
commonClientHandler->sendCurrentVersionToAllClient();
@@ -107,7 +108,7 @@ void UpdateController::calculateFullHash()
void UpdateController::calculateFullHashWithSetup()
{
commonClientHandler->slot_sendPacketToAllClients(PacketType::HASH_CALCULATE_START);
commonClientHandler->slot_sendPacketToAllClients(PacketType::RECALCULATE_HASH);
calculateCurrentSharedHash();
setUpCurrentServerHash();
commonClientHandler->slot_sendPacketToAllClients(PacketType::HASH_READY);
@@ -259,6 +260,7 @@ bool UpdateController::checkNeedUpdate(ClientHandler *handler)
for (auto &item:clientDataList) //проверка на недостающие файлы по адресам
{
if(item.path.contains("Temp")) continue;
if(item.path.contains("docs.xml")) continue;
if (!serverDataList.contains(item))
{
@@ -269,6 +271,7 @@ bool UpdateController::checkNeedUpdate(ClientHandler *handler)
for (auto &item:serverDataList)
{
if(item.path.contains("Temp")) continue;
if(item.path.contains("docs.xml")) continue;
if (!clientDataList.contains(item))
{

View File

@@ -68,6 +68,7 @@ public slots:
signals:
void sigErrorRequired(int code);
void sigUpdateDocs();
private:
QList<FileData> clientDataList;

View File

@@ -116,7 +116,7 @@ void ClientHandler::sendVersionList()
QByteArray array = file.readAll();
file.close();
/*emit*/ sendXmlAnswer(array); //KAV это же не сигнал!?
sendXmlAnswer(array);
}
void ClientHandler::sendPacketType(PacketType packetType)
@@ -152,11 +152,13 @@ void ClientHandler::sendDeleteBlock(QString path)
void ClientHandler::sendNotify(QString text)
{
emit sigSendNotify(text);
Logger::instance().log(client->getLogin() + " send notify");
}
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");
}
void ClientHandler::sendDisable()
@@ -179,7 +181,7 @@ void ClientHandler::packetTypeInit(PacketType packet,Client *client)
client->setUnity(TypeClientAutorization::TYPE_UNITY_CLIENT);
}
Logger::instance().log("C: " + client->getLogin() + " send pack " + enumToString(packet));
Logger::instance().log("INIT PACK " + enumToString(packet));
}

View File

@@ -328,6 +328,7 @@ void ServerLMSWidget::startInitialization()
connect(this,&ServerLMSWidget::sigUpdateController,updateController,&UpdateController::initialize,Qt::DirectConnection);
connect(this,&ServerLMSWidget::sigCalculateFullHash,updateController,&UpdateController::calculateFullHash,Qt::AutoConnection);
connect(updateController,&UpdateController::sigErrorRequired,this,&ServerLMSWidget::setError);
connect(updateController,&UpdateController::sigUpdateDocs,this,&ServerLMSWidget::slot_UpdateDocs,Qt::AutoConnection);
connect(&Logger::instance(),&Logger::sigLogToWidget,this, &ServerLMSWidget::slot_AddMessageToLog,Qt::QueuedConnection);
emit sigUpdateController(commonClientHandler,dataParser,assetsManager);