dapp.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. import gameToast from "../Network/gameToast"
  2. import utils from "../Network/netUtils";
  3. cc.Class({
  4. extends: cc.Component,
  5. properties: {
  6. },
  7. // LIFE-CYCLE CALLBACKS:
  8. onLoad() {
  9. // cc.view.enableAutoFullScreen(false);
  10. cc.game.addPersistRootNode(this.node);
  11. async function dappInit() {
  12. console.log("初始化 dappInit");
  13. let dapp = GlobalD.dapp = new Dapp()
  14. try {
  15. const isTestNet = window['isTestNet'];
  16. // console.log('-----------开始初始化dapp!-----------');
  17. // console.log('isTestNet:' + window['isTestNet']);
  18. console.log('host: ' + window['dappHost']);
  19. // console.log('dappWss: ' + window['dappWss']);
  20. // console.log('-----------以上是相关设置-----------');
  21. await dapp.init(isTestNet)
  22. console.log("用户当前钱包地址:" + dapp.getAddress()) // 初始化成功,得到用户当前钱包地址
  23. dapp.onAccountChanged((account) => {
  24. console.log('当前钱包地址发生变化', account.address) // 用户钱包地址即为登录账户,使用过程中用户可以切换钱包地址,即游戏要进行当前地址退出登录,新地址重新登录的操作
  25. // this.address = account.address
  26. //跳回login 页面
  27. cc.director.loadScene('Login', function () {
  28. //重新初始化信息
  29. console.log('onAccountChanged Login');
  30. dappInit();
  31. }.bind(this));
  32. })
  33. dapp.onNetworkChanged((node) => {
  34. console.log('当前钱包节点发生变化', node) // 切换网络,一般可以不处理,实际用户端一般不会切换
  35. //跳回login 页面
  36. cc.director.loadScene('Login', function () {
  37. //重新初始化信息
  38. console.log('onNetworkChanged Login');
  39. dappInit();
  40. }.bind(this));
  41. })
  42. // 获取用户信息
  43. const { err, res } = await dapp.userInfo()
  44. if (err === null) {
  45. // 返回成功,见下面消息体
  46. // console.log(res)
  47. GlobalD.Dapp.UserInfo = res;
  48. //测试
  49. // GlobalD.Dapp.UserInfo.agent_level = 2;
  50. // GameNet.getInstance().init(res.id, (data) => {
  51. // console.log('GameNet:' + data);
  52. // }, _self);
  53. const dappLoginData = await dapp.getLoginSign();
  54. GlobalD.Dapp.signData = dappLoginData;
  55. // console.log("dappLoginData:"+JSON.stringify(dappLoginData));
  56. // let _temp = {
  57. // "address": dappLoginData.address, // 签名地址
  58. // "id": dappLoginData.id, // 所属账户ID
  59. // "signature": dappLoginData.signature, // 签名文本
  60. // "timestamp": dappLoginData.timestamp // 签名时间戳,需要在1分钟内完成验签,否则本次签名失效
  61. // };
  62. // let _temp = {
  63. // "address": "TDw6xsVnDJWsdRBLkWAwXbv4hE2X2JQs5z", // 签名地址
  64. // "id": 1, // 所属账户ID
  65. // "signature": "0x09fda37fcad4a9bb7b72f652323881a33847be3a44e4403c7a576b3383df30ec6e5e256f28fbdbac5eb0642f304f331783f36d70b5e6fd576818bc42e14624191c", // 签名文本
  66. // "timestamp": 1641279989 // 签名时间戳,需要在1分钟内完成验签,否则本次签名失效
  67. // };
  68. console.log("loginTokenAndVerification========>", new Date());
  69. utils.post(utils.api.loginTokenAndVerification, dappLoginData, (flag, value) => {
  70. console.log("loginTokenAndVerification========>", value, new Date());
  71. if (flag && 0 === value.code) {
  72. console.log("login pass1:" + flag + '-' + value.code + '-' + value.msg);
  73. /** 登录成功获取token */
  74. utils.setToken(value.data.token);
  75. /** 获取一个游戏的设置数据 */
  76. GlobalD.GameSetting = value.data.gameSetting;
  77. /** 登录时候会获取一次游戏端的 userInfo ,后续可以通过userInfo接口获取 */
  78. GlobalD.UserInfo = value.data.userInfo;
  79. /** 新增userInto 的 attribute */
  80. GlobalD.PlayerAttribute = value.data.playerAttribute;
  81. console.log("login pass2:" + flag + '-' + value.code + '-' + value.msg);
  82. /** 推送信息 */
  83. utils.get(utils.api.playerPullInfo, {}, (flag, playerPullInfoTemp) => {
  84. console.log("playerPullInfo pass1:" + flag + '-' + value.code + '-' + value.msg);
  85. if (!flag) return;
  86. console.log("playerPullInfo pass2:" + flag + '-' + value.code + '-' + value.msg);
  87. let _playerData = JSON.parse(playerPullInfoTemp.data.playerData);
  88. //记录读取的数据到内存里面
  89. // 正常游戏
  90. userData.readData = _playerData;
  91. // utils.init(GlobalD.Dapp.UserInfo.id, (data) => {
  92. // console.log('utils ws:' + data);
  93. // }, _self);
  94. //需要提前拉取一下土地配置,用于初始化地图土地
  95. console.log("playerPullInfo pass3:" + flag + '-' + value.code + '-' + value.msg);
  96. utils.get(utils.api.landConfig, {}, (flag, value) => {
  97. console.log("landConfig pass1:" + flag + '-' + value.code + '-' + value.msg);
  98. if (flag && 0 === value.code) {
  99. GlobalD.ConfigLand = value.data;
  100. console.log("landConfig pass2:" + flag + '-' + value.code + '-' + value.msg);
  101. utils.get(utils.api.userLandList, {}, (flag, value) => {
  102. console.log("userLandList pass1:" + flag + '-' + value.code + '-' + value.msg);
  103. if (flag && 0 === value.code) {
  104. GlobalD.UserLeaseLand = value.data;
  105. console.log("userLandList pass2:" + flag + '-' + value.code + '-' + value.msg);
  106. //跳转游戏
  107. // cc.find("Canvas").getComponent("Login").loginButton();
  108. cc.loader.loadRes("prefab/gameToast", (err, texture) => {
  109. let _pause = cc.instantiate(texture);
  110. let _uiCamera = cc.find("Canvas/MainCamera");
  111. _pause.parent = _uiCamera ? _uiCamera : cc.find("Canvas");
  112. _pause.zIndex = 999;
  113. let DetailLabel = _pause.getChildByName('DetailLabel');
  114. DetailLabel.getComponent(cc.Label).string = "进入游戏中..";
  115. cc.director.loadScene('MyCityScene - 004');
  116. });
  117. } else {
  118. console.warn("读取到用户的土地错误?");
  119. }
  120. })
  121. } else {
  122. console.warn("未能读取到config土地?");
  123. }
  124. })
  125. // //获取玩家
  126. // utils.get(utils.api.playerAttribute, {}, (flag, value) => {
  127. // if (flag && 0 === value.code) {
  128. // GlobalD.playerAttribute = value.data;
  129. // } else {
  130. // console.warn("读取玩家属性错误?");
  131. // }
  132. // })
  133. })
  134. } else {
  135. console.log(flag, value);
  136. cc.loader.loadRes("prefab/gameToast", (err, texture) => {
  137. let _pause = cc.instantiate(texture);
  138. let _uiCamera = cc.find("Canvas/MainCamera");
  139. _pause.parent = _uiCamera ? _uiCamera : cc.find("Canvas");
  140. _pause.zIndex = 999;
  141. let DetailLabel = _pause.getChildByName('DetailLabel');
  142. DetailLabel.getComponent(cc.Label).string = "获取信息失败,重新刷新进入游戏!";
  143. });
  144. }
  145. })
  146. } else {
  147. //TODO 服务错误
  148. console.log("dappInit userInfo 错误");
  149. console.log(err)
  150. cc.loader.loadRes("prefab/gameToast", (err1, texture) => {
  151. let _pause = cc.instantiate(texture);
  152. let _uiCamera = cc.find("Canvas/MainCamera");
  153. _pause.parent = _uiCamera ? _uiCamera : cc.find("Canvas");
  154. _pause.zIndex = 999;
  155. let DetailLabel = _pause.getChildByName('DetailLabel');
  156. DetailLabel.getComponent(cc.Label).string = "获取链上用户信息失败,请刷新游戏!";
  157. });
  158. }
  159. // try {
  160. // const data = await dapp.getLoginSign()
  161. // console.log(data)
  162. // // this.signData = JSON.stringify(data)
  163. // } catch (err) {
  164. // console.log(err)
  165. // alert('为了避免游戏资产被人乱用,还是校验下身份再进入游戏吧')
  166. // }
  167. } catch (err) {
  168. console.log('catch到的错误:' + err) // 初始化失败,运行环境不是钱包环境
  169. cc.loader.loadRes("prefab/gameToast", (err1, texture) => {
  170. let _pause = cc.instantiate(texture);
  171. let _uiCamera = cc.find("Canvas/MainCamera");
  172. _pause.parent = _uiCamera ? _uiCamera : cc.find("Canvas");
  173. _pause.zIndex = 999;
  174. let DetailLabel = _pause.getChildByName('DetailLabel');
  175. DetailLabel.getComponent(cc.Label).string = err;
  176. });
  177. }
  178. }
  179. //初始化调用 dappInit;
  180. dappInit();
  181. }
  182. });