CheckUpdate.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. <?php
  2. /* * **************************************************
  3. * 此代码为员工在公司工作期间创作.
  4. * 使用权和所有权归属于公司和员工共有.
  5. * 收益的权利归属于公司.
  6. * ——石家庄龙游科技有限公司
  7. * ************************************************** */
  8. namespace loyalsoft;
  9. include_once __DIR__ . '/../../main.php';
  10. class UpdateRetInfo {
  11. public $err = 0;
  12. public $msg = "";
  13. public $newVer = "";
  14. public $cdn = "";
  15. /**
  16. * @var string 整包更新地址
  17. */
  18. public $fullDownloadPage = "";
  19. /**
  20. * @var \sm_clientVersionHistory 版本信息
  21. */
  22. public $versionInfo = null;
  23. }
  24. /**
  25. * 检查更新(基于和王解的update模块的约定)
  26. * @author gwang
  27. * @version 1.0.0 Created by wanggangzero at 2020.4.27 13:48:33.
  28. */
  29. class CheckUpdate {
  30. /**
  31. * 打印消息并且停止游戏
  32. */
  33. const HaltWithMsg = false;
  34. const Md5_file = "UpdateFile";
  35. static function CDN_Root() {
  36. if (GAME_ONLINE) {
  37. return "https://1105051445-1251008001.cos.ap-shanghai.myqcloud.com/cdn/";
  38. return "http://115.159.121.129/ylsj2019/CDN/";
  39. } else {
  40. return "http://192.168.10.86/ylsj2019/CDN/";
  41. }
  42. }
  43. /**
  44. * 检查客户端版本是否需要强制更新
  45. * @param Req $req
  46. * @return int ErrCode
  47. */
  48. public static function Check() {
  49. $clientVer = self::GetClientVersion(); # 客户端版本号
  50. $platform = self::GetClientPlatform(); # 客户端平台(安卓/IOS)
  51. $ret = new UpdateRetInfo(); # 返回值
  52. $url = self::CDN_Root() . self::Md5_file . $platform . ".json"; # 资源文件MD5列表
  53. $lisJson = HttpUtil::makeRequest($url, array(), array(), array(), "get"); # 取CDN上版本列表
  54. if (isset($lisJson["result"]) && $lisJson["result"]) {
  55. $fileList = JsonUtil::decode($lisJson["msg"]);
  56. $newVer = $fileList->Version; # 取出最新版本号
  57. $channel = self::GetClientChannel(); # 取出客户端的渠道字符串
  58. $ret->versionInfo = GameConfig::clientVersionHistory_getItem($newVer);
  59. $ret->newVer = $newVer;
  60. $ret->cdn = self::CDN_Root();
  61. $ret->fullDownloadPage = self::GetFullDownloadPage($channel);
  62. if (($newVer - $clientVer) >= 10 # # 版本号差异大于10=>整包更
  63. || $clientVer < 7 # 临时代码 2021.8.20 后面更新的时候需要注释掉
  64. ) {
  65. $ret->err = ErrCode::clientversionlow_err; # 返回错误码,强制更新1
  66. $ret->msg = "发现新版本,只有更新才能进入游戏。是否立即更新?";
  67. } else if (self::HaltWithMsg # # 显示消息并且退出游戏
  68. || $clientVer < 5 # 临时代码 2021.8.20 后面更新的时候需要注释掉
  69. ) {
  70. $ret->msg = "sorry, 服务暂停.";
  71. $ret->err = ErrCode::clientPrintMsg_Halt;
  72. } else if (($newVer - $clientVer) > 0) { # # 修订版本号不一致, 提示更新
  73. $ret->err = ErrCode::clientnewversion_msg;
  74. $ret->msg = "需要更新部分资源文件,是否立即更新?";
  75. } else {
  76. $ret->err = ErrCode::ok; # 平安无事
  77. $ret->msg = "平安无事";
  78. }
  79. } else { # 检查更新失败
  80. $ret->err = 1031;
  81. $ret->msg = "检查更新失败!";
  82. }
  83. return $ret; # 返回
  84. }
  85. /**
  86. * 读取参数中的客户端版本
  87. * @return int
  88. */
  89. static function GetClientVersion() {
  90. $valueMap = query_paras(); // array
  91. if (!is_array($valueMap)) {
  92. exit("无参数");
  93. }
  94. $clientVer = "";
  95. if (isset($valueMap["clientVer"])) {
  96. $clientVer = urldecode($valueMap['clientVer']);
  97. } else {
  98. exit("缺少参数 'clientVer'!");
  99. }
  100. return intval($clientVer);
  101. }
  102. /**
  103. * 读取参数中的客户端平台(Android/IOS)
  104. * @return string
  105. */
  106. static function GetClientPlatform() {
  107. $valueMap = query_paras(); // array
  108. if (!is_array($valueMap)) {
  109. exit("无参数");
  110. }
  111. $plat = "";
  112. if (isset($valueMap["plat"])) {
  113. $plat = urldecode($valueMap['plat']);
  114. } else {
  115. exit("缺少参数 'plat'!");
  116. }
  117. return $plat;
  118. }
  119. /**
  120. * 读取参数中的客户端渠道(Taptap/Apple/yyb/UC/huawei/xiaomi/vivo/oppo...)
  121. * @return string
  122. */
  123. static function GetClientChannel() {
  124. $valueMap = query_paras(); // array
  125. if (!is_array($valueMap)) {
  126. exit("无参数");
  127. }
  128. $plat = "";
  129. if (isset($valueMap["channel"])) {
  130. $plat = urldecode($valueMap['channel']);
  131. } else {
  132. exit("缺少参数 'channel'!");
  133. }
  134. return $plat;
  135. }
  136. /**
  137. * 获取对应渠道的整包下载地址
  138. * @param type $channel
  139. * @return string
  140. */
  141. static function GetFullDownloadPage($channel) {
  142. $url = "https://www.taptap.com/developer/21413"; # taptap测试服
  143. switch ($channel) {
  144. case "TapTap";
  145. // $url = "https://www.taptap.com/app/68388"; # 正式服
  146. $url = "https://www.taptap.com/developer/21413"; # 测试服
  147. $url = "https://d-ve.tapimg.com/f/202108/20/a/86774789f0765df4b911650c163e9e64?t=1629456610&sign=aeda47ad1860f413c5e7bcfcef2f590d"; # 测试直接下载文件
  148. $url = "https://www.taptap.com/app/221344"; # test 1.0.7
  149. break;
  150. default :
  151. $url = "https://www.taptap.com/developer/21413"; # taptap测试服
  152. break;
  153. }
  154. return $url;
  155. }
  156. }
  157. echo(JsonUtil::encode(CheckUpdate::Check())); # 打印json给客户端