diff --git a/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp b/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp index 70cbbdb..1a1a735 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp +++ b/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp @@ -179,6 +179,25 @@ void DataParser::createQueryToDBMessage(ClientQueryToDB *queryToDB, int id, void file.close(); } +void DataParser::createQueryTasksXMLMessage(QString type) +{ + QFile file(tempName); + file.open(QIODevice::WriteOnly); + QXmlStreamWriter xmlWriter(&file); + + xmlWriter.setAutoFormatting(true); + xmlWriter.writeStartDocument(); + xmlWriter.writeStartElement("QueryTasksXML"); + + xmlWriter.writeAttribute("Type", type); + + xmlWriter.writeEndElement(); + xmlWriter.writeEndElement(); + xmlWriter.writeEndDocument(); + + file.close(); +} + void DataParser::createDeAuthMessage(ClientDeAutorization *deAuth) { QFile file(tempName); diff --git a/InstructorsAndTrainees/connectorToServer/Core/dataparser.h b/InstructorsAndTrainees/connectorToServer/Core/dataparser.h index d041e85..c0a3406 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/dataparser.h +++ b/InstructorsAndTrainees/connectorToServer/Core/dataparser.h @@ -24,6 +24,7 @@ public: void createAuthMessage(ClientAutorization *auth); void createToClientMessage(ToClientMessage *toClientMessage); void createQueryToDBMessage(ClientQueryToDB *queryToDB, int id = 0, void* data = nullptr); + void createQueryTasksXMLMessage(QString type); void createDeAuthMessage(ClientDeAutorization *deAuth); void createAuthData(ServerAuthorization *serverAuth); void createAuthDataOffline(QString username,QString pass); diff --git a/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp b/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp index d06662a..05adfa5 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp +++ b/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp @@ -3,6 +3,8 @@ #include #include #include "instructor.h" +#include "tasksAmmFim.h" +#include "fimtaskswidget.h" RecognizeSystem::RecognizeSystem(QObject *parent): @@ -276,6 +278,22 @@ void RecognizeSystem::recognize(QTcpSocket *socket) break; }; + //xml-ответы на запросы AdditionalFiles + if(packetType == PacketType::TYPE_XMLANSWER_QUERY_TASKS_XML_FIM || + packetType == PacketType::TYPE_XMLANSWER_QUERY_TASKS_XML_AMM) + { + QByteArray array; + stream.startTransaction(); + stream >> array; + + if(!stream.commitTransaction()) + continue; + + xmlParserQueryTasksXML(packetType, array); + + packetType = PacketType::TYPE_NONE; + } + packetType = PacketType::TYPE_NONE; } } @@ -547,6 +565,19 @@ void RecognizeSystem::xmlParserQueryToDB(PacketType packetType, QByteArray array }; } +void RecognizeSystem::xmlParserQueryTasksXML(PacketType packetType, QByteArray array) +{ + QList listTaskAmmFim; + + //парсинг XML + listTaskAmmFim = FIMtasksWidget::loadTasksAmmFimFromXML(array); + + if(packetType == TYPE_XMLANSWER_QUERY_TASKS_XML_FIM) + emit sigAnswerQueryTasksXML_FIM(listTaskAmmFim); + else if(packetType == TYPE_XMLANSWER_QUERY_TASKS_XML_AMM) + emit sigAnswerQueryTasksXML_AMM(listTaskAmmFim); +} + void RecognizeSystem::checkAccessType(QString type) { if(type == "instructor") diff --git a/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.h b/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.h index b2ece21..a01e22d 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.h +++ b/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.h @@ -11,6 +11,7 @@ #include "trainee.h" #include "group.h" #include "Datas.h" +#include "tasksAmmFim.h" class RecognizeSystem : public QObject @@ -48,6 +49,9 @@ signals: void sigAnswerQueryToDB_ListClassrooms(QList listClassrooms); void sigAnswerQueryToDB_ListTasks(QList listTasks); + void sigAnswerQueryTasksXML_FIM(QList listTaskFim); + void sigAnswerQueryTasksXML_AMM(QList listTaskAmm); + private: QList *folderList; //MainWindow *mainWindow; @@ -63,6 +67,7 @@ private: void xmlParser(QByteArray array); void xmlParserQueryToDB(PacketType packetType, QByteArray array); + void xmlParserQueryTasksXML(PacketType packetType, QByteArray array); void checkAccessType(QString type); }; diff --git a/InstructorsAndTrainees/connectorToServer/Core/tools.h b/InstructorsAndTrainees/connectorToServer/Core/tools.h index 187a466..d64b155 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/tools.h +++ b/InstructorsAndTrainees/connectorToServer/Core/tools.h @@ -40,7 +40,11 @@ enum PacketType{ TYPE_XMLANSWER_QUERY_DB__LIST_TRAINEES = 102, TYPE_XMLANSWER_QUERY_DB__LIST_COMPUTERS = 103, TYPE_XMLANSWER_QUERY_DB__LIST_CLASSROOMS = 104, - TYPE_XMLANSWER_QUERY_DB__LIST_TASKS = 105 + TYPE_XMLANSWER_QUERY_DB__LIST_TASKS = 105, + + //xml-ответы на запросы AdditionalFiles + TYPE_XMLANSWER_QUERY_TASKS_XML_FIM = 130, + TYPE_XMLANSWER_QUERY_TASKS_XML_AMM = 131 }; Q_DECLARE_METATYPE(PacketType) diff --git a/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp b/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp index 4421bc0..de0f798 100644 --- a/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp +++ b/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp @@ -80,11 +80,34 @@ bool ConnectorToServer::sendMessageForClient(int id, QString login, QString text return true; } +bool ConnectorToServer::sendQueryTasksXML(QString type) +{ + if (!client->getIsConnected()) + { + return false; + } + + dataParser->createQueryTasksXMLMessage(type); + emit signal_sendXMLmsgGUItoServer(); + + return true; +} + void ConnectorToServer::SetConnectToServer() { emit sigSetConnect(dataParser->getServerSettings(),connectionThread); } +QList ConnectorToServer::getListTaskFim() +{ + return listTaskFim; +} + +QList ConnectorToServer::getListTaskAmm() +{ + return listTaskAmm; +} + QList ConnectorToServer::getListInstructors() { return listInstructors; @@ -274,6 +297,18 @@ void ConnectorToServer::slot_AnswerQueryToDB_ListTasks(QList listTasks) //emit signal_UpdateDB(false, true); } +void ConnectorToServer::slot_AnswerQueryTasksXML_FIM(QList listTaskFim) +{ + this->listTaskFim = listTaskFim; + emit signal_UpdateTasksFIM(); +} + +void ConnectorToServer::slot_AnswerQueryTasksXML_AMM(QList listTaskAmm) +{ + this->listTaskAmm = listTaskAmm; + emit signal_UpdateTasksAMM(); +} + void ConnectorToServer::slot_msgToClientReady(QString login, QString text) { int id = getIdTraineeByLogin(login); @@ -310,6 +345,9 @@ void ConnectorToServer::bindConnection() connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListClassrooms,this,&ConnectorToServer::slot_AnswerQueryToDB_ListClassrooms); connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListTasks,this,&ConnectorToServer::slot_AnswerQueryToDB_ListTasks); + connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryTasksXML_FIM,this,&ConnectorToServer::slot_AnswerQueryTasksXML_FIM); + connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryTasksXML_AMM,this,&ConnectorToServer::slot_AnswerQueryTasksXML_AMM); + connect(client,&TCPClient::signal_ConnectedToServer,this,&ConnectorToServer::signal_ConnectedToServer); } diff --git a/InstructorsAndTrainees/connectorToServer/connectortoserver.h b/InstructorsAndTrainees/connectorToServer/connectortoserver.h index 77eb228..9f158c7 100644 --- a/InstructorsAndTrainees/connectorToServer/connectortoserver.h +++ b/InstructorsAndTrainees/connectorToServer/connectortoserver.h @@ -25,8 +25,14 @@ public: bool sendQueryToDB(TypeQueryToDB typeQuery, int id = 0, void* data = nullptr); bool sendMessageForClient(int id, QString login, QString text); + bool sendQueryTasksXML(QString type); + void SetConnectToServer(); +public: + QList getListTaskFim(); + QList getListTaskAmm(); + public: //Запросы к БД (локальной) QList getListInstructors(); @@ -61,6 +67,9 @@ public slots: void slot_AnswerQueryToDB_ListClassrooms(QList listClassrooms); void slot_AnswerQueryToDB_ListTasks(QList listTasks); + void slot_AnswerQueryTasksXML_FIM(QList listTaskFim); + void slot_AnswerQueryTasksXML_AMM(QList listTaskAmm); + void slot_msgToClientReady(QString login, QString text); signals: @@ -76,6 +85,9 @@ signals: void signal_UpdateDB(bool treeInstructor, bool treeTrainee); + void signal_UpdateTasksFIM(); + void signal_UpdateTasksAMM(); + void signal_ConnectedToServer(bool state); void signal_InitMessanger(QList listTrainees); @@ -102,6 +114,9 @@ private: QList listComputers; QList listClassrooms; QList listTasks; + + QList listTaskFim; + QList listTaskAmm; }; #endif // CONNECTORTOSERVER_H diff --git a/InstructorsAndTrainees/docTasks/doctaskswidget.cpp b/InstructorsAndTrainees/docTasks/doctaskswidget.cpp index 23a7f65..fe44cb0 100644 --- a/InstructorsAndTrainees/docTasks/doctaskswidget.cpp +++ b/InstructorsAndTrainees/docTasks/doctaskswidget.cpp @@ -62,6 +62,19 @@ void DocTasksWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current, } } +void DocTasksWidget::slot_NeedUpdateUI() +{ + loadTasksAMM(); +} + +void DocTasksWidget::loadTasksAMM() +{ + //Обновление дерева + treeWidget->clear(); + + //TODO собственно обновление дерева +} + void DocTasksWidget::domElementParser(QDomElement element, Module* moduleParent) { QString name; diff --git a/InstructorsAndTrainees/docTasks/doctaskswidget.h b/InstructorsAndTrainees/docTasks/doctaskswidget.h index fc08f04..ed7b690 100644 --- a/InstructorsAndTrainees/docTasks/doctaskswidget.h +++ b/InstructorsAndTrainees/docTasks/doctaskswidget.h @@ -27,6 +27,10 @@ public: private Q_SLOTS: void on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous); +public Q_SLOTS: + //Слот обработки сигнала необходимости обновления интерфейса + void slot_NeedUpdateUI(); + private: void domElementParser(QDomElement element, Module* moduleParent); void loadDocTasksFromXML(); @@ -38,11 +42,14 @@ private: void updateTreeWidget(); void addModuleToTreeWidget(Module* module, QTreeWidgetItem* parentItem = nullptr); + void loadTasksAMM(); + private: Ui::DocTasksWidget *ui; QTreeWidget* treeWidget; QList listAllModules; + }; #endif // DOCTASKSWIDGET_H diff --git a/InstructorsAndTrainees/docTasks/fimtaskswidget.cpp b/InstructorsAndTrainees/docTasks/fimtaskswidget.cpp index 2c3ff25..a726b85 100644 --- a/InstructorsAndTrainees/docTasks/fimtaskswidget.cpp +++ b/InstructorsAndTrainees/docTasks/fimtaskswidget.cpp @@ -6,17 +6,18 @@ #include "ui_fimtaskswidget.h" #include "tasksAmmFim.h" -FIMtasksWidget::FIMtasksWidget(QWidget *parent) : +FIMtasksWidget::FIMtasksWidget(ConnectorToServer* connectorToServer, QWidget *parent) : QWidget(parent), - ui(new Ui::FIMtasksWidget) + ui(new Ui::FIMtasksWidget), + connectorToServer(connectorToServer) { ui->setupUi(this); - loadTasksAmmFimFromXML(); + //loadTasksAmmFimFromXML(); preparationTreeWidget(); - fillTree(); + //fillTree(); } FIMtasksWidget::~FIMtasksWidget() @@ -24,92 +25,86 @@ FIMtasksWidget::~FIMtasksWidget() delete ui; } -void FIMtasksWidget::loadTasksAmmFimFromXML() +QList FIMtasksWidget::loadTasksAmmFimFromXML(QByteArray array) { + QList listTaskAmmFim; + QDomDocument docTasksDOM; - QString xmlFileName = "./tasksFIM.xml"; - QFile xmlInFile(xmlFileName); - if (!xmlInFile.open(QFile::ReadOnly | QFile::Text)) - { - QMessageBox::critical(nullptr, tr("Attention!"), tr("The file could not be opened ") + xmlFileName); - return; - } - else - { - docTasksDOM.setContent(xmlInFile.readAll()); - xmlInFile.close(); - QDomElement RRJTasksElement = docTasksDOM.firstChildElement("RRJTasks"); - if(RRJTasksElement.isNull()) - return; + docTasksDOM.setContent(array); - QDomElement taskElement = RRJTasksElement.firstChildElement(); - if(taskElement.isNull()) - return; + QDomElement RRJTasksElement = docTasksDOM.firstChildElement("RRJTasks"); + if(RRJTasksElement.isNull()) + return listTaskAmmFim; - do - {/*task*/ - QString name = taskElement.nodeName(); - QDomNamedNodeMap nodeMap = taskElement.attributes(); + QDomElement taskElement = RRJTasksElement.firstChildElement(); + if(taskElement.isNull()) + return listTaskAmmFim; - if(name == "task") + do + {/*task*/ + QString name = taskElement.nodeName(); + QDomNamedNodeMap nodeMap = taskElement.attributes(); + + if(name == "task") + { + TaskAmmFim task; + + task.initialize(nodeMap.namedItem("id").nodeValue().toInt(), + nodeMap.namedItem("type").nodeValue(), + nodeMap.namedItem("title").nodeValue(), + nodeMap.namedItem("status").nodeValue(), + nodeMap.namedItem("created").nodeValue(), + nodeMap.namedItem("changed").nodeValue()); + + QDomElement malfunctionElement = taskElement.firstChildElement(); + if(!malfunctionElement.isNull()) { - TaskAmmFim task; + do + {/*malfunction*/ + QString name = malfunctionElement.nodeName(); + QDomNamedNodeMap nodeMap = malfunctionElement.attributes(); - task.initialize(nodeMap.namedItem("id").nodeValue().toInt(), - nodeMap.namedItem("type").nodeValue(), - nodeMap.namedItem("title").nodeValue(), - nodeMap.namedItem("status").nodeValue(), - nodeMap.namedItem("created").nodeValue(), - nodeMap.namedItem("changed").nodeValue()); + if(name == "malfunction") + { + Malfunction malfunction; - QDomElement malfunctionElement = taskElement.firstChildElement(); - if(!malfunctionElement.isNull()) - { - do - {/*malfunction*/ - QString name = malfunctionElement.nodeName(); - QDomNamedNodeMap nodeMap = malfunctionElement.attributes(); + malfunction.initialize(nodeMap.namedItem("dmCode").nodeValue(), + nodeMap.namedItem("num").nodeValue(), + nodeMap.namedItem("description").nodeValue()); - if(name == "malfunction") + QDomElement signElement = malfunctionElement.firstChildElement(); + if(!signElement.isNull()) { - Malfunction malfunction; + do + {/*malfunctionSign*/ + QString name = signElement.nodeName(); + QDomNamedNodeMap nodeMap = signElement.attributes(); - malfunction.initialize(nodeMap.namedItem("dmCode").nodeValue(), - nodeMap.namedItem("num").nodeValue(), - nodeMap.namedItem("description").nodeValue()); + if(name == "malfunctionSign") + { + MalfunctionSign sign; - QDomElement signElement = malfunctionElement.firstChildElement(); - if(!signElement.isNull()) - { - do - {/*malfunctionSign*/ - QString name = signElement.nodeName(); - QDomNamedNodeMap nodeMap = signElement.attributes(); + sign.initialize(nodeMap.namedItem("type").nodeValue().toInt(), + nodeMap.namedItem("description").nodeValue()); - if(name == "malfunctionSign") - { - MalfunctionSign sign; + malfunction.addMalfunctionSign(sign); + } - sign.initialize(nodeMap.namedItem("type").nodeValue().toInt(), - nodeMap.namedItem("description").nodeValue()); - - malfunction.addMalfunctionSign(sign); - } - - }while(! (signElement = signElement.nextSiblingElement()).isNull()); - } - task.addMalfunction(malfunction); + }while(! (signElement = signElement.nextSiblingElement()).isNull()); } - }while(! (malfunctionElement = malfunctionElement.nextSiblingElement()).isNull()); - } - listTaskAmmFim.append(task); + task.addMalfunction(malfunction); + } + }while(! (malfunctionElement = malfunctionElement.nextSiblingElement()).isNull()); } - }while (! (taskElement = taskElement.nextSiblingElement()).isNull()); - } + listTaskAmmFim.append(task); + } + }while (! (taskElement = taskElement.nextSiblingElement()).isNull()); + + return listTaskAmmFim; } -void FIMtasksWidget::fillTree() +void FIMtasksWidget::fillTree(QList listTaskAmmFim) { for(int i = 0; i < listTaskAmmFim.count(); i++) {/*Задачи*/ @@ -172,3 +167,22 @@ void FIMtasksWidget::reSetHeadTreeWidget() QStringList listHeaders = {tr("Title"), tr("ID")}; ui->treeWidget->setHeaderLabels(listHeaders); } + +void FIMtasksWidget::slot_NeedUpdateUI() +{ + loadTasksFIM(); +} + +void FIMtasksWidget::loadTasksFIM() +{ + //Обновление дерева + ui->treeWidget->clear(); + + //собственно обновление дерева + fillTree(connectorToServer->getListTaskFim()); +} + +void FIMtasksWidget::on_btnUpdateTasks_clicked() +{ + connectorToServer->sendQueryTasksXML("fim"); +} diff --git a/InstructorsAndTrainees/docTasks/fimtaskswidget.h b/InstructorsAndTrainees/docTasks/fimtaskswidget.h index 981bc00..a01b6cb 100644 --- a/InstructorsAndTrainees/docTasks/fimtaskswidget.h +++ b/InstructorsAndTrainees/docTasks/fimtaskswidget.h @@ -3,6 +3,7 @@ #include #include "tasksAmmFim.h" +#include "connectortoserver.h" namespace Ui { class FIMtasksWidget; @@ -19,22 +20,34 @@ private: }; public: - explicit FIMtasksWidget(QWidget *parent = nullptr); + explicit FIMtasksWidget(ConnectorToServer* connectorToServer, QWidget *parent = nullptr); ~FIMtasksWidget(); -private: - void loadTasksAmmFimFromXML(); - void fillTree(); +public: + static QList loadTasksAmmFimFromXML(QByteArray array); + +private: + void fillTree(QList listTaskAmmFim); void preparationTreeWidget(); void reSetHeadTreeWidget(); +public Q_SLOTS: + //Слот обработки сигнала необходимости обновления интерфейса + void slot_NeedUpdateUI(); + +private: + void loadTasksFIM(); public: QString userName; - QList listTaskAmmFim; + //QList listTaskAmmFim; + +private slots: + void on_btnUpdateTasks_clicked(); private: Ui::FIMtasksWidget *ui; + ConnectorToServer* connectorToServer; }; #endif // FIMTASKSWIDGET_H diff --git a/InstructorsAndTrainees/docTasks/fimtaskswidget.ui b/InstructorsAndTrainees/docTasks/fimtaskswidget.ui index 70106c9..a2ee50d 100644 --- a/InstructorsAndTrainees/docTasks/fimtaskswidget.ui +++ b/InstructorsAndTrainees/docTasks/fimtaskswidget.ui @@ -22,6 +22,13 @@ FIM + + + + List of tasks + + + @@ -31,12 +38,16 @@ - - - - List of tasks - - + + + + + + ... + + + + diff --git a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp index 8f2feec..d849704 100644 --- a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp +++ b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp @@ -29,6 +29,8 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) : qRegisterMetaType>("QList"); qRegisterMetaType>("QList"); + qRegisterMetaType>("QList"); + connectorToServer = new ConnectorToServer(this); connect(connectorToServer,&ConnectorToServer::sigLoginResult,this,&InstructorsAndTraineesWidget::checkLoginResult); connect(connectorToServer,&ConnectorToServer::sigDeLoginResult,this,&InstructorsAndTraineesWidget::checkDeLoginResult); @@ -55,7 +57,10 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) : docTasksWidget = new DocTasksWidget(this); - fIMtasksWidget = new FIMtasksWidget(this); + fIMtasksWidget = new FIMtasksWidget(connectorToServer, this); + + connect(connectorToServer, &ConnectorToServer::signal_UpdateTasksFIM, fIMtasksWidget, &FIMtasksWidget::slot_NeedUpdateUI); + connect(connectorToServer, &ConnectorToServer::signal_UpdateTasksAMM, docTasksWidget, &DocTasksWidget::slot_NeedUpdateUI); ui->horizontalLayout_3->addWidget(viewerTrainees); ui->horizontalLayout_3->addWidget(messangerWidget); diff --git a/InstructorsAndTrainees/instructorsandtraineeswidget.h b/InstructorsAndTrainees/instructorsandtraineeswidget.h index 4f822da..5f0beaa 100644 --- a/InstructorsAndTrainees/instructorsandtraineeswidget.h +++ b/InstructorsAndTrainees/instructorsandtraineeswidget.h @@ -18,6 +18,8 @@ Q_DECLARE_METATYPE(QList) Q_DECLARE_METATYPE(QList) Q_DECLARE_METATYPE(QList) +Q_DECLARE_METATYPE(QList) + namespace Ui { class InstructorsAndTraineesWidget; } diff --git a/ServerLMS/Data/PacketType.h b/ServerLMS/Data/PacketType.h index 2b54672..1b8c0ea 100644 --- a/ServerLMS/Data/PacketType.h +++ b/ServerLMS/Data/PacketType.h @@ -26,6 +26,10 @@ enum PacketType TYPE_XMLANSWER_QUERY_DB__LIST_CLASSROOMS = 104, TYPE_XMLANSWER_QUERY_DB__LIST_TASKS = 105, + //xml-ответы на запросы AdditionalFiles + TYPE_XMLANSWER_QUERY_TASKS_XML_FIM = 130, + TYPE_XMLANSWER_QUERY_TASKS_XML_AMM = 131, + //ответы по обновлениям HASH_READY = 150, CHANGE_DATA_VERSION = 151, diff --git a/ServerLMS/Data/typesDataServerClient.h b/ServerLMS/Data/typesDataServerClient.h index 32a19ab..3e6e719 100644 --- a/ServerLMS/Data/typesDataServerClient.h +++ b/ServerLMS/Data/typesDataServerClient.h @@ -79,6 +79,12 @@ public: TypeQueryToDB typeQuery; }; +class ClientQueryTasksXML +{ +public: + QString Type; +}; + class ServerMessage { public: diff --git a/ServerLMS/Systems/Parsers/processparser.cpp b/ServerLMS/Systems/Parsers/processparser.cpp index 7a94451..64ee485 100644 --- a/ServerLMS/Systems/Parsers/processparser.cpp +++ b/ServerLMS/Systems/Parsers/processparser.cpp @@ -43,6 +43,11 @@ void ProcessParser::read(ClientHandler *client, QByteArray array) queryToDb(xmlReader,client); } + else if(xmlReader.name() == "QueryTasksXML") + {//Запрос файла XML с задачами + + queryTasksXML(xmlReader,client); + } else if(xmlReader.name() == "ClientMessage") {//Сообщение от клиента @@ -223,6 +228,24 @@ void ProcessParser::queryToDb(QXmlStreamReader &xmlReader,ClientHandler *client) processingSystem->processingClientQueryToDB(client, queryToDB, id, data); } +void ProcessParser::queryTasksXML(QXmlStreamReader &xmlReader, ClientHandler *client) +{ + ClientQueryTasksXML clientQueryTasksXML; + + /*Перебираем все атрибуты тега*/ + foreach(const QXmlStreamAttribute &attr, xmlReader.attributes()) + { + QString name = attr.name().toString(); + QString value = attr.value().toString(); + //addTextToLogger(name + ": " + value); + + if(name == "Type") + clientQueryTasksXML.Type = value; + } + + processingSystem->processingClientQueryTasksXML(client, clientQueryTasksXML); +} + void ProcessParser::clientMessage(QXmlStreamReader &xmlReader,ClientHandler *client) { ClientMessage clientMessage; diff --git a/ServerLMS/Systems/Parsers/processparser.h b/ServerLMS/Systems/Parsers/processparser.h index 41046a1..fc8dc05 100644 --- a/ServerLMS/Systems/Parsers/processparser.h +++ b/ServerLMS/Systems/Parsers/processparser.h @@ -23,6 +23,7 @@ private: void clientDeAuth(QXmlStreamReader &xmlReader,ClientHandler *client); void toClientMessage(QXmlStreamReader &xmlReader,ClientHandler *client); void queryToDb(QXmlStreamReader &xmlReader,ClientHandler *client); + void queryTasksXML(QXmlStreamReader &xmlReader,ClientHandler *client); void clientMessage(QXmlStreamReader &xmlReader,ClientHandler *client); void clientNotify(QXmlStreamReader &xmlReader,ClientHandler *client); }; diff --git a/ServerLMS/Systems/processingsystem.cpp b/ServerLMS/Systems/processingsystem.cpp index ae055ab..552e634 100644 --- a/ServerLMS/Systems/processingsystem.cpp +++ b/ServerLMS/Systems/processingsystem.cpp @@ -2,10 +2,13 @@ #include -ProcessingSystem::ProcessingSystem(ProviderDBLMS* providerDBLMS, QObject *parent): - QObject(parent) +ProcessingSystem::ProcessingSystem(ProviderDBLMS* providerDBLMS, UpdateController* updateController, QObject *parent): + QObject(parent), + providerDBLMS(nullptr), + updateController(nullptr) { this->providerDBLMS = providerDBLMS; + this->updateController = updateController; } void ProcessingSystem::initialize(ServerLMSWidget *server, DataParser *dataParser, CommonClientHandler *commonClientHandler,Logger *logger) @@ -226,6 +229,21 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu //logger->addTextToLogger("To Client: " + str); } +void ProcessingSystem::processingClientQueryTasksXML(ClientHandler *client, ClientQueryTasksXML clientQueryTasksXML) +{ + QByteArray arrayAnswer; + + QString nameFile = ""; + if(clientQueryTasksXML.Type == "fim") + nameFile = tasksFIMfileName; + else if(clientQueryTasksXML.Type == "amm") + nameFile = tasksAMMfileName; + + arrayAnswer = updateController->getAdditionalFile(nameFile); + + client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_XML_FIM); +} + void ProcessingSystem::processingToClientMessage(ClientHandler *client, ToClientMessage toClientMessage) { signal_msgToClientReady(toClientMessage.Login, toClientMessage.Text); diff --git a/ServerLMS/Systems/processingsystem.h b/ServerLMS/Systems/processingsystem.h index 22dc00d..f34b733 100644 --- a/ServerLMS/Systems/processingsystem.h +++ b/ServerLMS/Systems/processingsystem.h @@ -21,12 +21,13 @@ class ProcessingSystem : public QObject { Q_OBJECT public: - explicit ProcessingSystem(ProviderDBLMS* providerDBLMS, QObject *parent = nullptr); + explicit ProcessingSystem(ProviderDBLMS* providerDBLMS, UpdateController* updateController, QObject *parent = nullptr); void initialize(ServerLMSWidget *server,DataParser* dataParser,CommonClientHandler *commonClientServer,Logger *logger); void processingClientAutorization(ClientHandler *client, ClientAutorization clientAutorization); void processingClientDeAutorization(ClientHandler *client, ClientDeAutorization clientDeAutorization); void processingClientQueryToDB(ClientHandler *client, ClientQueryToDB clientQueryToDB, int id = 0, void* data = nullptr); + void processingClientQueryTasksXML(ClientHandler *client, ClientQueryTasksXML clientQueryTasksXML); void processingToClientMessage(ClientHandler *client, ToClientMessage toClientMessage); void processingFromClientMessage(ClientHandler *client, ClientMessage clientMessage); @@ -46,6 +47,7 @@ private: DataParser *dataParser; //InstructorsAndTraineesWidget *pInstructorsAndTrainees; ProviderDBLMS* providerDBLMS; + UpdateController* updateController; }; #endif // PROCESSINGSYSTEM_H diff --git a/ServerLMS/Systems/tools.h b/ServerLMS/Systems/tools.h index f78fff9..acf8c99 100644 --- a/ServerLMS/Systems/tools.h +++ b/ServerLMS/Systems/tools.h @@ -15,6 +15,7 @@ static const QString staticDataFolderName = "StaticData"; static const QString applicationFolderName = "Application"; static const QString sharedDataFolderName = "SharedData"; +static const QString additionalFilesFolderName = "AdditionalFiles"; static const QString streamingAssetsFolderName = "StreamingAssets"; static const QString tempFile = staticDataFolderName + "/save.xml"; static const QString version = staticDataFolderName + "/version.xml"; @@ -22,6 +23,8 @@ static const QString versionListFile = staticDataFolderName + "/versionList.xml" static const QString hashFileName = staticDataFolderName + "/serverHash.xml"; static const QString buildHashName = staticDataFolderName + "/buildHash.xml"; static const QString buildDataPath = "/Application/RRJLoader/RRJ_Data/"; +static const QString tasksAMMfileName = "/tasksAmm.xml"; +static const QString tasksFIMfileName = "/tasksFIM.xml"; static const QString baseNameVersion = "base";//может вынести комманды куда нибудь? diff --git a/ServerLMS/Systems/updatecontroller.cpp b/ServerLMS/Systems/updatecontroller.cpp index 7a548c1..850eee6 100644 --- a/ServerLMS/Systems/updatecontroller.cpp +++ b/ServerLMS/Systems/updatecontroller.cpp @@ -355,6 +355,19 @@ QList* UpdateController::calculateHash(QString path) return files; } +QByteArray UpdateController::getAdditionalFile(QString name) +{ + QString path = Tools::createSharedPath("/" + assetManager->getCurrentVersionData()->getViewName() + "/AdditionalFiles" + name); + QFile addFile(path); + QByteArray array; + if(addFile.open(QIODevice::ReadOnly)){ + array = addFile.readAll(); + addFile.close(); + } + + return array; +} + QByteArray UpdateController::getLocalHash() { QFile hashFile(hashFileName); diff --git a/ServerLMS/Systems/updatecontroller.h b/ServerLMS/Systems/updatecontroller.h index 611ef2f..81232fc 100644 --- a/ServerLMS/Systems/updatecontroller.h +++ b/ServerLMS/Systems/updatecontroller.h @@ -55,6 +55,9 @@ public: void createVersionListXmlAnswer(QList version); void saveVersionToFile(StreamingVersionData *streamingVersion); void xmlFileDataParse(QByteArray array); + + QByteArray getAdditionalFile(QString name); + public slots: void changeAssetVersion(QString versionName); void createCopyVersion(QString versionName,QString newVersionName); diff --git a/ServerLMS/serverlmswidget.cpp b/ServerLMS/serverlmswidget.cpp index f52eb00..f80d79d 100644 --- a/ServerLMS/serverlmswidget.cpp +++ b/ServerLMS/serverlmswidget.cpp @@ -54,14 +54,14 @@ ServerLMSWidget::ServerLMSWidget(QWidget *parent) : assetsManager = new AssetsManager; assetsManager->moveToThread(updateThread); - processingSystem = new ProcessingSystem(providerDBLMS); + updateController = new UpdateController; + updateController->moveToThread(updateThread); + + processingSystem = new ProcessingSystem(providerDBLMS, updateController); processingSystem->moveToThread(updateThread); dataParser = new DataParser(assetsManager,processingSystem); - updateController = new UpdateController; - updateController->moveToThread(updateThread); - commonClientHandler = new CommonClientHandler; loggerThread->start();