dapp.js 7.7 KB

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