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

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()
{
QDataStream stream(socket);
stream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
stream << PacketType::TYPE_DISABLE;
socket->disconnect();
isConnected = false;
emit sigServerDisconnect();
emit sigSendDebugLog("Server disabled");

View File

@@ -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

View File

@@ -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<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)
{
this->listInstructors = listInstructors;
@@ -320,13 +315,13 @@ void ConnectorToServer::slot_AnswerQueryToDB_ListTrainees(QList<Trainee> listTra
void ConnectorToServer::slot_AnswerQueryToDB_ListComputers(QList<Computer> listComputers)
{
this->listComputers = listComputers;
//emit signal_UpdateDB(false, true);
//emit signal_UpdateDB(false, true); //TODO
}
void ConnectorToServer::slot_AnswerQueryToDB_ListClassrooms(QList<Classroom> 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)
@@ -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();
}

View File

@@ -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<Instructor>* listInstructors,
QList<Trainee>* listTrainees,
QList<Group>* listGroups);*/
public slots:
void slot_AnswerQueryToDB_ListInstructors(QList<Instructor> listInstructors);
void slot_AnswerQueryToDB_ListGroups(QList<Group> listGroups);
void slot_AnswerQueryToDB_ListTrainees(QList<Trainee> 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;

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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()

View File

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

View File

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