#include "connectortoserver.h" #include ConnectorToServer::ConnectorToServer(QWidget* parentWidget, QObject *parent) : QObject(parent), parentWidget(parentWidget), connectionThread(nullptr), client(nullptr), dataParser(nullptr), sendSystem(nullptr), recognizeSystem(nullptr), versionSelectWidget(nullptr), versionContainer(nullptr), notifyController(nullptr) { initialize(); } ConnectorToServer::~ConnectorToServer() { delete client; delete versionSelectWidget; delete notifyController; delete versionContainer; delete recognizeSystem; delete sendSystem; delete dataParser; connectionThread->quit(); connectionThread->wait(); delete connectionThread; } bool ConnectorToServer::authorizationInstructorLocal(QString login, QString password) { if (!client->getIsConnected()) { return false; } ClientAutorization *autorization = new ClientAutorization; autorization->Login = login; autorization->Password = password; autorization->TypeClient = TypeClientAutorization::TYPE_GUI; QByteArray array = dataParser->createAuthMessage(autorization); emit signal_sendXMLmsgGUItoServer(array); return true; } bool ConnectorToServer::deAuthorizationInstructorLocal(QString login) { if (!client->getIsConnected()) { return false; } ClientDeAutorization *deAutorization = new ClientDeAutorization; deAutorization->Login = login; QByteArray array = dataParser->createDeAuthMessage(deAutorization); emit signal_sendXMLmsgGUItoServer(array); return true; } bool ConnectorToServer::sendQueryToDB(TypeQueryToDB typeQuery, int id, void* data) { if (!client->getIsConnected()) { return false; } ClientQueryToDB *queryToDB = new ClientQueryToDB; queryToDB->typeQuery = typeQuery; QByteArray array = dataParser->createQueryToDBMessage(queryToDB, id, data); emit signal_sendXMLmsgGUItoServer(array); return true; } bool ConnectorToServer::sendMessageForClient(int id, QString login, QString text) { if (!client->getIsConnected()) { return false; } ToClientMessage *toClientMessage = new ToClientMessage; toClientMessage->id = id; toClientMessage->Login = login; toClientMessage->Text = text; QByteArray array = dataParser->createToClientMessage(toClientMessage); emit signal_sendXMLmsgGUItoServer(array); return true; } bool ConnectorToServer::sendQueryTasksXML(QString type) { if (!client->getIsConnected()) { return false; } QByteArray array = dataParser->createQueryTasksXMLMessage(type); emit signal_sendXMLmsgGUItoServer(array); return true; } void ConnectorToServer::setLoginName(QString name) { versionSelectWidget->setAuthor(name); } ServerSettings ConnectorToServer::getServerSettings() { return serverSettings; } bool ConnectorToServer::getIsConnected() { return client->getIsConnected(); } void ConnectorToServer::SetConnectToServer() { serverSettings = *dataParser->getServerSettings(); emit sigSetConnect(dataParser->getServerSettings(),connectionThread); } void ConnectorToServer::StopConnectToServer() { emit sigStopConnect(); clearListModelDB(); } QByteArray ConnectorToServer::getListTaskFimArray() { return listTaskFimArray; } QByteArray ConnectorToServer::getListTaskAmmArray() { return listTaskAmmArray; } QList ConnectorToServer::getListInstructors() { return listInstructors; } QList ConnectorToServer::getListTrainees() { return listTrainees; } QList ConnectorToServer::getListGroups() { return listGroups; } QList ConnectorToServer::getListComputers() { return listComputers; } QList ConnectorToServer::getListClassrooms() { return listClassrooms; } QList ConnectorToServer::getListTasksAMMforTrainee(int trainee_id) { if(mapTasksAMM.contains(trainee_id)) return mapTasksAMM.value(trainee_id); else return QList(); } QList ConnectorToServer::getListTasksFIMforTrainee(int trainee_id) { if(mapTasksFIM.contains(trainee_id)) return mapTasksFIM.value(trainee_id); else return QList(); } bool ConnectorToServer::isArchivedInstructor(int id) { for(Instructor instructor : listInstructors) { if(instructor.getID() == id) { if(instructor.getArchived()) return true; else return false; } } return false; } bool ConnectorToServer::isAdminInstructor(int id) { for(Instructor instructor : listInstructors) { if(instructor.getID() == id) { if(instructor.getIsAdmin()) return true; else return false; } } return false; } bool ConnectorToServer::isLoggedInInstructor(int id) { for(Instructor instructor : listInstructors) { if(instructor.getID() == id) { if(instructor.getLoggedIn()) return true; else return false; } } return false; } Instructor ConnectorToServer::getInstructor(int id) { for(Instructor instructor : listInstructors) { if(instructor.getID() == id) return instructor; } return Instructor(); } QList ConnectorToServer::getListTraineesInGroup(int id) { QList list; for(Trainee trainee : listTrainees) { if(trainee.getGroup().getID() == id) list.append(trainee); } return list; } bool ConnectorToServer::isArchivedTrainee(int id) { for(Trainee trainee : listTrainees) { if(trainee.getID() == id) { if(trainee.getArchived()) return true; else return false; } } return false; } bool ConnectorToServer::isLoggedInTrainee(int id) { for(Trainee trainee : listTrainees) { if(trainee.getID() == id) { if(trainee.getLoggedIn()) return true; else return false; } } return false; } Trainee ConnectorToServer::getTrainee(int id) { for(Trainee trainee : listTrainees) { if(trainee.getID() == id) return trainee; } return Trainee(); } Group ConnectorToServer::getGroup(int id) { for(Group group : listGroups) { if(group.getID() == id) return group; } return Group(); } int ConnectorToServer::getIdTraineeByLogin(QString login) { for(Trainee trainee : listTrainees) { if(trainee.getLogin() == login) return trainee.getID(); } return 0; } void ConnectorToServer::showVersionSelect() { QByteArray answer = dataParser->xmlAnswer_notify(cmd_CheckVersionList); emit sigSendAnswerToServer(answer); } void ConnectorToServer::slot_AnswerQueryToDB_ListInstructors(QList listInstructors) { this->listInstructors = listInstructors; emit signal_UpdateDB(true, false); } void ConnectorToServer::slot_AnswerQueryToDB_ListGroups(QList listGroups) { this->listGroups = listGroups; emit signal_UpdateDB(false, true); } void ConnectorToServer::slot_AnswerQueryToDB_ListTrainees(QList listTrainees) { this->listTrainees = listTrainees; emit signal_UpdateDB(false, true); emit signal_InitMessanger(listTrainees); } void ConnectorToServer::slot_AnswerQueryToDB_ListComputers(QList listComputers) { this->listComputers = listComputers; //emit signal_UpdateDB(false, true); //TODO } void ConnectorToServer::slot_AnswerQueryToDB_ListClassrooms(QList listClassrooms) { this->listClassrooms = listClassrooms; //emit signal_UpdateDB(false, true); //TODO } void ConnectorToServer::slot_AnswerQueryToDB_ListTasksAMMforTrainee(QList listTasks, int trainee_id) { //Удаляем старые задачи этого обучаемого mapTasksAMM.remove(trainee_id); //Добавляем новые mapTasksAMM.insert(trainee_id, listTasks); emit signal_UpdateTasksAMMforTrainee(trainee_id); } void ConnectorToServer::slot_AnswerQueryToDB_ListTasksFIMforTrainee(QList listTasks, int trainee_id) { //Удаляем старые задачи этого обучаемого mapTasksFIM.remove(trainee_id); //Добавляем новые mapTasksFIM.insert(trainee_id, listTasks); emit signal_UpdateTasksFIMforTrainee(trainee_id); } void ConnectorToServer::slot_AnswerQueryTasksXML_FIM(QByteArray array) { this->listTaskFimArray = array; emit signal_UpdateTasksFIM(); } void ConnectorToServer::slot_AnswerQueryTasksXML_AMM(QByteArray array) { this->listTaskAmmArray = array; emit signal_UpdateTasksAMM(); } void ConnectorToServer::slot_msgToClientReady(QString login, QString text) { int id = getIdTraineeByLogin(login); if(id) sendMessageForClient(id, login, text); } void ConnectorToServer::showServerList(QList *serverList) { versionSelectWidget->fillView(serverList); } void ConnectorToServer::slot_HashReady() { //sendQueryTasksXML("fim"); sendQueryTasksXML("amm"); } void ConnectorToServer::initialize() { createObjects(); bindConnection(); emit sigInitializeClient(recognizeSystem,sendSystem,connectionThread); SetConnectToServer(); } void ConnectorToServer::bindConnection() { connect(this,&ConnectorToServer::sigInitializeClient,client,&TCPClient::initialize,Qt::AutoConnection); connect(this,&ConnectorToServer::sigSetConnect,client,&TCPClient::setConnect,Qt::AutoConnection); connect(this,&ConnectorToServer::sigStopConnect,client,&TCPClient::setDisconnect,Qt::AutoConnection); connect(this,&ConnectorToServer::signal_sendXMLmsgGUItoServer,sendSystem,&SendSystem::sendXMLmsgGUItoServer); connect(this,&ConnectorToServer::sigSendAnswerToServer,sendSystem,&SendSystem::sendXMLAnswer,Qt::AutoConnection); connect(recognizeSystem,&RecognizeSystem::sigAuth,this,&ConnectorToServer::sigLoginResult); connect(recognizeSystem,&RecognizeSystem::sigDeAuth,this,&ConnectorToServer::sigDeLoginResult); connect(recognizeSystem,&RecognizeSystem::signal_MessageForGUI,this,&ConnectorToServer::signal_msgFromClientReady); connect(recognizeSystem,&RecognizeSystem::sigShowServerDataList,this,&ConnectorToServer::showServerList); connect (recognizeSystem,&RecognizeSystem::sigSetVersion,versionContainer,&VersionContainer::setServerVersionData); //connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB,this,&ConnectorToServer::slot_AnswerQueryToDB); connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListInstructors,this,&ConnectorToServer::slot_AnswerQueryToDB_ListInstructors); connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListGroups,this,&ConnectorToServer::slot_AnswerQueryToDB_ListGroups); connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListTrainees,this,&ConnectorToServer::slot_AnswerQueryToDB_ListTrainees); connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListComputers,this,&ConnectorToServer::slot_AnswerQueryToDB_ListComputers); connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListClassrooms,this,&ConnectorToServer::slot_AnswerQueryToDB_ListClassrooms); connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListTasksAMMforTrainee,this,&ConnectorToServer::slot_AnswerQueryToDB_ListTasksAMMforTrainee); connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListTasksFIMforTrainee,this,&ConnectorToServer::slot_AnswerQueryToDB_ListTasksFIMforTrainee); 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,Qt::AutoConnection); connect(recognizeSystem,&RecognizeSystem::sigNotify,notifyController,&NotifyController::showWarning,Qt::AutoConnection); connect(recognizeSystem,&RecognizeSystem::sigHashReady,this,&ConnectorToServer::slot_HashReady); } void ConnectorToServer::createObjects() { connectionThread = new QThread; client = new TCPClient; client->moveToThread(connectionThread); dataParser = new DataParser; sendSystem = new SendSystem; sendSystem->moveToThread(connectionThread); recognizeSystem = new RecognizeSystem; recognizeSystem->moveToThread(connectionThread); notifyController = new NotifyController; versionContainer = new VersionContainer; versionSelectWidget = new VersionSelectWidget(parentWidget); versionSelectWidget->initialize(sendSystem,versionContainer,notifyController, recognizeSystem); connectionThread->start(); connectionThread->setPriority(QThread::HighestPriority); } void ConnectorToServer::clearListModelDB() { listInstructors.clear(); listGroups.clear(); listTrainees.clear(); listComputers.clear(); listClassrooms.clear(); mapTasksAMM.clear(); mapTasksFIM.clear(); listTaskFimArray.clear(); listTaskAmmArray.clear(); }