refact. Повторный запуск.

This commit is contained in:
2026-02-05 10:16:06 +03:00
parent c0f46db50a
commit ddb5f4b76e

View File

@@ -2,26 +2,40 @@
#include <QApplication> #include <QApplication>
#include <QTranslator> #include <QTranslator>
#include "specialmessagebox.h" #include "specialmessagebox.h"
bool appIsRunningAlready(QSharedMemory& sharedMemory);
QString getLanguageFromSettings(); QString getLanguageFromSettings();
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
QApplication a(argc, argv); QApplication a(argc, argv);
// Уникальное имя для идентификации процесса // Уникальное имя для идентификации процесса
const QString sharedMemKey = "ServerMTD_sharedMemKey"; const QString sharedMemKey = "ServerMTD_sharedMemKey";
// Создание объекта общей памяти // Создание объекта общей памяти
QSharedMemory sharedMemory(sharedMemKey); QSharedMemory sharedMemory(sharedMemKey);
if(appIsRunningAlready(sharedMemory))
{//Приложение уже запущено
return 1;
}
MainWindow w;
w.show(); //Закоментировать, если нужно, чтобы по-умолчанию было свернуто в трее!
return a.exec();
}
bool appIsRunningAlready(QSharedMemory& sharedMemory)
{
// Попытка прикрепления к существующему сегменту // Попытка прикрепления к существующему сегменту
bool isRunningAlready = false;
if (sharedMemory.attach(QSharedMemory::ReadWrite)) if (sharedMemory.attach(QSharedMemory::ReadWrite))
{ {
qWarning() << "App ServerMTD is running already!"; qWarning() << "Application is running already!";
QTranslator qtLanguageTranslator; QTranslator qtLanguageTranslator;
QString language; QString language;
@@ -29,29 +43,35 @@ int main(int argc, char *argv[])
if(language == "RUS") if(language == "RUS")
qtLanguageTranslator.load(QString("translations/RRJServer_") + "ru_RU", "."); qtLanguageTranslator.load(QString("translations/RRJServer_") + "ru_RU", ".");
qApp->installTranslator(&qtLanguageTranslator); qApp->installTranslator(&qtLanguageTranslator);
SpecMsgBox::CriticalClose(nullptr, QObject::tr("App ") + QObject::tr("Maintenance training device RRJ-95NEW-100 Server") + QObject::tr(" is running already!")); SpecMsgBox::CriticalClose(nullptr, QObject::tr("Application ") + QObject::tr("Maintenance training device RRJ-95NEW-100 Server") + QObject::tr(" is running already!"));
isRunningAlready = true;
} else return true;
}
else
{ {
// Приложения ещё нет, создаём сегмент памяти // Приложения ещё нет, создаём сегмент памяти
if (!sharedMemory.create(1)) if (!sharedMemory.create(1))
{ {
qCritical() << "Error create shared memory!"; qCritical() << "Application launch error! Error create shared memory.";
return 1;
QTranslator qtLanguageTranslator;
QString language;
language = getLanguageFromSettings();
if(language == "RUS")
qtLanguageTranslator.load(QString("translations/RRJServer_") + "ru_RU", ".");
qApp->installTranslator(&qtLanguageTranslator);
SpecMsgBox::CriticalClose(nullptr, QObject::tr("Application ") + QObject::tr("Maintenance training device RRJ-95NEW-100 Server") + QObject::tr(" launch error! ") + QObject::tr(" Error create shared memory.") +
QObject::tr(" Contact your system administrator."));
return true;
} }
} }
if (isRunningAlready)
return 1;
// Освобождаем общую память при завершении работы приложения // Освобождаем общую память при завершении работы приложения
QObject::connect(qApp, &QCoreApplication::aboutToQuit, QObject::connect(qApp, &QCoreApplication::aboutToQuit,
[&]() { sharedMemory.detach(); }); [&]() { sharedMemory.detach(); });
return false;
MainWindow w;
w.show(); //Закоментировать, если нужно, чтобы по-умолчанию было свернуто в трее!
return a.exec();
} }
QString getLanguageFromSettings() QString getLanguageFromSettings()
@@ -62,13 +82,14 @@ QString getLanguageFromSettings()
QXmlStreamReader xmlReader(&file); QXmlStreamReader xmlReader(&file);
while (!xmlReader.atEnd()){ while (!xmlReader.atEnd())
{
if(xmlReader.isStartElement()){ if(xmlReader.isStartElement())
{
if(xmlReader.name() == "DataBaseSettings") if(xmlReader.name() == "DataBaseSettings")
{ {
foreach(const QXmlStreamAttribute &attr, xmlReader.attributes()){ foreach(const QXmlStreamAttribute &attr, xmlReader.attributes())
{
QString name = attr.name().toString(); QString name = attr.name().toString();
QString value = attr.value().toString(); QString value = attr.value().toString();
@@ -80,11 +101,8 @@ QString getLanguageFromSettings()
} }
} }
} }
xmlReader.readNext(); xmlReader.readNext();
} }
file.close(); file.close();
return ""; return "";
} }