BootBehavior.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  1. //处理微信小游戏启动逻辑
  2. import BehaviorBase from '../framework/BehaviorBase';
  3. import LogicUnitManager from '../framework/LogicUnitManager';
  4. import DataModelManager from '../framework/DataModelManager';
  5. import ConstDefine from '../model/ConstDefine';
  6. import NetConfig from '../net/NetConfig';
  7. export default class BootBehavior extends BehaviorBase
  8. {
  9. constructor()
  10. {
  11. super('BootBehavior');
  12. this._configData = DataModelManager.getModel('ConfigData');
  13. this._questionInfoModel = DataModelManager.getModel('QuestionInfoModel');
  14. }
  15. // 加载游戏列表
  16. _loadGameList()
  17. {
  18. let self = this;
  19. return new Promise(function (resolve, reject) {
  20. var xhr = new XMLHttpRequest();
  21. console.log('load remote gamelist file ' + NetConfig.gamelistAddress);
  22. xhr["open"]('GET', NetConfig.gamelistAddress);
  23. xhr["onload"] = function () {
  24. if (xhr["status"] == 200) {
  25. resolve(JSON.parse(xhr["response"]));
  26. } else {
  27. reject(Error(xhr["statusText"]));
  28. }
  29. };
  30. xhr["onerror"] = function () {
  31. reject(Error(xhr["statusText"]));
  32. };
  33. xhr["send"]();
  34. })
  35. .catch(function(err)
  36. {
  37. console.log('load remote gamelist file failed');
  38. var config = {"code":0,"msg":null,"data":{"valid":true,"downloadurl":"http://47.92.175.96:90/download/","clientversion":"0","resversion":"0","ios_url":"","wxLogon":0,"isOpenCard":0,"gamelist":[{"KindID":"200","KindName":"斗地主","TypeID":"0","ModuleName":"qipai.land","ClientVersion":"101122049","ResVersion":"0","SortID":"0","KindMark":"3"},{"KindID":"389","KindName":"红中麻将","TypeID":"0","ModuleName":"yule.sparrowhz","ClientVersion":"101122049","ResVersion":"0","SortID":"0","KindMark":"3"}]}};
  39. return config;
  40. // return new Promise(function(resolve,reject){
  41. // console.log('now load local config file');
  42. // cc.loader.loadRes(NetConfig.localConfigAddress,function(err,json){
  43. // if(err)
  44. // {
  45. // console.log('load local config file '+ NetConfig.localConfigAddress + "failed,err=" + err.string);
  46. // reject(new Error('load local config file failed'));
  47. // }
  48. // else
  49. // {
  50. // console.log('load local config file success');
  51. // resolve(json);
  52. // }
  53. // });
  54. // });
  55. }).then(function(cfgObj)
  56. {
  57. console.log("gamelist:" + JSON.stringify(cfgObj))
  58. self._configData.setGameListData(cfgObj);
  59. }).catch(function(err)
  60. {
  61. console.log('load gamelist err');
  62. throw err;
  63. });
  64. }
  65. //加载游戏配置
  66. _loadCfg()
  67. {
  68. let self = this;
  69. return new Promise(function (resolve, reject) {
  70. var xhr = new XMLHttpRequest();
  71. console.log('load remote config file ' + NetConfig.configAddress);
  72. xhr["open"]('GET', NetConfig.configAddress);
  73. xhr["onload"] = function () {
  74. if (xhr["status"] == 200) {
  75. resolve(JSON.parse(xhr["response"]));
  76. } else {
  77. reject(Error(xhr["statusText"]));
  78. }
  79. };
  80. xhr["onerror"] = function () {
  81. reject(Error(xhr["statusText"]));
  82. };
  83. xhr["send"]();
  84. })
  85. .catch(function(err)
  86. {
  87. console.log('load remote config file failed');
  88. return new Promise(function(resolve,reject){
  89. console.log('now load local config file');
  90. cc.loader.loadRes(NetConfig.localConfigAddress,function(err,json){
  91. if(err)
  92. {
  93. console.log('load local config file '+ NetConfig.localConfigAddress + "failed,err=" + err.string);
  94. reject(new Error('load local config file failed'));
  95. }
  96. else
  97. {
  98. console.log('load local config file success');
  99. resolve(json);
  100. }
  101. });
  102. });
  103. }).then(function(cfgObj)
  104. {
  105. self._configData.setConfigDataObject(cfgObj);
  106. }).catch(function(err)
  107. {
  108. console.log('load cfg err');
  109. throw err;
  110. });
  111. }
  112. //加载游戏题目分类配置
  113. _loadLevelCfg()
  114. {
  115. let self = this;
  116. return new Promise(function (resolve, reject) {
  117. var xhr = new XMLHttpRequest();
  118. console.log('load level remote config file ' + NetConfig.remoteQuestionLevelAddress);
  119. xhr["open"]('GET', NetConfig.remoteQuestionLevelAddress);
  120. xhr["onload"] = function () {
  121. if (xhr["status"] == 200) {
  122. resolve(JSON.parse(xhr["response"]));
  123. } else {
  124. reject(Error(xhr["statusText"]));
  125. }
  126. };
  127. xhr["onerror"] = function () {
  128. reject(Error(xhr["statusText"]));
  129. };
  130. xhr["send"]();
  131. })
  132. .catch(function(err)
  133. {
  134. console.log('load remote level config file failed');
  135. return new Promise(function(resolve,reject){
  136. console.log('now load local config file');
  137. cc.loader.loadRes(NetConfig.localQuestionLevelAddress,function(err,json){
  138. if(err)
  139. {
  140. console.log('load level local config file '+ NetConfig.localQuestionLevelAddress + "failed,err=" + err.string);
  141. reject(new Error('load level local config file failed'));
  142. }
  143. else
  144. {
  145. console.log('load level local config file success');
  146. resolve(json);
  147. }
  148. });
  149. });
  150. }).then(function(cfgObj)
  151. {
  152. self._questionInfoModel.setLevelData(cfgObj);
  153. }).catch(function(err)
  154. {
  155. console.log('load level cfg err');
  156. throw err;
  157. });
  158. }
  159. //打开微信小游戏界面上三个点里面的转发选项
  160. _openShareOption()
  161. {
  162. window["wx"]["onShareAppMessage"]((function () {
  163. this._wxUserInfo = DataModelManager.getModel('PlayerInfoModel').getSelfWXPlayerInfo();
  164. var query = 'method=' + ConstDefine.MenuShareMessage.shareType + '&wxPlayerInfo=' + JSON.stringify( this._wxUserInfo);
  165. console.log("onShareAppMessage query:" + query);
  166. return {
  167. "title": ConstDefine.MenuShareMessage.title,
  168. "imageUrl": ConstDefine.MenuShareMessage.url,
  169. "query": query,
  170. "success": function (res) {
  171. console.log("onShareAppMessage succ");
  172. },
  173. "fail": function () {
  174. console.log("onShareAppMessage fail");
  175. },
  176. "complete": function() {
  177. console.log("onShareAppMessage complete complete");
  178. }
  179. }
  180. }).bind(this));
  181. window["wx"]["showShareMenu"]({
  182. "withShareTicket": true,
  183. "success": function () {
  184. console.log("showShareMenu success");
  185. }
  186. });
  187. window["wx"]["onShow"]((function (res) {
  188. let urlParams = {};
  189. let query = res["query"] || {};
  190. urlParams["scene"] = parseInt(res["scene"]) || 0;
  191. console.log('res["scene"]:' + parseInt(res["scene"]) || 0);
  192. urlParams["shareTicket"] = res["shareTicket"];
  193. console.log('res["shareTicket"]:' + res["shareTicket"]);
  194. urlParams["query"] = res["query"];
  195. if(query.method != undefined && query.method!=null)
  196. {
  197. console.log('urlParams = ' + JSON.stringify(urlParams));
  198. DataModelManager.getModel('BootOptionData').setBootOptionData(urlParams);
  199. let loginLogic = LogicUnitManager.getBehavior('LoginBehavior');
  200. if(loginLogic)
  201. {
  202. loginLogic.checkBoot();
  203. loginLogic.checkGroupRank();
  204. }
  205. }
  206. }).bind(this));
  207. return Promise.resolve(0);
  208. }
  209. _urlParamStr(paramStr, param, decode) {
  210. if (!paramStr) {
  211. return;
  212. }
  213. decode = decode || true;
  214. var parts = paramStr.split('&');
  215. for (var i = 0; i < parts.length; i++) {
  216. var nv = parts[i].split('=');
  217. if (!nv[0]) continue;
  218. param[nv[0]] = nv[1] ? decode ? decodeURIComponent(nv[1]) : nv[1] : true;
  219. }
  220. }
  221. _getQueryFromUrl(url) {
  222. if (!url) {
  223. return "";
  224. }
  225. var queryPos = url.indexOf("?");
  226. return queryPos !== -1 ? url.substr(queryPos + 1) : "";
  227. };
  228. //分析微信小游戏启动参数
  229. _parserWechatGameBootOption()
  230. {
  231. let optionData = window["wx"]["getLaunchOptionsSync"]();
  232. if(optionData)
  233. {
  234. let urlParams = {};
  235. let query = optionData["query"] || {};
  236. console.log('optionData = ' + JSON.stringify(optionData));
  237. let queryQRCode = {};
  238. let paramQRCode = query["q"];
  239. console.log("paramQRCode:" + paramQRCode);
  240. urlParams["scene"] = parseInt(optionData["scene"]) || 0;
  241. console.log('optionData["scene"]:' + parseInt(optionData["scene"]) || 0)
  242. urlParams["shareTicket"] = optionData["shareTicket"];
  243. console.log('optionData["shareTicket"]:' + optionData["shareTicket"])
  244. urlParams["contextTicket"] = optionData["contextTicket"];
  245. console.log('optionData["contextTicket"]:' + optionData["contextTicket"])
  246. urlParams["query"] = optionData["query"];
  247. console.log('urlParams = ' + JSON.stringify(urlParams));
  248. //console.log('optionData[]query=' + tsdk.objectInspector(optionData["query"]));
  249. DataModelManager.getModel('BootOptionData').setBootOptionData(urlParams);
  250. }
  251. return Promise.resolve(0);
  252. }
  253. onBoot()
  254. {
  255. //this._loadCfg();
  256. //this._loadLevelCfg();
  257. // this._loadGameList()
  258. console.log('BootBehavior onBoot Call');
  259. if(CC_WECHATGAME)
  260. {
  261. //return this._loadCfg().then((function(ret){
  262. return Promise.all([this._parserWechatGameBootOption(),this._openShareOption()]);
  263. // }).bind(this)).catch(function(err){
  264. // console.log('error ouccur');
  265. // });
  266. }
  267. // else
  268. // {
  269. // return Promise.reject(Error('BootBehavior boot failed,because it is not in wetchatgame'));
  270. // }
  271. }
  272. }
  273. window['onGameBoot'] = function()
  274. {
  275. let logic = LogicUnitManager.getBehavior('BootBehavior');
  276. console.log('window onGameBoot');
  277. if(logic)
  278. {
  279. return logic.onBoot();
  280. }
  281. else
  282. {
  283. return Promise.reject(Error('onGameBoot,BootBehavior is null'));
  284. }
  285. };