TrayServerLMS рабочая версия

This commit is contained in:
2025-10-27 16:20:34 +03:00
parent d4fd29f373
commit ce65daea2e
16 changed files with 295 additions and 146 deletions

View File

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