diff --git a/InstructorsAndTrainees/connectorToServer/Core/tcpclient.cpp b/InstructorsAndTrainees/connectorToServer/Core/tcpclient.cpp index 750e90c..86b9151 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/tcpclient.cpp +++ b/InstructorsAndTrainees/connectorToServer/Core/tcpclient.cpp @@ -56,7 +56,13 @@ void TCPClient::setConnect(ServerSettings *serverSettings) void TCPClient::setDisconnect() { + QDataStream stream(socket); + stream.setVersion(QDataStream::Qt_DefaultCompiledVersion); + stream << PacketType::TYPE_DISABLE; + + socket->disconnect(); + isConnected = false; emit sigServerDisconnect(); emit sigSendDebugLog("Server disabled"); diff --git a/InstructorsAndTrainees/connectorToServer/Core/tcpclient.h b/InstructorsAndTrainees/connectorToServer/Core/tcpclient.h index 12cb766..4c0b790 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/tcpclient.h +++ b/InstructorsAndTrainees/connectorToServer/Core/tcpclient.h @@ -26,6 +26,7 @@ public: explicit TCPClient(QObject *parent = 0); void initialize(RecognizeSystem *recognize,SendSystem *sendSystem); void setConnect(ServerSettings *serverSettings); + void setDisconnect(); void waitRead(int time); QTcpSocket* getSocket(); @@ -54,9 +55,7 @@ private: SendSystem *sendSystem; QTcpSocket *socket; RecognizeSystem *recognizeSystem; - bool isConnected; - - void setDisconnect(); + bool isConnected; }; #endif // TCPCLIENT_H diff --git a/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp b/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp index 9d43a29..4ebaa11 100644 --- a/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp +++ b/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp @@ -119,6 +119,12 @@ void ConnectorToServer::SetConnectToServer() emit sigSetConnect(dataParser->getServerSettings(),connectionThread); } +void ConnectorToServer::StopConnectToServer() +{ + emit sigStopConnect(); + clearListModelDB(); +} + QByteArray ConnectorToServer::getListTaskFimArray() { return listTaskFimArray; @@ -287,17 +293,6 @@ void ConnectorToServer::showVersionSelect() emit sigSendAnswerToServer(answer); } -/* -void ConnectorToServer::slot_AnswerQueryToDB(QList* listInstructors, - QList* listTrainees, - QList* listGroups) -{ - this->listInstructors = *listInstructors; - this->listTrainees = *listTrainees; - this->listGroups = *listGroups; - emit signal_UpdateDB(true, true); -}*/ - void ConnectorToServer::slot_AnswerQueryToDB_ListInstructors(QList listInstructors) { this->listInstructors = listInstructors; @@ -320,13 +315,13 @@ void ConnectorToServer::slot_AnswerQueryToDB_ListTrainees(QList listTra void ConnectorToServer::slot_AnswerQueryToDB_ListComputers(QList listComputers) { this->listComputers = listComputers; - //emit signal_UpdateDB(false, true); + //emit signal_UpdateDB(false, true); //TODO } void ConnectorToServer::slot_AnswerQueryToDB_ListClassrooms(QList listClassrooms) { this->listClassrooms = listClassrooms; - //emit signal_UpdateDB(false, true); + //emit signal_UpdateDB(false, true); //TODO } void ConnectorToServer::slot_AnswerQueryToDB_ListTasksAMMforTrainee(QList listTasks, int trainee_id) @@ -384,11 +379,6 @@ void ConnectorToServer::initialize() emit sigInitializeClient(recognizeSystem,sendSystem,connectionThread); SetConnectToServer(); - //emit sigSetConnect(dataParser->getServerSettings(),connectionThread); - -// QByteArray answer = dataParser->xmlAnswer_notify() -// sendSystem->sendXMLAnswer() - } void ConnectorToServer::activateLoadAnimation(bool flag) @@ -407,6 +397,8 @@ 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); @@ -466,3 +458,17 @@ void ConnectorToServer::createObjects() 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(); +} diff --git a/InstructorsAndTrainees/connectorToServer/connectortoserver.h b/InstructorsAndTrainees/connectorToServer/connectortoserver.h index 400eafe..cc56f92 100644 --- a/InstructorsAndTrainees/connectorToServer/connectortoserver.h +++ b/InstructorsAndTrainees/connectorToServer/connectortoserver.h @@ -32,6 +32,7 @@ public: bool sendQueryTasksXML(QString type); void SetConnectToServer(); + void StopConnectToServer(); public: QByteArray getListTaskFimArray(); @@ -66,11 +67,8 @@ public: ServerSettings getServerSettings(); bool getIsConnected(); -public slots: - /*void slot_AnswerQueryToDB(QList* listInstructors, - QList* listTrainees, - QList* listGroups);*/ +public slots: void slot_AnswerQueryToDB_ListInstructors(QList listInstructors); void slot_AnswerQueryToDB_ListGroups(QList listGroups); void slot_AnswerQueryToDB_ListTrainees(QList listTrainees); @@ -87,6 +85,7 @@ public slots: signals: void sigSetConnect(ServerSettings* serverSettings,QThread *thread); + void sigStopConnect(); void sigInitializeClient(RecognizeSystem *recognizeSystem, SendSystem *sendSystem, QThread *thread); @@ -116,6 +115,9 @@ private: void bindConnection(); void createObjects(); + //Очистка списочной модели БД СУО + void clearListModelDB(); + private: QWidget* parentWidget; QThread *connectionThread; diff --git a/InstructorsAndTrainees/dialogsettings.cpp b/InstructorsAndTrainees/dialogsettings.cpp index f676228..63574e8 100644 --- a/InstructorsAndTrainees/dialogsettings.cpp +++ b/InstructorsAndTrainees/dialogsettings.cpp @@ -9,7 +9,8 @@ DialogSettings::DialogSettings(ConnectorToServer* connectorToServer, bool instru QDialog(parent), ui(new Ui::DialogSettings), settings(nullptr), - connectorToServer(nullptr) + connectorToServer(nullptr), + flSettingsServerChanged(false) { ui->setupUi(this); ui->btnUpdateStyle->setObjectName("btnUpdateStyle"); @@ -41,7 +42,7 @@ DialogSettings::DialogSettings(ConnectorToServer* connectorToServer, bool instru //Задаём два пункта с текстом локалей в комбобоксе ui->cmbLanguage->addItems(QStringList() << "English" << "Русский"); - if(loadSettings()) + if(loadSettings(settings)) { if(settings->Language == "ENG") ui->cmbLanguage->setCurrentText("English"); @@ -57,9 +58,11 @@ DialogSettings::DialogSettings(ConnectorToServer* connectorToServer, bool instru if(connectorToServer) if(connectorToServer->getIsConnected()) { + /* ui->editAddress->setEnabled(false); ui->editPort->setEnabled(false); ui->checkAutoStart->setEnabled(false); + */ if(instructorIsLogged) ui->btnSetVersion->setEnabled(true); @@ -68,11 +71,16 @@ DialogSettings::DialogSettings(ConnectorToServer* connectorToServer, bool instru ui->label_AutoStart->setVisible(false); ui->checkAutoStart->setVisible(false); + ui->btnSave->setEnabled(false); + flSettingsServerChanged = false; + + /* if(settings->Language == "ENG") qtLanguageTranslator.load(QString("translations/InstructorsAndTraineesWidget_") + "en_EN", "."); else qtLanguageTranslator.load(QString("translations/InstructorsAndTraineesWidget_") + "ru_RU", "."); qApp->installTranslator(&qtLanguageTranslator); + */ } DialogSettings::~DialogSettings() @@ -105,7 +113,7 @@ void DialogSettings::on_btnUpdateStyle_clicked() emit signal_UpdateStyleSheet(); } -bool DialogSettings::loadSettings() +bool DialogSettings::loadSettings(ServerSettings *settings) { QFile file(settingsName); if(! file.open(QIODevice::ReadOnly)) @@ -199,6 +207,7 @@ void DialogSettings::on_btnSave_clicked() saveSettings(); + /* QString language; if(settings->Language == "ENG") @@ -207,21 +216,12 @@ void DialogSettings::on_btnSave_clicked() language = QString("ru_RU"); emit signal_LanguageChanged(language); + */ - this->close(); + this->accept(); } -void DialogSettings::on_DialogSettings_rejected() -{ - QString language; - if(settings->Language == "ENG") - language = QString("en_EN"); - else - language = QString("ru_RU"); - - emit signal_LanguageChanged(language); -} void DialogSettings::on_btnSetVersion_clicked() { @@ -229,3 +229,37 @@ void DialogSettings::on_btnSetVersion_clicked() if(connectorToServer->getIsConnected()) connectorToServer->showVersionSelect(); } + +void DialogSettings::on_cmbLanguage_currentIndexChanged(int index) +{ + ui->btnSave->setEnabled(true); +} + +void DialogSettings::on_editAddress_textChanged(const QString &arg1) +{ + ui->btnSave->setEnabled(true); + flSettingsServerChanged = true; +} + +void DialogSettings::on_editPort_textChanged(const QString &arg1) +{ + ui->btnSave->setEnabled(true); + flSettingsServerChanged = true; +} + +void DialogSettings::on_DialogSettings_rejected() +{ + +} + +void DialogSettings::on_DialogSettings_accepted() +{ + QString language; + + if(settings->Language == "ENG") + language = QString("en_EN"); + else + language = QString("ru_RU"); + + emit signal_LanguageChanged(language); +} diff --git a/InstructorsAndTrainees/dialogsettings.h b/InstructorsAndTrainees/dialogsettings.h index c9a5280..dad39cd 100644 --- a/InstructorsAndTrainees/dialogsettings.h +++ b/InstructorsAndTrainees/dialogsettings.h @@ -21,6 +21,10 @@ public: ServerSettings getSettings(); + bool settingsServerIsChanged(){ return flSettingsServerChanged;} + + static bool loadSettings(ServerSettings *settings); + protected: void changeEvent(QEvent * event) override; @@ -40,8 +44,15 @@ private slots: void on_btnSetVersion_clicked(); -private: - bool loadSettings(); + void on_cmbLanguage_currentIndexChanged(int index); + + void on_editAddress_textChanged(const QString &arg1); + + void on_editPort_textChanged(const QString &arg1); + + void on_DialogSettings_accepted(); + +private: bool saveSettings(); private: @@ -50,6 +61,8 @@ private: ServerSettings *settings; ConnectorToServer* connectorToServer; + + bool flSettingsServerChanged; }; #endif // DIALOGSETTINGS_H diff --git a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp index fd66901..e706985 100644 --- a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp +++ b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp @@ -45,7 +45,7 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) : updateMyStyleSheet(); - on_btnSettings_clicked(); + setLanguageInterfase(); connectorToServer = new ConnectorToServer(this); connect(connectorToServer,&ConnectorToServer::sigLoginResult,this,&InstructorsAndTraineesWidget::checkLoginResult); @@ -93,46 +93,6 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) : ui->verticalLayout_Instructors->addWidget(viewerInstructors); - - - /* - - QWidget* wGB2 = new QWidget(this); - QHBoxLayout* lGB2 = new QHBoxLayout(this); - wGB2->setLayout(lGB2); - lGB2->addWidget(ui->groupBox_Tasks); - ui->horizontalLayout_3->addWidget(wGB2); - - ui->verticalLayout_41->addWidget(ammTasksWidget); - ui->verticalLayout_42->addWidget(fimTasksWidget); - - ui->verticalLayout_2->addWidget(messangerWidget); - - ui->verticalLayout_2->addWidget(viewerInstructors); - */ - - - //viewerTrainees->setMinimumSize(900, 500); - //viewerTrainees->setMaximumWidth(1050); - - - /*wGB2->setMinimumSize(500, 500);*/ - //wGB2->setMaximumWidth(1050); - - //ammTasksWidget->setMinimumSize(1000, 500); - //ammTasksWidget->setMaximumWidth(2000); - //fimTasksWidget->setMinimumSize(1000, 500); - //fimTasksWidget->setMaximumWidth(2000); - //ui->tabWidget_Tasks->setMaximumWidth(2000); - //ui->groupBox_Tasks->setMaximumWidth(2000); - - //viewerInstructors->setMinimumSize(450, 400); - //viewerInstructors->setMaximumWidth(500); - //viewerInstructors->setMaximumHeight(400); - - //messangerWidget->setMinimumSize(450, 700); - //messangerWidget->setMaximumWidth(500); - ui->groupBox_Messenger->setMaximumWidth(500); ui->groupBox_Instructors->setMaximumWidth(500); @@ -176,20 +136,6 @@ void InstructorsAndTraineesWidget::changeEvent(QEvent *event) {// переведём окно заново ui->retranslateUi(this); - /* - if(ui->btnAuthorizationInstructor->isChecked()) - ui->btnAuthorizationInstructor->setText(tr("Deauthorization Instructor")); - else - ui->btnAuthorizationInstructor->setText(tr("Authorization Instructor")); - */ - - /* - if(ui->btnConnectionToDB->isChecked()) - ui->btnConnectionToDB->setText(tr("Disconnection DB")); - else - ui->btnConnectionToDB->setText(tr("Connection DB")); - */ - updateLabelLoggedInInstructor(loginInstructorLoggedInLocal, nameInstructorLoggedInLocal); updateLabelServer(); } @@ -320,8 +266,11 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state) ui->lblDBisConnected->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGreen.png"))); - ServerSettings serverSettings = connectorToServer->getServerSettings(); - ui->lblServer->setText(serverSettings.Address + ":" +serverSettings.Port); + //ServerSettings serverSettings = connectorToServer->getServerSettings(); + //ui->lblServer->setText(serverSettings.Address + ":" +serverSettings.Port); + + updateLabelLoggedInInstructor(loginInstructorLoggedInLocal, nameInstructorLoggedInLocal); + updateLabelServer(); } else {//Сервер отключен @@ -331,7 +280,7 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state) ui->btnAuthorizationInstructor->setChecked(false); //ui->btnSetVersion->hide(); ui->lblDBisConnected->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGray.png"))); - ui->lblServer->setText(tr("none")); + //ui->lblServer->setText(tr("none")); viewerInstructors->setAuthComplited(false); viewerTrainees->setAuthComplited(false); @@ -347,8 +296,14 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state) messangerWidget->clear(); + loginInstructorLoggedInLocal = ""; + nameInstructorLoggedInLocal = ""; + + updateLabelLoggedInInstructor(loginInstructorLoggedInLocal, nameInstructorLoggedInLocal); + updateLabelServer(); + QMessageBox::warning(this, tr("Warning!"), tr("The server is disabled")); - } + } } bool InstructorsAndTraineesWidget::authorizationInstructorDialog(QWidget* parent) @@ -470,6 +425,18 @@ void InstructorsAndTraineesWidget::updateLabelServer() ui->lblServer->setText(tr("none")); } +void InstructorsAndTraineesWidget::setLanguageInterfase() +{ + ServerSettings settings; + DialogSettings::loadSettings(&settings); + + if(settings.Language == "ENG") + qtLanguageTranslator.load(QString("translations/InstructorsAndTraineesWidget_") + "en_EN", "."); + else + qtLanguageTranslator.load(QString("translations/InstructorsAndTraineesWidget_") + "ru_RU", "."); + qApp->installTranslator(&qtLanguageTranslator); +} + void InstructorsAndTraineesWidget::on_btnSetVersion_clicked() { connectorToServer->showVersionSelect(); @@ -488,15 +455,24 @@ void InstructorsAndTraineesWidget::on_btnSettings_clicked() case QDialog::Accepted: { language = dlg.getSettings().Language; + + if(dlg.settingsServerIsChanged()) + { + QMessageBox::warning(this, tr("Attention!"), tr("Server settings have been changed. Please reconnect to the server.")); + + if(authorizationIsCompleted()) + deAuthorizationInstructor(loginInstructorLoggedInLocal); + + connectorToServer->StopConnectToServer(); + } + break; } case QDialog::Rejected: break; default: break; - } - - language = dlg.getSettings().Language; + } } void InstructorsAndTraineesWidget::on_btnEditorTrainees_clicked() diff --git a/InstructorsAndTrainees/instructorsandtraineeswidget.h b/InstructorsAndTrainees/instructorsandtraineeswidget.h index 8b1eab9..e32bd63 100644 --- a/InstructorsAndTrainees/instructorsandtraineeswidget.h +++ b/InstructorsAndTrainees/instructorsandtraineeswidget.h @@ -85,6 +85,8 @@ private: void updateLabelLoggedInInstructor(QString login, QString name); void updateLabelServer(); + void setLanguageInterfase(); + private: Ui::InstructorsAndTraineesWidget *ui; diff --git a/ServerLMS/Systems/recognizesystem.cpp b/ServerLMS/Systems/recognizesystem.cpp index f77b1df..a864676 100644 --- a/ServerLMS/Systems/recognizesystem.cpp +++ b/ServerLMS/Systems/recognizesystem.cpp @@ -433,6 +433,11 @@ void RecognizeSystem::recognize() } + if(packetType == PacketType::TYPE_DISABLE) + { + clientHandler->sendDisable(); + } + packetType = PacketType::TYPE_NONE; }