UiUpdatePatch.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:8k
源码类别:

模拟服务器

开发平台:

C/C++

  1. /*****************************************************************************************
  2. // 界面--程序更新窗口
  3. // Copyright : Kingsoft 2002
  4. // Author :   Wooy(Wu yue)
  5. // CreateTime: 2002-8-12
  6. *****************************************************************************************/
  7. #include "KWin32.h"
  8. #include "KIniFile.h"
  9. #include "../Elem/WndMessage.h"
  10. #include "../Elem/Wnds.h"
  11. #include "../UiBase.h"
  12. #include "../UiShell.h"
  13. #include "UiInit.h"
  14. #include "UiLoginBg.h"
  15. #include "UiUpdatePatch.h"
  16. #define SCHEME_INI_UPDATAPATCH "下载补钉.ini"
  17. //define for PatchSehll Dll Name;
  18. #define PATCHSHELL_LIB "SUpdate.DLL"
  19. //define for PatchSehll function Name;
  20. #define PATCHSHELL_FN_UPDATE "SwordUpdate"
  21. #define PATCHSHELL_FN_GETRESULT "SwordUpdateGetResult"
  22. #define PATCHSHELL_FN_REGLAUNCHEAPPNAME "RegisterAppLaunchedAfterUpdate"
  23. KUiUpdataPatch* KUiUpdataPatch::m_pSelf = NULL;
  24. //--------------------------------------------------------------------------
  25. // 功能:构造函数
  26. //--------------------------------------------------------------------------
  27. KUiUpdataPatch::KUiUpdataPatch()
  28. {
  29. m_PatchShell = NULL;
  30. m_fnSwordUpdateGetResult = NULL;
  31. m_bQuit = false;
  32. }
  33. //--------------------------------------------------------------------------
  34. // 功能:析构函数
  35. //--------------------------------------------------------------------------
  36. KUiUpdataPatch::~KUiUpdataPatch()
  37. {
  38. m_pSelf = NULL;
  39. if (m_PatchShell)
  40. FreeLibrary(m_PatchShell);
  41. }
  42. //--------------------------------------------------------------------------
  43. // 功能:打开窗口,返回唯一的一个类对象实例
  44. //--------------------------------------------------------------------------
  45. KUiUpdataPatch* KUiUpdataPatch::OpenWindow()
  46. {
  47. if (m_pSelf == NULL)
  48. {
  49. m_pSelf = new KUiUpdataPatch;
  50. if (m_pSelf)
  51. {
  52. m_pSelf->Initialize();
  53. m_pSelf->Show();
  54. }
  55. }
  56. return m_pSelf;
  57. }
  58. //--------------------------------------------------------------------------
  59. // 功能:关闭窗口
  60. //--------------------------------------------------------------------------
  61. void KUiUpdataPatch::CloseWindow()
  62. {
  63. if (m_pSelf)
  64. {
  65. m_pSelf->Destroy();
  66. m_pSelf = NULL;
  67. }
  68. }
  69. //--------------------------------------------------------------------------
  70. // 功能:初始化
  71. //--------------------------------------------------------------------------
  72. int KUiUpdataPatch::Initialize()
  73. {
  74. AddChild(&m_MsgList);
  75. AddChild(&m_MsgScroll);
  76. AddChild(&m_CancelBtn);
  77. AddChild(&m_StatusText);
  78. AddChild(&m_Progress);
  79. m_MsgList.SetScrollbar(&m_MsgScroll);
  80. char Scheme[256];
  81. g_UiBase.GetCurSchemePath(Scheme, 256);
  82. m_pSelf->LoadScheme(Scheme);
  83. Wnd_AddWindow(this, true);
  84. //to be delete
  85. {
  86. SetCloseParam("★★点确定按钮继续!★★", false, true);
  87. return true;
  88. }
  89. if (m_PatchShell == NULL)
  90. m_PatchShell =LoadLibrary(PATCHSHELL_LIB);
  91. if (m_PatchShell == NULL)
  92. {
  93. SetCloseParam("无法加载升级程序,点确定退出。", true, true);
  94. return false;
  95. }
  96. fnSwordUpdate fnUpDate;
  97. fnUpDate=(fnSwordUpdate)GetProcAddress(m_PatchShell,PATCHSHELL_FN_UPDATE);
  98. m_fnSwordUpdateGetResult=(fnSwordUpdateGetResult)GetProcAddress(m_PatchShell,PATCHSHELL_FN_GETRESULT);
  99. if (fnUpDate == NULL || m_fnSwordUpdateGetResult==NULL)
  100. {
  101. SetCloseParam("升级程序版本内容不对,点确定退出。", true, true);
  102. return false;
  103. }
  104. if(fnUpDate(0,0) != SWORDUPDATE_R_LAUCHING)
  105. {
  106. SetCloseParam("可能升级程序已经运行,点确定退出。", true, true);
  107. return false;
  108. }
  109. return true;
  110. }
  111. //--------------------------------------------------------------------------
  112. // 功能:载入界面方案
  113. //--------------------------------------------------------------------------
  114. void KUiUpdataPatch::LoadScheme(const char* pScheme)
  115. {
  116. char Buff[128];
  117. KIniFile Ini;
  118. sprintf(Buff, "%s\%s", pScheme, SCHEME_INI_UPDATAPATCH);
  119. if (Ini.Load(Buff))
  120. {
  121. KWndShowAnimate::Init(&Ini, "Main");
  122. int nFrame;
  123. Ini.GetInteger("Main", "LoginBgFrame", 0, &nFrame);
  124. KUiLoginBackGround::SetFrame(nFrame);
  125. m_MsgList  .Init(&Ini, "MsgList");
  126. m_MsgScroll.Init(&Ini, "MsgScroll");
  127. m_OkBtn    .Init(&Ini, "OkBtn");
  128. m_CancelBtn   .Init(&Ini, "CancelBtn");
  129. m_StatusText  .Init(&Ini, "StatusText");
  130. m_Progress .Init(&Ini, "Progress");
  131. m_MsgList  .SetCapability(100);
  132. //to be delete
  133. {
  134. m_MsgList.AddOneMessage("------------------------", -1);
  135. m_MsgList.AddOneMessage("★★ 下载补丁被忽略 ★★", -1);
  136. m_MsgList.AddOneMessage("------------------------", -1);
  137. m_MsgList.AddOneMessage(" 剑侠情缘,永远的情缘。 ", -1);
  138. m_MsgList.AddOneMessage("------------------------", -1);
  139. m_MsgList.AddOneMessage("不断传来Money的剑侠网络!", -1);
  140. m_MsgList.AddOneMessage("------------------------", -1);
  141. m_MsgList.AddOneMessage("Killthegod万岁,万万岁!", -1);
  142. m_MsgList.AddOneMessage("------------------------", -1);
  143. m_MsgList.AddOneMessage("  许吴合作,其利断金!  ", -1);
  144. m_MsgList.AddOneMessage("------------------------", -1);
  145. m_MsgList.AddOneMessage("  Enjoy EnjoyableWooy ! n  Enjoy your life ! ", -1);
  146. m_MsgList.AddOneMessage("------------------------", -1);
  147. }
  148. }
  149. }
  150. //--------------------------------------------------------------------------
  151. // 功能:窗体绘制
  152. //--------------------------------------------------------------------------
  153. void KUiUpdataPatch::Breathe()
  154. {
  155. if (m_fnSwordUpdateGetResult)
  156. {
  157. char sInformation[256];
  158. int nMsgLen = 256;
  159. int nProgressPercent = 0;
  160. int nRet = m_fnSwordUpdateGetResult(sInformation, &nMsgLen, &nProgressPercent, 0);
  161. //添加新的消息
  162. if (nMsgLen > 0)
  163. m_MsgList.AddOneMessage(sInformation, nMsgLen);
  164. //更新进展条
  165. m_Progress.SetPart(nProgressPercent, 100);
  166. switch(nRet)
  167. {
  168. case SWORDUPDATE_R_FINISHED:
  169. case SWORDUPDATE_R_NEEDLESS:
  170. OnFinished(false);
  171. break;
  172. case SWORDUPDATE_R_FINISHED_UPDATE_SELF:
  173. case SWORDUPDATE_R_FINISHED_WAIT:
  174. OnFinished(true);
  175. break;
  176. case SWORDUPDATE_R_ERROR:
  177. SetCloseParam("升级程序执行过程中发生错误,点确定退出。", true, true);
  178. break;
  179. }
  180. }
  181. }
  182. //--------------------------------------------------------------------------
  183. // 功能:窗口函数
  184. //--------------------------------------------------------------------------
  185. int KUiUpdataPatch::WndProc(unsigned int uMsg, unsigned int uParam, int nParam)
  186. {
  187. switch(uMsg)
  188. {
  189. case WND_N_BUTTON_CLICK:
  190. if(uParam == (unsigned int)(KWndWindow*)&m_OkBtn ||
  191. uParam == (unsigned int)(KWndWindow*)&m_CancelBtn)
  192. {
  193. if (m_bQuit)
  194. {
  195. CloseWindow();
  196. UiPostQuitMsg();
  197. }
  198. else
  199. {
  200. CloseWindow();
  201. KUiInit::OpenWindow();
  202. }
  203. }
  204. break;
  205. case WND_N_SCORLLBAR_POS_CHANGED:
  206. if (uParam == (unsigned int)(KWndWindow*)&m_MsgScroll)
  207. m_MsgList.SetFirstShowLine(nParam);
  208. break;
  209. default:
  210. return KWndShowAnimate::WndProc(uMsg, uParam, nParam);
  211. }
  212. return 0;
  213. }
  214. //--------------------------------------------------------------------------
  215. // 功能:升级结束
  216. //--------------------------------------------------------------------------
  217. void KUiUpdataPatch::OnFinished(bool bRestart)
  218. {
  219. if (bRestart && m_PatchShell)
  220. {
  221. fnRegisterAppLaunchedAfterUpdate fnRegApp;
  222. fnRegApp = (fnRegisterAppLaunchedAfterUpdate)GetProcAddress(m_PatchShell,PATCHSHELL_FN_REGLAUNCHEAPPNAME);
  223. if (fnRegApp != NULL)
  224. {
  225. char sAppName[255];
  226. GetModuleFileName(NULL,sAppName,sizeof(sAppName));
  227. fnRegApp(sAppName,"");
  228. SetCloseParam("升级完毕,游戏需要重启,请点确定按钮。", true, true);
  229. }
  230. else
  231. SetCloseParam("升级完毕,点确定按钮,游戏将退出。请手工重启游戏。", true, true);
  232. }
  233. else
  234. SetCloseParam("升级完毕,点确定按钮继续游戏。", false, true);
  235. }
  236. void KUiUpdataPatch::SetCloseParam(const char* pInfo, bool bQuit, bool bOk)
  237. {
  238. m_fnSwordUpdateGetResult = NULL;
  239. m_bQuit = bQuit;
  240. if (pInfo)
  241. m_StatusText.SetText(pInfo);
  242. if (bOk)
  243. {
  244. m_CancelBtn.LeaveAlone();
  245. m_OkBtn.LeaveAlone();
  246. AddChild(&m_OkBtn);
  247. }
  248. else
  249. {
  250. m_CancelBtn.LeaveAlone();
  251. m_OkBtn.LeaveAlone();
  252. AddChild(&m_CancelBtn);
  253. }
  254. }