dapp.js 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  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 = 0;
  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. utils.post(utils.api.loginTokenAndVerification, dappLoginData, (flag, value) => {
  69. console.log("loginTokenAndVerification========>", value);
  70. if (flag && 0 === value.code) {
  71. /** 登录成功获取token */
  72. utils.setToken(value.data.token);
  73. /** 获取一个游戏的设置数据 */
  74. GlobalD.GameSetting = value.data.gameSetting;
  75. /** 登录时候会获取一次游戏端的 userInfo ,后续可以通过userInfo接口获取 */
  76. GlobalD.UserInfo = value.data.userInfo;
  77. /** 新增userInto 的 attribute */
  78. GlobalD.PlayerAttribute = value.data.playerAttribute;
  79. /** 推送信息 */
  80. utils.get(utils.api.playerPullInfo, {}, (flag, playerPullInfoTemp) => {
  81. if(!flag)return;
  82. let _playerData = JSON.parse(playerPullInfoTemp.data.playerData);
  83. //记录读取的数据到内存里面
  84. // 正常游戏
  85. userData.readData = _playerData;
  86. // utils.init(GlobalD.Dapp.UserInfo.id, (data) => {
  87. // console.log('utils ws:' + data);
  88. // }, _self);
  89. //需要提前拉取一下土地配置,用于初始化地图土地
  90. utils.get(utils.api.landConfig, {}, (flag, value) => {
  91. if (flag && 0 === value.code) {
  92. GlobalD.ConfigLand = value.data;
  93. utils.get(utils.api.userLandList, {}, (flag, value) => {
  94. if (flag && 0 === value.code) {
  95. GlobalD.UserLeaseLand = value.data;
  96. //跳转游戏
  97. cc.find("Canvas").getComponent("Login").loginButton();
  98. } else {
  99. console.warn("读取到用户的土地错误?");
  100. }
  101. })
  102. } else {
  103. console.warn("未能读取到config土地?");
  104. }
  105. })
  106. // //获取玩家
  107. // utils.get(utils.api.playerAttribute, {}, (flag, value) => {
  108. // if (flag && 0 === value.code) {
  109. // GlobalD.playerAttribute = value.data;
  110. // } else {
  111. // console.warn("读取玩家属性错误?");
  112. // }
  113. // })
  114. })
  115. } else {
  116. console.log(flag, value);
  117. }
  118. })
  119. } else {
  120. //TODO 服务错误
  121. console.log("dappInit userInfo 错误");
  122. console.log(err)
  123. }
  124. // try {
  125. // const data = await dapp.getLoginSign()
  126. // console.log(data)
  127. // // this.signData = JSON.stringify(data)
  128. // } catch (err) {
  129. // console.log(err)
  130. // alert('为了避免游戏资产被人乱用,还是校验下身份再进入游戏吧')
  131. // }
  132. } catch (err) {
  133. console.log('catch到的错误:' + err) // 初始化失败,运行环境不是钱包环境
  134. }
  135. }
  136. //初始化调用 dappInit;
  137. dappInit();
  138. }
  139. });