launcher.cpp 9.1 KB

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