mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer.git
synced 2026-03-27 19:45:43 +03:00
refact. Повторный запуск.
This commit is contained in:
@@ -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 "";
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user