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