MoreGameData.ts 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. /**
  2. * @description 互推数据类
  3. * @author kaka
  4. */
  5. import { Data } from "../../../mk/data/Data";
  6. import JsbSystem from "../../../mk/system/JsbSystem";
  7. export class MoreGameData extends Data {
  8. /**推荐游戏信息 */
  9. private _moreGameList = null
  10. set moreGameList(value) {
  11. this._moreGameList = value;
  12. this.init_moreGameList = true;
  13. }
  14. get moreGameList() {
  15. return this._moreGameList;
  16. }
  17. /** 刷新标志位 */
  18. init_moreGameList = false;
  19. /** 下载中列表 */
  20. private static downLoadTaskMap: Map<string, DownloadTaskClazz> = new Map<string, any>()
  21. /** 测试数据 */
  22. private testData = {
  23. "normal": [
  24. {
  25. "nebulaAppId": "wxd2e694c55d457ded",
  26. "title": "爱上切水果",
  27. "introduction": "切水果、切水果、切、切、切!",
  28. "downloadUrl": "https://xcx-box.oss-cn-hangzhou.aliyuncs.com/hotgame/haocheyijia/hutui/CutFruit.apk",
  29. "packageName": "com.aries.asqsg.mz",
  30. "icon": "https://oss.duiweize.com/fission/5vp7CPeadkABlgIe.png",
  31. "banner": "https://oss.duiweize.com/fission/EXrqiYF6BkC1ZsZf.png",
  32. },
  33. {
  34. "nebulaAppId": "wx74fee17e08a29836",
  35. "title": "炮火掠夺",
  36. "introduction": "大炮一响,黄金万两!",
  37. "downloadUrl": "https://xcx-box.oss-cn-hangzhou.aliyuncs.com/hotgame/haocheyijia/hutui/FirePillage.apk",
  38. "packageName": "com.aries.firepillage.mz",
  39. "icon": "https://oss.duiweize.com/fission/BZ9ZUicxgCbWb33D.png",
  40. "banner": "https://oss.duiweize.com/fission/vGPWCE2tuGZwLSJH.png",
  41. }
  42. ],
  43. "banner": [
  44. {
  45. "nebulaAppId": "wx07895e2f78748daf",
  46. "title": "豪车大富翁",
  47. "introduction": "豪车、金钱、美女,你要的这里都有!",
  48. "downloadUrl": "https://xcx-box.oss-cn-hangzhou.aliyuncs.com/hotgame/haocheyijia/hutui/HundredsOfMillions.apk",
  49. "packageName": "org.cocos2d.hundredsofmillion.mk.mz",
  50. "icon": "https://oss.duiweize.com/fission/fviQN9OpUmmqpTjU.png",
  51. "banner": "https://oss.duiweize.com/fission/eWUxr3OySHIohqtB.png",
  52. "banner2": "https://oss.duiweize.com/fission/eWUxr3OySHIohqtB.png",
  53. },
  54. {
  55. "nebulaAppId": "wx22b3f0f8005f0e51",
  56. "title": "航海传奇",
  57. "introduction": " 战舰、短裙、红包,你想要的都有!",
  58. "downloadUrl": "https://xcx-box.oss-cn-hangzhou.aliyuncs.com/hotgame/haocheyijia/hutui/LegendOfNavigation.apk",
  59. "packageName": "com.aries.hhcq.mz",
  60. "icon": "https://oss.duiweize.com/fission/ZqDsgbj9PT94RcG0.png",
  61. "banner": "https://oss.duiweize.com/fission/goS05API8LtqB0QH.png",
  62. "banner2": "https://oss.duiweize.com/fission/goS05API8LtqB0QH.png",
  63. }
  64. ]
  65. }
  66. /** 初始化数据 */
  67. init() {
  68. this.sendRecommendList();
  69. }
  70. async sendRecommendList() {
  71. if (this._moreGameList == null || this._moreGameList == undefined) {
  72. let data = {};
  73. let response = await mk.http.sendData('/fission/recommendList', data);
  74. if (response.errcode != 0) {
  75. return;
  76. }
  77. this.moreGameList = response.data;
  78. }
  79. else {
  80. this.init_moreGameList = true;
  81. }
  82. // //test
  83. // this.moreGameList = this.testData;
  84. }
  85. /**上报 */
  86. sendAppDownloadLog(downLoadAppId: string) {
  87. let data = { "downloadAppId": downLoadAppId };
  88. let response = mk.http.sendRequest('/fission/appDownloadLog', 'POST', JSON.stringify(data));
  89. }
  90. /**
  91. * 下载
  92. * @param data
  93. * @returns 下载任务
  94. */
  95. createNewTask(data): DownloadTaskClazz {
  96. let name = data.nebulaAppId + ".apk"
  97. let url = data.downloadUrl
  98. let packageName = data.packageName
  99. if (packageName != "") {
  100. let isExist = JsbSystem.ifCanStartGame(packageName, true)
  101. if (isExist) {
  102. // JsbSystem.sendEvent('hutuiEventLaunch_' + data.nebulaAppId, "互推启动" + data.title, 'hutuiEventLaunch')
  103. //判断在原生环境下存在就直接启动
  104. return null
  105. }
  106. }
  107. if (JsbSystem.isFileExist(name)) {
  108. JsbSystem.installApk(name);
  109. return null;
  110. }
  111. if (MoreGameData.downLoadTaskMap[data.nebulaAppId]) {
  112. mk.tip.pop('正在下载中...');
  113. return null
  114. }
  115. mk.tip.pop('开始下载...');
  116. let downLoadTask = new DownloadTaskClazz(0, 0, data.nebulaAppId, null)
  117. let curTask = JsbSystem.downFile2Local(url, data.nebulaAppId + ".apk", (locaPath) => {
  118. // LogUtil.logV("sendAppDownloadLog", "success")
  119. downLoadTask.progress = -2
  120. this.sendAppDownloadLog(data.nebulaAppId)
  121. setTimeout(() => {
  122. JsbSystem.installApk(name)
  123. }, 1)
  124. }, () => {
  125. downLoadTask.progress = -1
  126. MoreGameData.downLoadTaskMap[data.nebulaAppId] = null
  127. mk.tip.pop('下载失败,请稍后再试');
  128. }, (task: jsb.DownloaderTask, bytesReceived: number, totalBytesReceived: number, totalBytesExpected: number) => {
  129. downLoadTask.progress = bytesReceived
  130. downLoadTask.totalBytesReceives = totalBytesReceived
  131. })
  132. downLoadTask.downloadTask = curTask
  133. MoreGameData.downLoadTaskMap[data.nebulaAppId] = downLoadTask
  134. // AdM.onSendEvent('hutuiEventDown_' + data.nebulaAppId, "互推下载" + data.title, 'hutuiEventDown')
  135. return downLoadTask
  136. }
  137. getTaskInfo(appId): DownloadTaskClazz {
  138. return MoreGameData.downLoadTaskMap[appId]
  139. }
  140. // /** 随机获取推荐位游戏 展示在更多游戏界面中部 可能是空*/
  141. // getRandomBanner() {
  142. // if (!this.moreGameList.banner || this.moreGameList.banner.length <= 0) {
  143. // return null
  144. // }
  145. // let index = Utils.rnd(0, this.moreGameList.banner.length - 1)
  146. // let data = this.moreGameList.banner[index]
  147. // return data
  148. // }
  149. /** 随机获取信息流位游戏 展示在十倍领取*/
  150. getRandomSteam() {
  151. if (!this.moreGameList) {
  152. return null
  153. }
  154. let index = mk.math.random(0, this.moreGameList.stream.length - 1)
  155. let data = this.moreGameList.stream[index]
  156. return data
  157. }
  158. /** 随机获取底部位游戏 展示在更多游戏界面列表小图*/
  159. getRandomNormal() {
  160. if (!this.moreGameList) {
  161. return null
  162. }
  163. let index = mk.math.random(0, this.moreGameList.normal.length - 1)
  164. let data = this.moreGameList.normal[index]
  165. return data
  166. }
  167. /** 弹出互推红包弹窗 */
  168. popMoreGamePopNode() {
  169. if (Math.random() <= gData.gameData.configs.globalCfg.popMoreGame) {
  170. mk.ui.openPanel('module/moreGame/moreGamePopNode');
  171. }
  172. }
  173. }
  174. /** 下载任务 */
  175. class DownloadTaskClazz {
  176. private _progress = 0
  177. private _totalBytesReceives = 0
  178. private _nebulaAppId = ""
  179. private _downloadTask = null
  180. constructor(progress, totalBytesReceives, nebulaAppId, downloadTask) {
  181. this._progress = progress
  182. this._totalBytesReceives = totalBytesReceives
  183. this._nebulaAppId = nebulaAppId
  184. this._downloadTask = downloadTask
  185. }
  186. public get progress(): number {
  187. return this._progress
  188. }
  189. public set progress(progress: number) {
  190. this._progress = progress
  191. }
  192. public get totalBytesReceives(): number {
  193. return this._totalBytesReceives
  194. }
  195. public set totalBytesReceives(totalBytesReceives: number) {
  196. this._totalBytesReceives = totalBytesReceives
  197. }
  198. public get downloadTask(): any {
  199. return this._downloadTask
  200. }
  201. public set downloadTask(downloadTask: any) {
  202. this._downloadTask = downloadTask
  203. }
  204. }