diff --git a/DataBaseLMS/interfacedatabaselms.cpp b/DataBaseLMS/interfacedatabaselms.cpp
index ddd4a0b..8ad5e21 100644
--- a/DataBaseLMS/interfacedatabaselms.cpp
+++ b/DataBaseLMS/interfacedatabaselms.cpp
@@ -16,7 +16,7 @@ bool InterfaceDataBaseLMS::connectionToDB()
{
if(!createConnection())
{
- QMessageBox::critical(ownerWidget, dbSettings.dbName, tr("Connection error") /*+ db->lastError().text()*/);
+ //QMessageBox::critical(ownerWidget, dbSettings.dbName, tr("Connection error") /*+ db->lastError().text()*/);
return false;
}
else
diff --git a/InstructorsAndTrainees/dialogsettings.cpp b/InstructorsAndTrainees/dialogsettings.cpp
index 20aa0e5..9b9ec4a 100644
--- a/InstructorsAndTrainees/dialogsettings.cpp
+++ b/InstructorsAndTrainees/dialogsettings.cpp
@@ -70,6 +70,7 @@ DialogSettings::DialogSettings(ConnectorToServer* connectorToServer, bool instru
ui->checkAutoStart->setVisible(false);
ui->btnSave->setEnabled(false);
+ flSettingsServerChanged = false;
}
DialogSettings::~DialogSettings()
diff --git a/InstructorsAndTrainees/instructors/dialogauthorizationinstructor.ui b/InstructorsAndTrainees/instructors/dialogauthorizationinstructor.ui
index 6f9f43f..76264a9 100644
--- a/InstructorsAndTrainees/instructors/dialogauthorizationinstructor.ui
+++ b/InstructorsAndTrainees/instructors/dialogauthorizationinstructor.ui
@@ -20,7 +20,7 @@
Instructor authorization
-
+
:/resources/icons/lms.png:/resources/icons/lms.png
@@ -90,7 +90,7 @@
...
-
+
:/resources/icons/eye.png:/resources/icons/eye.png
@@ -136,7 +136,7 @@
-
+
diff --git a/ServerLMS/dialogsettingstray.cpp b/ServerLMS/dialogsettingstray.cpp
index fe40b77..cc70e91 100644
--- a/ServerLMS/dialogsettingstray.cpp
+++ b/ServerLMS/dialogsettingstray.cpp
@@ -34,6 +34,9 @@ DialogSettingsTray::DialogSettingsTray(QWidget *parent) :
//Задаём два пункта с текстом локалей в комбобоксе
ui->cmbLanguage->addItems(QStringList() << "English" << "Русский");
+ //Скрываем пароль
+ ui->editPassword->setEchoMode(QLineEdit::EchoMode::Password);
+
if(loadSettings(settings))
{
if(settings->Language == "ENG")
@@ -49,6 +52,7 @@ DialogSettingsTray::DialogSettingsTray(QWidget *parent) :
}
ui->btnSave->setEnabled(false);
+ flSettingsServerChanged = false;
}
DialogSettingsTray::~DialogSettingsTray()
diff --git a/ServerLMS/dialogsettingstray.h b/ServerLMS/dialogsettingstray.h
index b5c4371..956c17b 100644
--- a/ServerLMS/dialogsettingstray.h
+++ b/ServerLMS/dialogsettingstray.h
@@ -30,7 +30,7 @@ public:
ServerDBSettings getSettings();
- bool settingsServerIsChanged(){ return flSettingsServerChanged;}
+ bool settingsDBisChanged(){ return flSettingsServerChanged;}
static bool loadSettings(ServerDBSettings *settings);
diff --git a/ServerLMS/multithreadserver.cpp b/ServerLMS/multithreadserver.cpp
index f813515..e37b639 100644
--- a/ServerLMS/multithreadserver.cpp
+++ b/ServerLMS/multithreadserver.cpp
@@ -60,6 +60,7 @@ bool MultiThreadServer::stopServer()
//Закрываем сервер
close();
stateServer = stoped;
+ Logger::instance().log("SERVER: stop OK");
return true;
}
else
@@ -73,7 +74,7 @@ QMap *MultiThreadServer::getClientsMap() const
void MultiThreadServer::updateClientList()
{
- serverLmsWidget->slotUpdateListClients();
+ serverLmsWidget->slot_UpdateListClients();
}
void MultiThreadServer::disableClients()
@@ -130,19 +131,19 @@ void MultiThreadServer::slotDisconnectClient(QString peerAddress, QString peerPo
emit signalStopSendFile();
Logger::instance().log("SERVER: Client " + login + " disconnected");
- serverLmsWidget->slotUpdateListClients();
+ serverLmsWidget->slot_UpdateListClients();
serverLmsWidget->getProcessingSystem()->processingClientDeAutorization(login);
}
void MultiThreadServer::removeClient(int idSocket)
{
clientsMap->remove(idSocket);
- serverLmsWidget->slotUpdateListClients();
+ serverLmsWidget->slot_UpdateListClients();
}
void MultiThreadServer::addClient(qintptr descriptor, ClientHandler *client)
{
(*clientsMap)[descriptor] = client;
- serverLmsWidget->slotUpdateListClients();
+ serverLmsWidget->slot_UpdateListClients();
}
diff --git a/ServerLMS/providerdblms.cpp b/ServerLMS/providerdblms.cpp
index 9ec5ca2..f2d504e 100644
--- a/ServerLMS/providerdblms.cpp
+++ b/ServerLMS/providerdblms.cpp
@@ -16,7 +16,7 @@ ProviderDBLMS::~ProviderDBLMS()
DisConnectionFromDB();
}
-void ProviderDBLMS::ConnectionToDB()
+bool ProviderDBLMS::ConnectionToDB()
{
mtxAccess.lock();
if(! dbLMS->DBisConnected())
@@ -24,9 +24,18 @@ void ProviderDBLMS::ConnectionToDB()
if(dbLMS->connectionToDB())
{
Q_EMIT signal_BlockAutorization(false);
+
+ mtxAccess.unlock();
+ return true;
+ }
+ else
+ {
+ mtxAccess.unlock();
+ return false;
}
}
mtxAccess.unlock();
+ return true;
}
void ProviderDBLMS::DisConnectionFromDB()
@@ -41,6 +50,15 @@ void ProviderDBLMS::DisConnectionFromDB()
mtxAccess.unlock();
}
+bool ProviderDBLMS::DBisConnected()
+{
+ bool res = false;
+ mtxAccess.lock();
+ res = dbLMS->DBisConnected();
+ mtxAccess.unlock();
+ return res;
+}
+
DataBaseSettings ProviderDBLMS::getDBSettings()
{
return dbLMS->getDataBaseSettings();
diff --git a/ServerLMS/providerdblms.h b/ServerLMS/providerdblms.h
index ee58aaf..15ad89d 100644
--- a/ServerLMS/providerdblms.h
+++ b/ServerLMS/providerdblms.h
@@ -75,8 +75,9 @@ Q_SIGNALS:
void signal_BlockAutorization(bool block);
public:
- void ConnectionToDB();
+ bool ConnectionToDB();
void DisConnectionFromDB();
+ bool DBisConnected();
DataBaseSettings getDBSettings();
private:
diff --git a/ServerLMS/serverlmswidget.cpp b/ServerLMS/serverlmswidget.cpp
index c6d85d1..1782844 100644
--- a/ServerLMS/serverlmswidget.cpp
+++ b/ServerLMS/serverlmswidget.cpp
@@ -29,7 +29,8 @@ ServerLMSWidget::ServerLMSWidget(QWidget *parent) :
providerDBLMS(nullptr),
first (true),
language(languageENG),
- errorCode(0)
+ errorCode(0),
+ flStartInitialization(false)
{
ui->setupUi(this);
@@ -41,96 +42,68 @@ ServerLMSWidget::ServerLMSWidget(QWidget *parent) :
setLanguageInterfase();
- mutex = new QMutex;
+ startInitialization();
- ui->btnStopServer->setEnabled(false);
- ui->btnStartServer->setEnabled(true);
-
- updateThread = new QThread;
- loggerThread = new QThread;
-
- providerDBLMS = new ProviderDBLMS(this);
- providerDBLMS->ConnectionToDB();
- providerDBLMS->deAuthorizationAll();
-
- //Настройки БД
- DataBaseSettings dbSettings = providerDBLMS->getDBSettings();
- QString strDBsettings = QString("%1 (%2) %3 : %4").arg(dbSettings.dbName,
- dbSettings.dbType,
- dbSettings.dbHostName,
- QString::number(dbSettings.dbPort));
- ui->lblDBsettings->setText(strDBsettings);
-
- chatSystem = new ChatSystem();
-
- connect(providerDBLMS, &ProviderDBLMS::signal_BlockAutorization, this, &ServerLMSWidget::slot_BlockAutorization);
-
- assetsManager = new AssetsManager;
- assetsManager->moveToThread(updateThread);
-
- updateController = new UpdateController;
- updateController->moveToThread(updateThread);
-
- processingSystem = new ProcessingSystem(providerDBLMS, updateController);
- //processingSystem->moveToThread(updateThread);
-
- dataParser = new DataParser(assetsManager,processingSystem);
-
- commonClientHandler = new CommonClientHandler;
- server = new MultiThreadServer(this,updateController,processingSystem,dataParser,6000);
-
- loggerThread->start();
- updateThread->start();
-
- commonClientHandler->initialize(server->getClientsMap(),processingSystem,dataParser);
- processingSystem->initialize(server,dataParser,commonClientHandler,updateController,chatSystem);
- chatSystem->initialize(commonClientHandler,dataParser,server->getClientsMap());
-
- Logger::instance().moveToThread(loggerThread);
- Logger::instance().setLoggingType(LoggingType::WIDGET);
- Logger::instance().setLogToFile(true);
-
- connect(this,&ServerLMSWidget::sigUpdateController,updateController,&UpdateController::initialize,Qt::DirectConnection);
- connect(this,&ServerLMSWidget::sigCalculateFullHash,updateController,&UpdateController::calculateFullHash,Qt::AutoConnection);
- connect(updateController,&UpdateController::sigErrorRequired,this,&ServerLMSWidget::setError);
- connect(&Logger::instance(),&Logger::sigLogToWidget,this, &ServerLMSWidget::addToLog,Qt::QueuedConnection);
-
- emit sigUpdateController(commonClientHandler,dataParser,assetsManager);
- on_btnStartServer_clicked();
+ tryConnectionToDB();
}
ServerLMSWidget::~ServerLMSWidget()
{
- server->stopServer();
- updateThread->exit();
- loggerThread->exit();
+ if(flStartInitialization)
+ {
+ server->stopServer();
+
+ //updateThread->exit();
+ updateThread->quit();
+ updateThread->wait();
+ delete updateThread;
+
+ delete server;
+ delete commonClientHandler;
+ delete dataParser;
+ delete processingSystem;
+ delete updateController;
+ delete assetsManager;
+ delete chatSystem;
+
+ delete mutex;
+
+ //loggerThread->exit();
+ loggerThread->quit();
+ loggerThread->wait();
+ delete loggerThread;
+ }
- delete server;
- delete commonClientHandler;
- delete dataParser;
- delete processingSystem;
- delete updateController;
- delete assetsManager;
- delete chatSystem;
delete providerDBLMS;
- delete loggerThread;
- delete updateThread;
- delete mutex;
delete ui;
}
-void ServerLMSWidget::setError(int code)
+void ServerLMSWidget::changeEvent(QEvent *event)
{
- errorCode = code;
+ // В случае получения события изменения языка приложения
+ if (event->type() == QEvent::LanguageChange)
+ {
+ ui->retranslateUi(this); // переведём окно заново
+
+ if(providerDBLMS->DBisConnected())
+ {
+ //Настройки БД
+ DataBaseSettings dbSettings = providerDBLMS->getDBSettings();
+ QString strDBsettings = QString("%1 (%2) %3 : %4").arg(dbSettings.dbName,
+ dbSettings.dbType,
+ dbSettings.dbHostName,
+ QString::number(dbSettings.dbPort));
+ ui->lblDBsettings->setText(strDBsettings);
+ }
+ else
+ {
+ ui->lblDBsettings->setText("");
+ }
+ }
}
-QString ServerLMSWidget::getLanguage()
-{
- return language;
-}
-
-void ServerLMSWidget::slotUpdateListClients()
+void ServerLMSWidget::slot_UpdateListClients()
{
//Очищаем список
ui->listWidget_Clients->clear();
@@ -148,7 +121,7 @@ void ServerLMSWidget::slotUpdateListClients()
Logger::instance().log("SERVER: countClients = " + QString::number(countClients));
}
-void ServerLMSWidget::addToLog(QString message)
+void ServerLMSWidget::slot_AddMessageToLog(QString message)
{
ui->loggerTextField->appendPlainText(message);
}
@@ -185,6 +158,7 @@ void ServerLMSWidget::on_btnStartServer_clicked()
ui->btnStartServer->setEnabled(false);
ui->btnStopServer->setEnabled(true);
ui->lblOnOff->setPixmap(QPixmap(QStringLiteral(":/resources/icons/switchOn.png")));
+ slot_BlockAutorization(false);
}
}
@@ -195,29 +169,7 @@ void ServerLMSWidget::on_btnStopServer_clicked()
ui->btnStopServer->setEnabled(false);
ui->btnStartServer->setEnabled(true);
ui->lblOnOff->setPixmap(QPixmap(QStringLiteral(":/resources/icons/switchOff.png")));
- slot_BlockAutorization(false);
- }
-}
-
-QMutex *ServerLMSWidget::getMutex() const
-{
- return mutex;
-}
-
-void ServerLMSWidget::changeEvent(QEvent *event)
-{
- // В случае получения события изменения языка приложения
- if (event->type() == QEvent::LanguageChange)
- {
- ui->retranslateUi(this); // переведём окно заново
-
- //Настройки БД
- DataBaseSettings dbSettings = providerDBLMS->getDBSettings();
- QString strDBsettings = QString("%1 (%2) %3 : %4").arg(dbSettings.dbName,
- dbSettings.dbType,
- dbSettings.dbHostName,
- QString::number(dbSettings.dbPort));
- ui->lblDBsettings->setText(strDBsettings);
+ slot_BlockAutorization(true);
}
}
@@ -236,20 +188,19 @@ void ServerLMSWidget::on_btnSettings_clicked()
{
language = dlg.getSettings().Language;
- if(dlg.settingsServerIsChanged())
- {//TODO Здесь нужно переподключать БД
-
- //SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::warningClose, tr("Server settings have been changed. Please reconnect to the server.")).exec();
+ if(dlg.settingsDBisChanged())
+ {
+ on_btnStopServer_clicked();
providerDBLMS->deAuthorizationAll();
- on_btnStopServer_clicked();
-
providerDBLMS->DisConnectionFromDB();
- providerDBLMS->ConnectionToDB();
+ ui->lblDBsettings->setText("");
- //on_btnStartServer_clicked();
+ QMessageBox::warning(this, tr("Warning!"), tr("Database settings have been changed.\nThe server will be restarted."));
+
+ tryConnectionToDB();
}
break;
@@ -308,3 +259,78 @@ QString ServerLMSWidget::loadStyleSheet()
return style;
}
}
+
+void ServerLMSWidget::startInitialization()
+{
+ providerDBLMS = new ProviderDBLMS(this);
+ connect(providerDBLMS, &ProviderDBLMS::signal_BlockAutorization, this, &ServerLMSWidget::slot_BlockAutorization);
+
+ mutex = new QMutex;
+
+ updateThread = new QThread;
+ loggerThread = new QThread;
+
+ chatSystem = new ChatSystem();
+
+ assetsManager = new AssetsManager;
+ assetsManager->moveToThread(updateThread);
+
+ updateController = new UpdateController;
+ updateController->moveToThread(updateThread);
+
+ processingSystem = new ProcessingSystem(providerDBLMS, updateController);
+ //processingSystem->moveToThread(updateThread);
+
+ dataParser = new DataParser(assetsManager,processingSystem);
+
+ commonClientHandler = new CommonClientHandler;
+ server = new MultiThreadServer(this,updateController,processingSystem,dataParser,6000);
+
+ loggerThread->start();
+ updateThread->start();
+
+ commonClientHandler->initialize(server->getClientsMap(),processingSystem,dataParser);
+ processingSystem->initialize(server,dataParser,commonClientHandler,updateController,chatSystem);
+ chatSystem->initialize(commonClientHandler,dataParser,server->getClientsMap());
+
+ Logger::instance().moveToThread(loggerThread);
+ Logger::instance().setLoggingType(LoggingType::WIDGET);
+ Logger::instance().setLogToFile(true);
+
+ connect(this,&ServerLMSWidget::sigUpdateController,updateController,&UpdateController::initialize,Qt::DirectConnection);
+ connect(this,&ServerLMSWidget::sigCalculateFullHash,updateController,&UpdateController::calculateFullHash,Qt::AutoConnection);
+ connect(updateController,&UpdateController::sigErrorRequired,this,&ServerLMSWidget::setError);
+ connect(&Logger::instance(),&Logger::sigLogToWidget,this, &ServerLMSWidget::slot_AddMessageToLog,Qt::QueuedConnection);
+
+ emit sigUpdateController(commonClientHandler,dataParser,assetsManager);
+
+ ui->btnStopServer->setEnabled(false);
+ ui->btnStartServer->setEnabled(true);
+
+ flStartInitialization = true;
+}
+
+void ServerLMSWidget::tryConnectionToDB()
+{
+ if(! providerDBLMS->ConnectionToDB())
+ {
+ ui->lblDBsettings->setText("");
+ ui->btnStopServer->setEnabled(false);
+ ui->btnStartServer->setEnabled(false);
+ QMessageBox::critical(this, tr("Error!"), tr("Database connection error"));
+ }
+ else
+ {
+ providerDBLMS->deAuthorizationAll();
+
+ //Настройки БД
+ DataBaseSettings dbSettings = providerDBLMS->getDBSettings();
+ QString strDBsettings = QString("%1 (%2) %3 : %4").arg(dbSettings.dbName,
+ dbSettings.dbType,
+ dbSettings.dbHostName,
+ QString::number(dbSettings.dbPort));
+ ui->lblDBsettings->setText(strDBsettings);
+
+ on_btnStartServer_clicked();
+ }
+}
diff --git a/ServerLMS/serverlmswidget.h b/ServerLMS/serverlmswidget.h
index 0f63ab5..e7ea9af 100644
--- a/ServerLMS/serverlmswidget.h
+++ b/ServerLMS/serverlmswidget.h
@@ -53,34 +53,36 @@ public:
static const QString languageENG;
static const QString languageRUS;
-public:
- QString getLanguage();
-
- void setError(int code);
-
protected:
// Метод получения событий
// В нём будет производиться проверка события смены перевода приложения
void changeEvent(QEvent * event) override;
signals:
- void sigRecognize();
- void sigCalculateFullHash();
- void sigUpdateController(CommonClientHandler* commonClientHandler,DataParser *dataParser,AssetsManager *assetManager);
-
- QTcpSocket* sigGetSocket();
-
//сигнал смены языка
void signal_LanguageChanged(QString language);
+ void sigRecognize();
+ void sigCalculateFullHash();
+ void sigUpdateController(CommonClientHandler* commonClientHandler,DataParser *dataParser,AssetsManager *assetManager);
+ QTcpSocket* sigGetSocket();
+
public slots:
void slot_LanguageChanged(QString language);
- void slotUpdateListClients();
+ void slot_UpdateListClients();
void slot_BlockAutorization(bool block);
- void addToLog(QString message);
+ void slot_AddMessageToLog(QString message);
public:
- void removeClient(int socketId);
+ QString getLanguage()
+ {
+ return language;
+ }
+
+ void setError(int code)
+ {
+ errorCode = code;
+ }
int hasError() const
{
@@ -92,7 +94,12 @@ public:
return processingSystem;
}
- QMutex *getMutex() const;
+ QMutex *getMutex() const
+ {
+ return mutex;
+ }
+
+ void removeClient(int socketId);
private slots:
void on_btnStartServer_clicked();
@@ -101,11 +108,13 @@ private slots:
private:
void setLanguageInterfase();
-
-private:
void updateMyStyleSheet();
QString loadStyleSheet();
+ void startInitialization();
+
+ void tryConnectionToDB();
+
private:
Ui::ServerLMSWidget *ui;
@@ -129,6 +138,8 @@ private:
QTranslator qtLanguageTranslator;
QString language;
int errorCode;
+
+ bool flStartInitialization;
};
#endif // SERVERLMSWIDGET_H
diff --git a/ServerLMS/translations/ServerLMS_ru_RU.qm b/ServerLMS/translations/ServerLMS_ru_RU.qm
index 939a831..93ec933 100644
Binary files a/ServerLMS/translations/ServerLMS_ru_RU.qm and b/ServerLMS/translations/ServerLMS_ru_RU.qm differ
diff --git a/ServerLMS/translations/ServerLMS_ru_RU.ts b/ServerLMS/translations/ServerLMS_ru_RU.ts
index c87419c..b3f2909 100644
--- a/ServerLMS/translations/ServerLMS_ru_RU.ts
+++ b/ServerLMS/translations/ServerLMS_ru_RU.ts
@@ -9,6 +9,59 @@
ООО Константа-Дизайн
+
+ DialogSettingsTray
+
+
+ Settings
+ Настройки
+
+
+
+ Main
+ Основные
+
+
+
+ Language
+ Язык
+
+
+
+ Data Base
+ База Данных
+
+
+
+ DB name
+ Имя БД
+
+
+
+ Host name
+ Хост
+
+
+
+ Port
+ Порт
+
+
+
+ User name
+ Имя пользователя
+
+
+
+ Password
+ Пароль
+
+
+
+ Save
+ Сохранить
+
+
ServerLMSWidget
@@ -17,30 +70,35 @@
Форма
-
- Block Authorization
- Блокировка авторизации
-
-
-
+
Logger
Логгер
-
+
Clients
Клиенты
-
+
+ Settings
+ Настройки
+
+
+
Data base:
База данных:
-
+
...
+
+
+ Authorization
+ Авторизация
+
Start
@@ -51,5 +109,33 @@
Stop
Остановить
+
+
+
+ Warning!
+ Внимание!
+
+
+
+ Database settings have been changed.
+The server will be restarted.
+ Настройки Базы Данных были изменены.
+Сервер будет перезапущен.
+
+
+
+ The file could not be opened
+ Файл не может быть открыт
+
+
+
+ Error!
+ Ошибка!
+
+
+
+ Database connection error
+ Ошибка подключения к Базе Данных
+
diff --git a/TrayServerLMS/mainwindow.cpp b/TrayServerLMS/mainwindow.cpp
index f47afc5..f0e4757 100644
--- a/TrayServerLMS/mainwindow.cpp
+++ b/TrayServerLMS/mainwindow.cpp
@@ -131,6 +131,7 @@ void MainWindow::changeEvent(QEvent *event)
{// переведём окно заново
ui->retranslateUi(this);
+ trayIcon->setToolTip(tr("Server LMS"));
action_ShowWindow->setText(tr("Expand window"));
action_HideWindow->setText(tr("Minimize window"));
action_Exit->setText(tr("Exit"));
diff --git a/TrayServerLMS/resources/IcoServerRRJ.ico b/TrayServerLMS/resources/IcoServerRRJ.ico
index 82dd2e8..f6934b2 100644
Binary files a/TrayServerLMS/resources/IcoServerRRJ.ico and b/TrayServerLMS/resources/IcoServerRRJ.ico differ
diff --git a/TrayServerLMS/resources/IcoServerRRJ_2.ico b/TrayServerLMS/resources/IcoServerRRJ_2.ico
new file mode 100644
index 0000000..9b1892f
Binary files /dev/null and b/TrayServerLMS/resources/IcoServerRRJ_2.ico differ
diff --git a/TrayServerLMS/resources/IcoServerRRJ_old.ico b/TrayServerLMS/resources/IcoServerRRJ_old.ico
new file mode 100644
index 0000000..82dd2e8
Binary files /dev/null and b/TrayServerLMS/resources/IcoServerRRJ_old.ico differ