// import gameToast from "../Network/gameToast" import utils from "../Network/netUtils"; cc.Class({ extends: cc.Component, properties: { gameToastPrefab: cc.Prefab }, // LIFE-CYCLE CALLBACKS: onLoad() { // cc.view.enableAutoFullScreen(false); cc.game.addPersistRootNode(this.node); }, //在Login.js 里面引用 onDappInit() { async function dappInit(gameToastPrefab) { function initGameToast(msg) { let _pause = cc.instantiate(gameToastPrefab); let _uiCamera = cc.find("Canvas/MainCamera"); _pause.parent = _uiCamera ? _uiCamera : cc.find("Canvas"); _pause.zIndex = 999; let DetailLabel = _pause.getChildByName('DetailLabel'); DetailLabel.getComponent(cc.Label).string = msg; } let _loginNode = cc.find("Canvas").getComponent("Login"); //初始化 dapp 和 utils 个数 _loginNode.showLoading(10); const dappUrl = window['dappUrl']; console.log("初始化 dappInit:" + dappUrl); _loginNode.updateLoading(1, "初始化DApp..."); let dapp = GlobalD.dapp = new Dapp(dappUrl); // 1 try { const isTestNet = window['isTestNet']; // console.log('-----------开始初始化dapp!-----------'); // console.log('isTestNet:' + window['isTestNet']); console.log('host: ' + window['dappHost']); // console.log('dappWss: ' + window['dappWss']); // console.log('-----------以上是相关设置-----------'); _loginNode.updateLoading(2, "设置DApp..."); await dapp.init(isTestNet) //2 console.log("用户当前钱包地址:" + dapp.getAddress()) // 初始化成功,得到用户当前钱包地址 dapp.onAccountChanged((account) => { console.log('当前钱包地址发生变化', account.address) // 用户钱包地址即为登录账户,使用过程中用户可以切换钱包地址,即游戏要进行当前地址退出登录,新地址重新登录的操作 // this.address = account.address //跳回login 页面 cc.director.loadScene('Login', function () { //重新初始化信息 console.log('onAccountChanged Login'); // dappInit(); }.bind(this)); }) dapp.onNetworkChanged((node) => { console.log('当前钱包节点发生变化', node) // 切换网络,一般可以不处理,实际用户端一般不会切换 //跳回login 页面 cc.director.loadScene('Login', function () { //重新初始化信息 console.log('onNetworkChanged Login'); // dappInit(); }.bind(this)); }) // 获取用户信息 _loginNode.updateLoading(3, "获取钱包用户信息..."); const { err, res } = await dapp.userInfo(); //3 if (err === null) { // 返回成功,见下面消息体 // console.log(res) GlobalD.Dapp.UserInfo = res; //测试 // GlobalD.Dapp.UserInfo.agent_level = 2; // GameNet.getInstance().init(res.id, (data) => { // console.log('GameNet:' + data); // }, _self); _loginNode.updateLoading(4, "获取钱包用户签名..."); const dappLoginData = await dapp.getLoginSign(); //4 GlobalD.Dapp.signData = dappLoginData; // console.log("dappLoginData:"+JSON.stringify(dappLoginData)); // let _temp = { // "address": dappLoginData.address, // 签名地址 // "id": dappLoginData.id, // 所属账户ID // "signature": dappLoginData.signature, // 签名文本 // "timestamp": dappLoginData.timestamp // 签名时间戳,需要在1分钟内完成验签,否则本次签名失效 // }; // let _temp = { // "address": "TDw6xsVnDJWsdRBLkWAwXbv4hE2X2JQs5z", // 签名地址 // "id": 1, // 所属账户ID // "signature": "0x09fda37fcad4a9bb7b72f652323881a33847be3a44e4403c7a576b3383df30ec6e5e256f28fbdbac5eb0642f304f331783f36d70b5e6fd576818bc42e14624191c", // 签名文本 // "timestamp": 1641279989 // 签名时间戳,需要在1分钟内完成验签,否则本次签名失效 // }; // console.log("loginTokenAndVerification========>", new Date()); _loginNode.updateLoading(5, "登录验证中..."); utils.post(utils.api.loginTokenAndVerification, dappLoginData, (flag, value) => { //5 // console.log("loginTokenAndVerification========>", value, new Date()); console.log(value.data.token) if (flag && 0 === value.code && value.flag) { // console.log("login pass1:" + flag + '-' + value.code + '-' + value.msg); /** 登录成功获取token */ utils.setToken(value.data.token); /** 获取一个游戏的设置数据 */ GlobalD.GameSetting = value.data.gameSetting; /** 登录时候会获取一次游戏端的 userInfo ,后续可以通过userInfo接口获取 */ GlobalD.UserInfo = value.data.userInfo; /** 新增userInto 的 attribute */ GlobalD.PlayerAttribute = value.data.playerAttribute; // console.log("login pass2:" + flag + '-' + value.code + '-' + value.msg); /** 推送信息 */ _loginNode.updateLoading(6, "获取游戏用户信息..."); utils.get(utils.api.playerPullInfo, {}, (flag, playerPullInfoTemp) => { //6 // console.log("playerPullInfo pass1:" + flag + '-' + value.code + '-' + value.msg); if (flag && 0 === value.code && value.flag) { // console.log("playerPullInfo pass2:" + flag + '-' + value.code + '-' + value.msg); //记录读取的数据到内存里面 // 正常游戏 console.log("playerPullInfoTemp:", playerPullInfoTemp); userData.readData = playerPullInfoTemp.data; // utils.init(GlobalD.Dapp.UserInfo.id, (data) => { // console.log('utils ws:' + data); // }, _self); //需要提前拉取一下土地配置,用于初始化地图土地 // console.log("playerPullInfo pass3:" + flag + '-' + value.code + '-' + value.msg); _loginNode.updateLoading(7, "获取游戏土地信息..."); utils.get(utils.api.landConfig, {}, (flag, value) => { //7 // console.log("landConfig pass1:" + flag + '-' + value.code + '-' + value.msg); if (flag && 0 === value.code && value.flag) { GlobalD.ConfigLand = value.data; // console.log("landConfig pass2:" + flag + '-' + value.code + '-' + value.msg); _loginNode.updateLoading(8, "获取玩家土地信息..."); utils.get(utils.api.userLandList, {}, (flag, value) => { //8 // console.log("userLandList pass1:" + flag + '-' + value.code + '-' + value.msg); if (flag && 0 === value.code && value.flag) { GlobalD.UserLeaseLand = value.data; // console.log("userLandList pass2:" + flag + '-' + value.code + '-' + value.msg); //获取土地等级配置 _loginNode.updateLoading(9, "获取土地等级信息..."); utils.get(utils.api.getLevel, {}, (flag, value) => { //9 // console.log("获取土地", flag, value); if (flag && 0 === value.code && value.flag && null != value.data) { GlobalD.ConfigLevel = value.data; _loginNode.updateLoading(10, "初始化租赁信息..."); utils.get(utils.api.getAnimalTimes, {}, (flag, value) => { //10 // console.log("getAnimalTimes", flag, value); if (flag && 0 === value.code && value.flag) { GlobalD.animalTimes = value.data; _loginNode.makePreloadScene(); } else { console.error("读取到Times错误?"); initGameToast(value.msg); } }) } else { console.error("读取到土地等级配置错误?"); initGameToast(value.msg); } }) //跳转游戏 // cc.find("Canvas").getComponent("Login").loginButton(); // cc.loader.loadRes("prefab/gameToast", (err, texture) => { // let _pause = cc.instantiate(texture); // let _uiCamera = cc.find("Canvas/MainCamera"); // _pause.parent = _uiCamera ? _uiCamera : cc.find("Canvas"); // _pause.zIndex = 999; // let DetailLabel = _pause.getChildByName('DetailLabel'); // DetailLabel.getComponent(cc.Label).string = "进入游戏中.."; // cc.director.loadScene('MyCityScene - 004'); // }); } else { initGameToast(value.msg); console.error("读取到用户的土地错误?"); } }) } else { initGameToast(value.msg); console.error("未能读取到config土地?"); } }) } else { console.error(flag, value); initGameToast("拉取用户信息失败,重新刷新进入游戏!"); } }) } else { console.error(flag, value); initGameToast("登录校验信息失败,重新刷新进入游戏!"); } }) } else { //TODO 服务错误 console.error("dappInit userInfo 错误:" + err); initGameToast("获取链上用户信息失败,请刷新游戏!"); } } catch (err) { console.error('catch到的错误:' + err) // 初始化失败,运行环境不是钱包环境 initGameToast(err); } } dappInit(this.gameToastPrefab); } });