в GUI приходит ответ с перечнем ПП от Сервера

This commit is contained in:
2025-11-17 10:22:02 +03:00
parent aa4972c3a5
commit 0c7d84ec84
21 changed files with 324 additions and 190 deletions

View File

@@ -42,6 +42,8 @@ add_library(ServerLMS SHARED
Systems/Parsers/dbanswerparser.h
Systems/Parsers/processparser.cpp
Systems/Parsers/processparser.h
Systems/Parsers/docsanswerparser.cpp
Systems/Parsers/docsanswerparser.h
Systems/processingsystem.cpp
Systems/processingsystem.h
Systems/sendsystem.cpp

View File

@@ -41,6 +41,8 @@ enum PacketType
//оповещение об изменении docs.xml
TYPE_XMLANSWER_DOCS_CHANGED = 132,
TYPE_XMLANSWER_QUERY_LIST_SUB_PROC_AMM = 133,
//ответы по обновлениям
HASH_READY = 150,
CHANGE_DATA_VERSION = 151,

View File

@@ -20,5 +20,6 @@
<file>resources/icons/editorDB.png</file>
<file>resources/icons/procedure.png</file>
<file>resources/icons/exchange.png</file>
<file>resources/blankXML/ListSubProc.xml</file>
</qresource>
</RCC>

View File

@@ -15,6 +15,8 @@ QObject(parent)
dbAnswer = new DBAnswerParser;
dbAnswer->initialize(this);
docsAnswer = new DocsAnswerParser;
processParser = new ProcessParser;
processParser->initialize(processingSystem);
@@ -120,9 +122,18 @@ ProcessParser *DataParser::getProcessParser() const
return processParser;
}
DocsAnswerParser *DataParser::getDocsAnswerParser() const
{
return docsAnswer;
}
DataParser::~DataParser()
{
delete clientAnswer;
delete dbAnswer;
delete docsAnswer;
delete processParser;
delete mutex;
}

View File

@@ -7,6 +7,7 @@
#include "Systems/logger.h"
#include "Systems/Parsers/clientanswerparser.h"
#include "dbanswerparser.h"
#include "docsanswerparser.h"
#include "processparser.h"
#include "serverlmswidget.h"
@@ -23,6 +24,7 @@ class ClientHandler;
class AssetsManager;
class ClientAnswerParser;
class DBAnswerParser;
class DocsAnswerParser;
class ProcessParser;
class DataParser : public QObject
@@ -41,6 +43,7 @@ public:
ClientAnswerParser *ClientAnswer() const;
DBAnswerParser *DbAnswer() const;
ProcessParser *getProcessParser() const;
DocsAnswerParser *getDocsAnswerParser() const;
signals:
void sigLogMessage(QString log);
@@ -53,6 +56,7 @@ private:
AssetsManager *assetsManager;
ClientAnswerParser *clientAnswer;
DBAnswerParser *dbAnswer;
DocsAnswerParser* docsAnswer;
ProcessParser *processParser;
QByteArray readTempFile();
};

View File

@@ -0,0 +1,29 @@
#include "docsanswerparser.h"
#include "docsupdater.h"
DocsAnswerParser::DocsAnswerParser(QObject *parent) : QObject(parent)
{
}
QByteArray DocsAnswerParser::listSubProc(QList<SubProc> list)
{
QDomDocument commonDOM;
if(! Tools::loadXMLtoDOM(":/resources/blankXML/ListSubProc.xml", &commonDOM))
return QByteArray();
QDomNode listNode = commonDOM.namedItem("ListSubProc");
for(SubProc subProc : list)
{
QDomNode subProcNode = commonDOM.createElement("SubProc");
listNode.appendChild(subProcNode);
subProcNode.toElement().setAttribute("dmCode", subProc.dmCode);
subProcNode.toElement().setAttribute("title", subProc.title);
subProcNode.toElement().setAttribute("canplay", DocsUpdater::buildCanplay(subProc.modeList));
}
Tools::saveDOMtoXML("ListSubProc.xml", &commonDOM);
return commonDOM.toByteArray();
}

View File

@@ -0,0 +1,23 @@
#ifndef DOCSANSWERPARSER_H
#define DOCSANSWERPARSER_H
#include <QObject>
#include <QList>
#include "docsupdater.h"
struct SubProc;
class DocsAnswerParser : public QObject
{
Q_OBJECT
public:
explicit DocsAnswerParser(QObject *parent = nullptr);
public:
QByteArray listSubProc(QList<SubProc> list);
signals:
};
#endif // DOCSANSWERPARSER_H

View File

