Корректное переподключение к серверу

This commit is contained in:
2025-07-03 09:48:22 +03:00
parent 67cc236b70
commit c46ae86791
9 changed files with 146 additions and 103 deletions

View File

@@ -56,7 +56,13 @@ void TCPClient::setConnect(ServerSettings *serverSettings)
void TCPClient::setDisconnect() void TCPClient::setDisconnect()
{ {
QDataStream stream(socket);
stream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
stream << PacketType::TYPE_DISABLE;
socket->disconnect(); socket->disconnect();
isConnected = false; isConnected = false;
emit sigServerDisconnect(); emit sigServerDisconnect();
emit sigSendDebugLog("Server disabled"); emit sigSendDebugLog("Server disabled");

View File

@@ -26,6 +26,7 @@ public:
explicit TCPClient(QObject *parent = 0); explicit TCPClient(QObject *parent = 0);
void initialize(RecognizeSystem *recognize,SendSystem *sendSystem); void initialize(RecognizeSystem *recognize,SendSystem *sendSystem);
void setConnect(ServerSettings *serverSettings); void setConnect(ServerSettings *serverSettings);
void setDisconnect();
void waitRead(int time); void waitRead(int time);
QTcpSocket* getSocket(); QTcpSocket* getSocket();
@@ -55,8 +56,6 @@ private:
QTcpSocket *socket; QTcpSocket *socket;
RecognizeSystem *recognizeSystem; RecognizeSystem *recognizeSystem;
bool isConnected; bool isConnected;
void setDisconnect();
}; };
#endif // TCPCLIENT_H #endif // TCPCLIENT_H

View File

