launcher.cpp 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  1. #include "launcher.h"
  2. #include "ui_launcher.h"
  3. #include "logproc.h"
  4. #include "CSqlite3DBProc.h"
  5. #include "CAppInfo.h"
  6. #include "CHttpBll.h"
  7. #include "envCheck.h"
  8. #include "envResult.h"
  9. #include "upgrade.h"
  10. #include "popMsgBox.h"
  11. #include "CCommonTools.h"
  12. #include <QDesktopWidget>
  13. #include <QFile>
  14. #include <QSettings>
  15. #include <QFileInfo>
  16. #include <QProcess>
  17. #include "CWindowsFireWall.h"
  18. #include <process.h>
  19. launcher::launcher(QWidget *parent)
  20. : QWidget(parent)
  21. , ui(new Ui::launcher)
  22. {
  23. ui->setupUi(this);
  24. setWindowFlags(Qt::FramelessWindowHint);
  25. initParam();
  26. CWindowsFireWall wfw(_getpid(), false);
  27. wfw.removeLastRules();
  28. QDesktopWidget *dekwiget = QApplication::desktop();
  29. int nWidth = dekwiget->width();
  30. int nHeight = dekwiget->height();
  31. double fWRate = (double)nWidth/1280;
  32. double fHRate= (double)nHeight/800;
  33. double fRate = fWRate;
  34. if(fHRate < fWRate)
  35. {
  36. fRate = fHRate;
  37. }
  38. g_appInfoPtr->m_fRate = fRate;
  39. QFile qssFile(":/launcher.qss");
  40. qssFile.open(QFile::ReadOnly);
  41. QString qss;
  42. qss = qssFile.readAll();
  43. int FONT_BASE_SIZE6 = 6*fRate;
  44. int FONT_BASE_SIZE12 = 12*fRate;
  45. int FONT_BASE_SIZE14 = 14*fRate;
  46. int FONT_BASE_SIZE16 = 16*fRate;
  47. int FONT_BASE_SIZE18 = 18*fRate;
  48. int FONT_BASE_SIZE20 = 20*fRate;
  49. int FONT_BASE_SIZE22 = 22*fRate;
  50. qss.replace("FONT_BASE_SIZE12", QString::number(FONT_BASE_SIZE12));
  51. qss.replace("FONT_BASE_SIZE14", QString::number(FONT_BASE_SIZE14));
  52. qss.replace("FONT_BASE_SIZE16", QString::number(FONT_BASE_SIZE16));
  53. qss.replace("FONT_BASE_SIZE18", QString::number(FONT_BASE_SIZE18));
  54. qss.replace("FONT_BASE_SIZE20", QString::number(FONT_BASE_SIZE20));
  55. qss.replace("FONT_BASE_SIZE22", QString::number(FONT_BASE_SIZE22));
  56. qss.replace("FONT_BASE_SIZE6", QString::number(FONT_BASE_SIZE6));
  57. g_appInfoPtr->m_sQssStr = qss;
  58. setStyleSheet(qss);
  59. initUI();
  60. QProcess process;
  61. process.start("systeminfo");
  62. process.waitForFinished();
  63. QByteArray qbt = process.readAllStandardOutput();
  64. QString sInfo = QString::fromLocal8Bit(qbt.data());
  65. myServerLog()<<sInfo;
  66. }
  67. launcher::~launcher()
  68. {
  69. delete ui;
  70. }
  71. void launcher::initParam()
  72. {
  73. // g_appInfoPtr = std::make_shared<CAppInfo>();
  74. g_sysDBProcPtr = std::make_shared<CSqlite3DBProc>();
  75. if(!g_sysDBProcPtr->OpenDB("data/sys.db"))
  76. {
  77. // ShowMsg(QString::fromLocal8Bit("打开数据库失败!"), this);
  78. myDebug()<<QString::fromLocal8Bit("打开数据库失败!");
  79. }
  80. sqlite3_stmt *stmt;
  81. QString sSql = QString("select name,ifnull(value,'') from t_param");
  82. if(!g_sysDBProcPtr->QuerySql(sSql.toStdString(), &stmt))
  83. {
  84. // ShowMsg(QString::fromLocal8Bit("查询参数信息失败!"), this);
  85. myDebug()<<QString::fromLocal8Bit("查询参数信息失败!");
  86. return;
  87. }
  88. QString sProjectName = "";
  89. QString sEndpoint = "";
  90. QString sLogstore = "";
  91. QString sHttpServer ="";
  92. QString sHttpPort = "";
  93. QString sWebsocketServer = "";
  94. QString sWebsocketPort = "";
  95. QString sUseHttps = "";
  96. int nField64 = 0;
  97. std::string sField = "";
  98. g_sysDBProcPtr->BeginGetFields(stmt);
  99. while(!g_sysDBProcPtr->Eof())
  100. {
  101. QString sName = g_sysDBProcPtr->GetFields(0, sField, stmt).c_str();
  102. QString sValue = g_sysDBProcPtr->GetFields(1, sField, stmt).c_str();
  103. if(sName == "log_project_name")
  104. {
  105. sProjectName = sValue;
  106. }
  107. else if(sName == "log_endpoint")
  108. {
  109. sEndpoint = sValue;
  110. }
  111. else if(sName == "log_store")
  112. {
  113. sLogstore = sValue;
  114. }
  115. else if(sName == "http_server")
  116. {
  117. sHttpServer = sValue;
  118. QStringList sVl = sValue.split(".");
  119. if (sVl.count() > 0)
  120. {
  121. g_appInfoPtr->m_sOrgPrefix = sVl[0];
  122. }
  123. }
  124. else if(sName == "httpPort")
  125. {
  126. sHttpPort = sValue;
  127. }
  128. else if(sName == "websocketServer")
  129. {
  130. sWebsocketServer = sValue;
  131. }
  132. else if(sName == "websocketPort")
  133. {
  134. sWebsocketPort = sValue;
  135. }
  136. else if(sName == "useHttps")
  137. {
  138. sUseHttps = sValue;
  139. }
  140. else if (sName == "esc_domain")
  141. {
  142. g_appInfoPtr->m_sEscDomain = sValue;
  143. }
  144. g_sysDBProcPtr->Next(stmt);
  145. }
  146. g_sysDBProcPtr->EndGetFields(stmt);
  147. sSql = QString("select version_id,version_code,ifnull(machine_id,''),ifnull(update_time,'') from t_sysinfo");
  148. if (!g_sysDBProcPtr->QuerySql(sSql.toStdString(), &stmt))
  149. {
  150. popMsg(QString::fromLocal8Bit("加载参数信息失败!"), QString::fromLocal8Bit("系统提示"), this);
  151. // myDebug()<<QString::fromLocal8Bit("查询参数信息失败!");
  152. return;
  153. }
  154. int nField = 0;
  155. g_sysDBProcPtr->BeginGetFields(stmt);
  156. if (!g_sysDBProcPtr->Eof())
  157. {
  158. g_appInfoPtr->m_nVersionId = g_sysDBProcPtr->GetFields(0, nField, stmt);
  159. g_appInfoPtr->m_sVersionCode = g_sysDBProcPtr->GetFields(1, sField, stmt).c_str();
  160. g_appInfoPtr->m_sMachineId = g_sysDBProcPtr->GetFields(2, sField, stmt).c_str();
  161. }
  162. g_sysDBProcPtr->EndGetFields(stmt);
  163. if(sProjectName.isEmpty() || sEndpoint.isEmpty() || sLogstore.isEmpty())
  164. {
  165. //未配置日志参数
  166. }
  167. else
  168. {
  169. g_logPtr = std::make_shared<CLogTrack>(sProjectName, sEndpoint, sLogstore);
  170. }
  171. g_httpBllPtr = std::make_shared<CHttpBll>();
  172. if(sUseHttps == "1")
  173. {
  174. g_httpBllPtr->init(sHttpServer, sHttpPort, true);
  175. }
  176. else
  177. {
  178. g_httpBllPtr->init(sHttpServer, sHttpPort);
  179. }
  180. if (g_appInfoPtr->m_sMachineId == "")
  181. {
  182. if (CCommonTools::IsWow64())
  183. {
  184. QSettings settings(R"(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography)", QSettings::Registry64Format);
  185. g_appInfoPtr->m_sMachineId = settings.value("MachineGuid", "").toString();
  186. }
  187. else
  188. {
  189. QSettings settings(R"(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography)", QSettings::Registry32Format);
  190. g_appInfoPtr->m_sMachineId = settings.value("MachineGuid", "").toString();
  191. }
  192. if (g_appInfoPtr->m_sMachineId == "")
  193. {
  194. g_appInfoPtr->m_sMachineId = CCommonTools::getUuid();
  195. }
  196. sSql = QString("update t_sysinfo set machine_id = '%1'").arg(g_appInfoPtr->m_sMachineId);
  197. if (!g_sysDBProcPtr->ExcuteSql(sSql.toStdString()))
  198. {
  199. popMsg(QString::fromLocal8Bit("保存机器信息失败!"), QString::fromLocal8Bit("系统提示"), this);
  200. //myDebug() << QString::fromLocal8Bit("保存机器信息失败!");
  201. return;
  202. }
  203. }
  204. }
  205. void launcher::showEvent(QShowEvent *event)
  206. {
  207. }
  208. void launcher::on_btn_close_clicked()
  209. {
  210. close();
  211. }
  212. void launcher::initUI()
  213. {
  214. // initEnvInfo();
  215. QDesktopWidget *dekwiget = QApplication::desktop();
  216. setGeometry((dekwiget->width() - g_appInfoPtr->m_fRate*600)/2,
  217. (dekwiget->height() - g_appInfoPtr->m_fRate*340)/2,
  218. g_appInfoPtr->m_fRate*600, g_appInfoPtr->m_fRate*340);
  219. ui->launcher_bg->setGeometry(0, 0, width(), height());
  220. ui->btn_close->setGeometry(width() - g_appInfoPtr->m_fRate*24, 0, g_appInfoPtr->m_fRate*24, g_appInfoPtr->m_fRate*24);
  221. ui->sw_client->setGeometry(0, 0, width() - g_appInfoPtr->m_fRate*24, height());
  222. envCheck *ec = new envCheck;
  223. connect(ec, &envCheck::checkUnpass, this, &launcher::onCheckUnpass);
  224. connect(ec, &envCheck::checkpassed, this, &launcher::onCheckpassed);
  225. connect(ec, &envCheck::sysUpadte, this, &launcher::onSysUpadte);
  226. ui->sw_client->addWidget(ec);
  227. envResult *er = new envResult;
  228. ui->sw_client->addWidget(er);
  229. upgrade *ug = new upgrade;
  230. connect(ug, &upgrade::updateSucceed, this, &launcher::onUpdateSucceed);
  231. connect(ug, &upgrade::exitUpgrade, this, [&](){
  232. close();
  233. });
  234. ui->sw_client->addWidget(ug);
  235. ui->sw_client->setCurrentIndex(0);
  236. ec->startCheck();
  237. }
  238. void launcher::onUpdateSucceed(bool bUpdateOeLauncher)
  239. {
  240. QFileInfo file("client.exe");
  241. QStringList sParam;
  242. if(bUpdateOeLauncher)
  243. {
  244. sParam<<"updateLauncher";
  245. }
  246. else
  247. {
  248. sParam<<"runClient";
  249. }
  250. QProcess::startDetached(file.absoluteFilePath(), sParam);
  251. close();
  252. }
  253. void launcher::onCheckUnpass()
  254. {
  255. envCheck *ev = dynamic_cast<envCheck*>(ui->sw_client->widget(0));
  256. if(ev)
  257. {
  258. QStringList list = ev->unpassList();
  259. envResult *er = dynamic_cast<envResult*>(ui->sw_client->widget(1));
  260. if(er)
  261. {
  262. for(QString unpassStr : list)
  263. {
  264. er->addItem(unpassStr);
  265. }
  266. ui->sw_client->setCurrentIndex(1);
  267. }
  268. }
  269. }
  270. void launcher::onCheckpassed(bool bUpdateVersion)
  271. {
  272. QList<UpdateInfo> sList;
  273. if(bUpdateVersion)
  274. {
  275. UpdateInfo upInfo;
  276. upInfo.nType = 2;
  277. upInfo.sUrl = g_appInfoPtr->m_sUpgradeUrl;
  278. sList.push_back(upInfo);
  279. }
  280. if(sList.count() > 0)
  281. {
  282. ui->sw_client->setCurrentIndex(2);
  283. upgrade *up = dynamic_cast<upgrade*>(ui->sw_client->widget(2));
  284. if(up)
  285. {
  286. up->startUpgrade(sList);
  287. }
  288. }
  289. else
  290. {
  291. QFileInfo file("client.exe");
  292. QStringList sParam;
  293. sParam<<"runClient";
  294. QProcess::startDetached(file.absoluteFilePath(), sParam);
  295. close();
  296. }
  297. }
  298. void launcher::onSysUpadte()
  299. {
  300. close();
  301. }