@@ -44,6 +44,11 @@ void ProcessParser::slot_read(ClientHandler *client, QByteArray array)
queryTasksXML(xmlReader,client);
}
else if(xmlReader.name() == "QueryListSubProc")
{//Запрос списка подпроцедур
queryListSubProc(xmlReader,client);
}
else if(xmlReader.name() == "ClientMessage")
{//Сообщение от клиента
@@ -504,6 +509,24 @@ void ProcessParser::queryTasksXML(QXmlStreamReader &xmlReader, ClientHandler *cl
processingSystem->processingClientQueryTasksXML(client, clientQueryTasksXML);
}
void ProcessParser::queryListSubProc(QXmlStreamReader &xmlReader, ClientHandler *client)
{
QString dmCode = "";
/*Перебираем все атрибуты тега*/
foreach(const QXmlStreamAttribute &attr, xmlReader.attributes())
{
QString name = attr.name().toString();
QString value = attr.value().toString();
//addTextToLogger(name + ": " + value);
if(name == "dmCode")
dmCode = value;
}
processingSystem->processingClientQueryListSubProc(client, dmCode);
}
void ProcessParser::clientMessage(QXmlStreamReader &xmlReader,ClientHandler *client)
{
ClientMessage clientMessage;

View File

@@ -29,6 +29,7 @@ private:
void toClientMessage(QXmlStreamReader &xmlReader,ClientHandler *client);
void queryToDb(QXmlStreamReader &xmlReader,ClientHandler *client, QByteArray array = QByteArray());
void queryTasksXML(QXmlStreamReader &xmlReader,ClientHandler *client);
void queryListSubProc(QXmlStreamReader &xmlReader,ClientHandler *client);
void clientMessage(QXmlStreamReader &xmlReader,ClientHandler *client);
void clientNotify(QXmlStreamReader &xmlReader,ClientHandler *client);
void clientDataInfo(QXmlStreamReader &xmlReader, ClientHandler *client);

View File

@@ -281,6 +281,12 @@ ModeList DocsUpdater::parseCanplay(QString canplay)
return modeList;
}
QString DocsUpdater::buildCanplay(ModeList modeList)
{
QString canplay = QString("%1/%2/%3/%4").arg(modeList.demo?"+":"-", modeList.train?"+":"-", modeList.exam?"+":"-", modeList.autoM?"+":"-");
return canplay;
}
bool DocsUpdater::processingScenXML(const QString dmCode, QString &canplay, QList<SubProc> &listSubProc)
{
listSubProc.clear();

View File

@@ -29,10 +29,12 @@ public:
bool updateDocsXML();
static ModeList parseCanplay(QString canplay);
static QString buildCanplay(ModeList modeList);
private:
void domElementParserAMM(QDomElement element, Module* moduleParent);
void deleteAllModulsAMM();
ModeList parseCanplay(QString canplay);
void deleteAllModulsAMM();
bool processingScenXML(const QString dmCode, QString& canplay, QList<SubProc>& listSubProc);
void selectSubProc(QDomElement& modeElement, QList<SubProc>& listSubProc);
DM* getDMmoduleByDMcode(QString dmCode);

View File

@@ -523,6 +523,18 @@ void ProcessingSystem::processingClientQueryTasksXML(ClientHandler *client, Clie
}
}
void ProcessingSystem::processingClientQueryListSubProc(ClientHandler *client, QString dmCode)
{
QList<SubProc> list = docsUpdater->getListSubProcForDMcode(dmCode);
QByteArray arrayAnswer = dataParser->getDocsAnswerParser()->listSubProc(list);
//client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_LIST_SUB_PROC_AMM);
client->sendFileBlockByteArray(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_LIST_SUB_PROC_AMM);
int i = 0;
i++;
}
void ProcessingSystem::processingSendMessage(ClientMessage clientMessage)
{
chatSystem->sendMessage(clientMessage);

View File

@@ -38,6 +38,7 @@ public:
void processingClientBlockAuth(ClientHandler *client, bool block);
void processingClientQueryToDB(ClientHandler *client, ClientQueryToDB clientQueryToDB, int id = 0, void* data = nullptr);
void processingClientQueryTasksXML(ClientHandler *client, ClientQueryTasksXML clientQueryTasksXML);
void processingClientQueryListSubProc(ClientHandler *client, QString dmCode);
void processingSendMessage(ClientMessage clientMessage);
void processingClientNotify(ClientHandler *client, ClientNotify clientNotify);

View File

@@ -116,7 +116,7 @@ void ClientHandler::sendVersionList()
QByteArray array = file.readAll();
file.close();
emit sendXmlAnswer(array);
/*emit*/ sendXmlAnswer(array); //KAV это же не сигнал!?
}
void ClientHandler::sendPacketType(PacketType packetType)

View File

@@ -0,0 +1,3 @@
<?xml version='1.0' encoding='utf-8'?>
<ListSubProc>
</ListSubProc>