@@ -119,6 +119,12 @@ void ConnectorToServer::SetConnectToServer()
emit sigSetConnect(dataParser->getServerSettings(),connectionThread); emit sigSetConnect(dataParser->getServerSettings(),connectionThread);
} }
void ConnectorToServer::StopConnectToServer()
{
emit sigStopConnect();
clearListModelDB();
}
QByteArray ConnectorToServer::getListTaskFimArray() QByteArray ConnectorToServer::getListTaskFimArray()
{ {
return listTaskFimArray; return listTaskFimArray;
@@ -287,17 +293,6 @@ void ConnectorToServer::showVersionSelect()
emit sigSendAnswerToServer(answer); emit sigSendAnswerToServer(answer);
} }
/*
void ConnectorToServer::slot_AnswerQueryToDB(QList<Instructor>* listInstructors,
QList<Trainee>* listTrainees,
QList<Group>* listGroups)
{
this->listInstructors = *listInstructors;
this->listTrainees = *listTrainees;
this->listGroups = *listGroups;
emit signal_UpdateDB(true, true);
}*/
void ConnectorToServer::slot_AnswerQueryToDB_ListInstructors(QList<Instructor> listInstructors) void ConnectorToServer::slot_AnswerQueryToDB_ListInstructors(QList<Instructor> listInstructors)
{ {
this->listInstructors = listInstructors; this->listInstructors = listInstructors;
@@ -320,13 +315,13 @@ void ConnectorToServer::slot_AnswerQueryToDB_ListTrainees(QList<Trainee> listTra
void ConnectorToServer::slot_AnswerQueryToDB_ListComputers(QList<Computer> listComputers) void ConnectorToServer::slot_AnswerQueryToDB_ListComputers(QList<Computer> listComputers)
{ {
this->listComputers = listComputers; this->listComputers = listComputers;
//emit signal_UpdateDB(false, true); //emit signal_UpdateDB(false, true); //TODO
} }
void ConnectorToServer::slot_AnswerQueryToDB_ListClassrooms(QList<Classroom> listClassrooms) void ConnectorToServer::slot_AnswerQueryToDB_ListClassrooms(QList<Classroom> listClassrooms)
{ {
this->listClassrooms = listClassrooms; this->listClassrooms = listClassrooms;
//emit signal_UpdateDB(false, true); //emit signal_UpdateDB(false, true); //TODO
} }
void ConnectorToServer::slot_AnswerQueryToDB_ListTasksAMMforTrainee(QList<TaskAmmFim> listTasks, int trainee_id) void ConnectorToServer::slot_AnswerQueryToDB_ListTasksAMMforTrainee(QList<TaskAmmFim> listTasks, int trainee_id)
@@ -384,11 +379,6 @@ void ConnectorToServer::initialize()
emit sigInitializeClient(recognizeSystem,sendSystem,connectionThread); emit sigInitializeClient(recognizeSystem,sendSystem,connectionThread);
SetConnectToServer(); SetConnectToServer();
//emit sigSetConnect(dataParser->getServerSettings(),connectionThread);
// QByteArray answer = dataParser->xmlAnswer_notify()
// sendSystem->sendXMLAnswer()
} }
void ConnectorToServer::activateLoadAnimation(bool flag) void ConnectorToServer::activateLoadAnimation(bool flag)
@@ -407,6 +397,8 @@ void ConnectorToServer::bindConnection()
{ {
connect(this,&ConnectorToServer::sigInitializeClient,client,&TCPClient::initialize,Qt::AutoConnection); connect(this,&ConnectorToServer::sigInitializeClient,client,&TCPClient::initialize,Qt::AutoConnection);
connect(this,&ConnectorToServer::sigSetConnect,client,&TCPClient::setConnect,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::signal_sendXMLmsgGUItoServer,sendSystem,&SendSystem::sendXMLmsgGUItoServer);
connect(this,&ConnectorToServer::sigSendAnswerToServer,sendSystem,&SendSystem::sendXMLAnswer,Qt::AutoConnection); connect(this,&ConnectorToServer::sigSendAnswerToServer,sendSystem,&SendSystem::sendXMLAnswer,Qt::AutoConnection);
@@ -466,3 +458,17 @@ void ConnectorToServer::createObjects()
connectionThread->start(); connectionThread->start();
connectionThread->setPriority(QThread::HighestPriority); 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();
}

View File

@@ -32,6 +32,7 @@ public:
bool sendQueryTasksXML(QString type); bool sendQueryTasksXML(QString type);
void SetConnectToServer(); void SetConnectToServer();
void StopConnectToServer();
public: public:
QByteArray getListTaskFimArray(); QByteArray getListTaskFimArray();
@@ -66,11 +67,8 @@ public:
ServerSettings getServerSettings(); ServerSettings getServerSettings();
bool getIsConnected(); bool getIsConnected();
public slots:
/*void slot_AnswerQueryToDB(QList<Instructor>* listInstructors,
QList<Trainee>* listTrainees,
QList<Group>* listGroups);*/
public slots:
void slot_AnswerQueryToDB_ListInstructors(QList<Instructor> listInstructors); void slot_AnswerQueryToDB_ListInstructors(QList<Instructor> listInstructors);
void slot_AnswerQueryToDB_ListGroups(QList<Group> listGroups); void slot_AnswerQueryToDB_ListGroups(QList<Group> listGroups);
void slot_AnswerQueryToDB_ListTrainees(QList<Trainee> listTrainees); void slot_AnswerQueryToDB_ListTrainees(QList<Trainee> listTrainees);
@@ -87,6 +85,7 @@ public slots:
signals: signals:
void sigSetConnect(ServerSettings* serverSettings,QThread *thread); void sigSetConnect(ServerSettings* serverSettings,QThread *thread);
void sigStopConnect();
void sigInitializeClient(RecognizeSystem *recognizeSystem, void sigInitializeClient(RecognizeSystem *recognizeSystem,
SendSystem *sendSystem, SendSystem *sendSystem,
QThread *thread); QThread *thread);
@@ -116,6 +115,9 @@ private:
void bindConnection(); void bindConnection();
void createObjects(); void createObjects();
//Очистка списочной модели БД СУО
void clearListModelDB();
private: private:
QWidget* parentWidget; QWidget* parentWidget;
QThread *connectionThread; QThread *connectionThread;

View File

@@ -9,7 +9,8 @@ DialogSettings::DialogSettings(ConnectorToServer* connectorToServer, bool instru
QDialog(parent), QDialog(parent),
ui(new Ui::DialogSettings), ui(new Ui::DialogSettings),
settings(nullptr), settings(nullptr),
connectorToServer(nullptr) connectorToServer(nullptr),
flSettingsServerChanged(false)
{ {
ui->setupUi(this); ui->setupUi(this);
ui->btnUpdateStyle->setObjectName("btnUpdateStyle"); ui->btnUpdateStyle->setObjectName("btnUpdateStyle");
@@ -41,7 +42,7 @@ DialogSettings::DialogSettings(ConnectorToServer* connectorToServer, bool instru
//Задаём два пункта с текстом локалей в комбобоксе //Задаём два пункта с текстом локалей в комбобоксе
ui->cmbLanguage->addItems(QStringList() << "English" << "Русский"); ui->cmbLanguage->addItems(QStringList() << "English" << "Русский");
if(loadSettings()) if(loadSettings(settings))
{ {
if(settings->Language == "ENG") if(settings->Language == "ENG")
ui->cmbLanguage->setCurrentText("English"); ui->cmbLanguage->setCurrentText("English");
@@ -57,9 +58,11 @@ DialogSettings::DialogSettings(ConnectorToServer* connectorToServer, bool instru
if(connectorToServer) if(connectorToServer)
if(connectorToServer->getIsConnected()) if(connectorToServer->getIsConnected())
{ {
/*
ui->editAddress->setEnabled(false); ui->editAddress->setEnabled(false);
ui->editPort->setEnabled(false); ui->editPort->setEnabled(false);
ui->checkAutoStart->setEnabled(false); ui->checkAutoStart->setEnabled(false);
*/
if(instructorIsLogged) if(instructorIsLogged)
ui->btnSetVersion->setEnabled(true); ui->btnSetVersion->setEnabled(true);
@@ -68,11 +71,16 @@ DialogSettings::DialogSettings(ConnectorToServer* connectorToServer, bool instru
ui->label_AutoStart->setVisible(false); ui->label_AutoStart->setVisible(false);
ui->checkAutoStart->setVisible(false); ui->checkAutoStart->setVisible(false);
ui->btnSave->setEnabled(false);
flSettingsServerChanged = false;
/*
if(settings->Language == "ENG") if(settings->Language == "ENG")
qtLanguageTranslator.load(QString("translations/InstructorsAndTraineesWidget_") + "en_EN", "."); qtLanguageTranslator.load(QString("translations/InstructorsAndTraineesWidget_") + "en_EN", ".");
else else
qtLanguageTranslator.load(QString("translations/InstructorsAndTraineesWidget_") + "ru_RU", "."); qtLanguageTranslator.load(QString("translations/InstructorsAndTraineesWidget_") + "ru_RU", ".");
qApp->installTranslator(&qtLanguageTranslator); qApp->installTranslator(&qtLanguageTranslator);
*/
} }
DialogSettings::~DialogSettings() DialogSettings::~DialogSettings()
@@ -105,7 +113,7 @@ void DialogSettings::on_btnUpdateStyle_clicked()
emit signal_UpdateStyleSheet(); emit signal_UpdateStyleSheet();
} }
bool DialogSettings::loadSettings() bool DialogSettings::loadSettings(ServerSettings *settings)
{ {
QFile file(settingsName); QFile file(settingsName);
if(! file.open(QIODevice::ReadOnly)) if(! file.open(QIODevice::ReadOnly))
@@ -199,6 +207,7 @@ void DialogSettings::on_btnSave_clicked()
saveSettings(); saveSettings();
/*
QString language; QString language;
if(settings->Language == "ENG") if(settings->Language == "ENG")
@@ -207,21 +216,12 @@ void DialogSettings::on_btnSave_clicked()
language = QString("ru_RU"); language = QString("ru_RU");
emit signal_LanguageChanged(language); 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() void DialogSettings::on_btnSetVersion_clicked()
{ {
@@ -229,3 +229,37 @@ void DialogSettings::on_btnSetVersion_clicked()
if(connectorToServer->getIsConnected()) if(connectorToServer->getIsConnected())
connectorToServer->showVersionSelect(); 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);
}

View File

@@ -21,6 +21,10 @@ public:
ServerSettings getSettings(); ServerSettings getSettings();
bool settingsServerIsChanged(){ return flSettingsServerChanged;}
static bool loadSettings(ServerSettings *settings);
protected: protected:
void changeEvent(QEvent * event) override; void changeEvent(QEvent * event) override;
@@ -40,8 +44,15 @@ private slots:
void on_btnSetVersion_clicked(); void on_btnSetVersion_clicked();
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: private:
bool loadSettings();
bool saveSettings(); bool saveSettings();
private: private:
@@ -50,6 +61,8 @@ private:
ServerSettings *settings; ServerSettings *settings;
ConnectorToServer* connectorToServer; ConnectorToServer* connectorToServer;
bool flSettingsServerChanged;
}; };
#endif // DIALOGSETTINGS_H #endif // DIALOGSETTINGS_H

View File

@@ -45,7 +45,7 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) :
updateMyStyleSheet(); updateMyStyleSheet();
on_btnSettings_clicked(); setLanguageInterfase();
connectorToServer = new ConnectorToServer(this); connectorToServer = new ConnectorToServer(this);
connect(connectorToServer,&ConnectorToServer::sigLoginResult,this,&InstructorsAndTraineesWidget::checkLoginResult); connect(connectorToServer,&ConnectorToServer::sigLoginResult,this,&InstructorsAndTraineesWidget::checkLoginResult);
@@ -93,46 +93,6 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) :
ui->verticalLayout_Instructors->addWidget(viewerInstructors); 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_Messenger->setMaximumWidth(500);
ui->groupBox_Instructors->setMaximumWidth(500); ui->groupBox_Instructors->setMaximumWidth(500);
@@ -176,20 +136,6 @@ void InstructorsAndTraineesWidget::changeEvent(QEvent *event)
{// переведём окно заново {// переведём окно заново
ui->retranslateUi(this); 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); updateLabelLoggedInInstructor(loginInstructorLoggedInLocal, nameInstructorLoggedInLocal);
updateLabelServer(); updateLabelServer();
} }
@@ -320,8 +266,11 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state)
ui->lblDBisConnected->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGreen.png"))); ui->lblDBisConnected->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGreen.png")));
ServerSettings serverSettings = connectorToServer->getServerSettings(); //ServerSettings serverSettings = connectorToServer->getServerSettings();
ui->lblServer->setText(serverSettings.Address + ":" +serverSettings.Port); //ui->lblServer->setText(serverSettings.Address + ":" +serverSettings.Port);
updateLabelLoggedInInstructor(loginInstructorLoggedInLocal, nameInstructorLoggedInLocal);
updateLabelServer();
} }
else else
{//Сервер отключен {//Сервер отключен
@@ -331,7 +280,7 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state)
ui->btnAuthorizationInstructor->setChecked(false); ui->btnAuthorizationInstructor->setChecked(false);
//ui->btnSetVersion->hide(); //ui->btnSetVersion->hide();
ui->lblDBisConnected->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGray.png"))); ui->lblDBisConnected->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGray.png")));
ui->lblServer->setText(tr("none")); //ui->lblServer->setText(tr("none"));
viewerInstructors->setAuthComplited(false); viewerInstructors->setAuthComplited(false);
viewerTrainees->setAuthComplited(false); viewerTrainees->setAuthComplited(false);
@@ -347,6 +296,12 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state)
messangerWidget->clear(); messangerWidget->clear();
loginInstructorLoggedInLocal = "";
nameInstructorLoggedInLocal = "";
updateLabelLoggedInInstructor(loginInstructorLoggedInLocal, nameInstructorLoggedInLocal);
updateLabelServer();
QMessageBox::warning(this, tr("Warning!"), tr("The server is disabled")); QMessageBox::warning(this, tr("Warning!"), tr("The server is disabled"));
} }
} }
@@ -470,6 +425,18 @@ void InstructorsAndTraineesWidget::updateLabelServer()
ui->lblServer->setText(tr("none")); 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() void InstructorsAndTraineesWidget::on_btnSetVersion_clicked()
{ {
connectorToServer->showVersionSelect(); connectorToServer->showVersionSelect();
@@ -488,6 +455,17 @@ void InstructorsAndTraineesWidget::on_btnSettings_clicked()
case QDialog::Accepted: case QDialog::Accepted:
{ {
language = dlg.getSettings().Language; 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; break;
} }
case QDialog::Rejected: case QDialog::Rejected:
@@ -495,8 +473,6 @@ void InstructorsAndTraineesWidget::on_btnSettings_clicked()
default: default:
break; break;
} }
language = dlg.getSettings().Language;
} }
void InstructorsAndTraineesWidget::on_btnEditorTrainees_clicked() void InstructorsAndTraineesWidget::on_btnEditorTrainees_clicked()

View File

@@ -85,6 +85,8 @@ private:
void updateLabelLoggedInInstructor(QString login, QString name); void updateLabelLoggedInInstructor(QString login, QString name);
void updateLabelServer(); void updateLabelServer();
void setLanguageInterfase();
private: private:
Ui::InstructorsAndTraineesWidget *ui; Ui::InstructorsAndTraineesWidget *ui;

View File

@@ -433,6 +433,11 @@ void RecognizeSystem::recognize()
} }
if(packetType == PacketType::TYPE_DISABLE)
{
clientHandler->sendDisable();
}
packetType = PacketType::TYPE_NONE; packetType = PacketType::TYPE_NONE;
} }