dapp.js 13 KB

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