File indexing completed on 2024-05-12 17:11:43
0001 #include "rolisteamdaemon.h" 0002 #include <QDebug> 0003 #include <QFile> 0004 #include <QTime> 0005 0006 #include <QCoreApplication> 0007 #include <QFileInfo> 0008 #include <QSettings> 0009 0010 RolisteamDaemon::RolisteamDaemon(QObject* parent) 0011 : QObject(parent), m_server(m_parameters, false), m_logController(new LogController(true, this)) 0012 { 0013 qRegisterMetaType<RServer::ServerState>(); 0014 } 0015 0016 bool RolisteamDaemon::readConfigFile(QString filepath) 0017 { 0018 if(!QFileInfo::exists(filepath)) 0019 return false; 0020 0021 QSettings settings(filepath, QSettings::IniFormat); 0022 0023 int port= settings.value("port").toInt(); 0024 auto password= QByteArray::fromBase64(settings.value("ServerPassword").toByteArray()); 0025 QString range= settings.value("IpRange").toString(); 0026 QString ipBan= settings.value("IpBan").toString(); 0027 QString connectionMax= settings.value("ConnectionMax").toString(); 0028 QString timeStart= settings.value("TimeStart").toString(); 0029 QString timeEnd= settings.value("TimeEnd").toString(); 0030 QString ipMode= settings.value("IpMode").toString(); 0031 auto adminPassword= QByteArray::fromBase64(settings.value("AdminPassword").toByteArray()); 0032 int threadCount= settings.value("ThreadCount").toInt(); 0033 int channelCount= settings.value("ChannelCount").toInt(); 0034 int timeToRetry= settings.value("TimeToRetry").toInt(); 0035 int tryCount= settings.value("TryCount").toInt(); 0036 int logLevel= settings.value("LogLevel").toInt(); 0037 QString maxMemorySize= settings.value("MaxMemorySize").toString(); 0038 bool deepInspectionLog= settings.value("DeepInspectionLog").toBool(); 0039 0040 if(threadCount <= 0) 0041 return false; 0042 0043 QString pathToLog= settings.value("LogFile").toString(); 0044 0045 quint64 memorySize= 0; 0046 quint64 factor= 0; 0047 if(maxMemorySize.endsWith("G")) 0048 { 0049 factor= 1024 * 1024 * 1024; 0050 } 0051 else if(maxMemorySize.endsWith("M")) 0052 { 0053 factor= 1024 * 1024; 0054 } 0055 maxMemorySize= maxMemorySize.remove(maxMemorySize.length() - 1, 1); 0056 0057 memorySize= factor * maxMemorySize.toULongLong(); 0058 0059 auto listIpBan= ipBan.split(",", Qt::SkipEmptyParts); 0060 0061 if(deepInspectionLog) 0062 { 0063 m_logController->listenObjects(&m_server); 0064 } 0065 m_logController->setLogLevel(static_cast<LogController::LogLevel>(logLevel)); 0066 0067 LogController::StorageModes modes= LogController::Console; 0068 0069 if(!pathToLog.isEmpty()) 0070 { 0071 m_logController->setCurrentPath(pathToLog); 0072 modes|= LogController::File; 0073 } 0074 0075 m_logController->setCurrentModes(modes); 0076 0077 m_parameters.insert("port", port); 0078 m_parameters.insert("ServerPassword", password); 0079 m_parameters.insert("IpRange", range); 0080 m_parameters.insert("IpBan", listIpBan); 0081 m_parameters.insert("ConnectionMax", connectionMax); 0082 m_parameters.insert("TimeStart", timeStart); 0083 m_parameters.insert("TimeEnd", timeEnd); 0084 m_parameters.insert("AdminPassword", adminPassword); 0085 m_parameters.insert("IpMode", ipMode); // v4 v6 any 0086 m_parameters.insert("ThreadCount", threadCount); // thread count 0087 m_parameters.insert("ChannelCount", channelCount); // channel count 0088 m_parameters.insert("TimeToRetry", timeToRetry); // TimeToRetry 0089 m_parameters.insert("TryCount", tryCount); // TimeToRetry 0090 m_parameters.insert("LogLevel", logLevel); // loglevel 0091 m_parameters.insert("LogFile", pathToLog); // logpath 0092 m_parameters.insert("DeepInspectionLog", deepInspectionLog); // logpath 0093 m_parameters.insert("MemorySize", memorySize); // max memory size 0094 0095 return true; 0096 } 0097 0098 void RolisteamDaemon::start() 0099 { 0100 connect(&m_thread, &QThread::started, &m_server, &RServer::listen); 0101 connect(&m_server, &RServer::eventOccured, m_logController, [this](const QString& msg, LogController::LogLevel type){ 0102 m_logController->manageMessage(msg, QStringLiteral("Server"), type); 0103 }, Qt::QueuedConnection); 0104 connect(&m_server, &RServer::completed, &m_thread, &QThread::quit); 0105 connect(&m_server, &RServer::stateChanged, this, [this]() { 0106 if(m_server.state() == RServer::Stopped) 0107 m_thread.quit(); 0108 }); 0109 connect(&m_thread, &QThread::finished, this, [this]() { 0110 if(m_restart) 0111 { 0112 qApp->exit(0); 0113 } 0114 m_restart= false; 0115 }); 0116 0117 m_server.moveToThread(&m_thread); 0118 0119 m_thread.start(); 0120 } 0121 0122 void RolisteamDaemon::createEmptyConfigFile(QString filepath) 0123 { 0124 QSettings settings(filepath, QSettings::IniFormat); 0125 0126 settings.setValue("port", 6660); 0127 settings.setValue("ServerPassword", QStringLiteral("")); 0128 settings.setValue("IpRange", QStringLiteral("")); 0129 settings.setValue("IpBan", QStringLiteral("")); 0130 settings.setValue("ConnectionMax", 50); 0131 settings.setValue("TimeStart", QStringLiteral("")); 0132 settings.setValue("TimeEnd", QStringLiteral("")); 0133 settings.setValue("IpMode", QStringLiteral("")); 0134 settings.setValue("ThreadCount", 1); 0135 settings.setValue("ChannelCount", 1); 0136 settings.setValue("TimeToRetry", 100); 0137 settings.setValue("TryCount", 10); 0138 settings.setValue("LogLevel", 1); 0139 settings.setValue("LogFile", QStringLiteral("")); 0140 settings.setValue("DeepInspectionLog", false); 0141 settings.setValue("AdminPassword", QStringLiteral("")); 0142 settings.setValue("MaxMemorySize", QStringLiteral("")); 0143 0144 settings.sync(); 0145 } 0146 0147 void RolisteamDaemon::restart() 0148 { 0149 m_restart= true; 0150 QMetaObject::invokeMethod(&m_server, &RServer::close, Qt::QueuedConnection); 0151 } 0152 0153 void RolisteamDaemon::stop() 0154 { 0155 QMetaObject::invokeMethod(&m_server, &RServer::close, Qt::QueuedConnection); 0156 }