import httpManager from '../../common/net/httpManager'; import { baseproto } from '../../common/net/pb/pbBase'; import { MsgGameStruct } from '../../common/net/protobufUtil'; import { StringToUint8Array as stoU8, Uint8ArrayToString, Uint8ArrayToString as utoStr } from '../../common/net/CovertUtil'; import { EventCenter } from '../../common/ui/uiEv/EventCenter'; import gameCfg from '../config/gameCfg'; import { MSG_Event } from '../DefineMsg/LogicMsg'; import { hallproto, tokenproto } from '../netPb/protobundle'; import DataManager from './data/DataManager'; import { buffType, fileCfgType, funcExpression, singInCfg } from './data/excelDefine'; import AccountManager from './data/AccountManager'; import { baseObj, objType, valueObj } from './data/baseObject'; import { Propbuff, PropCatch, PropLeaveUp, PropSignIn, propType, PropUnlock } from './data/propObject'; import ProxyClientDataMgr from './ProxyClientDataMgr'; /** * 模型层 * 数据代理类 */ export default class ProxyNetDataMgr { private static instance: any; public static ins(): ProxyNetDataMgr { this.instance = this.instance || new ProxyNetDataMgr() return this.instance } gameNetHttp = new httpManager("game")//http saveGameData:hallproto.CMD_GAMEINFO = hallproto.CMD_GAMEINFO.create(); getDataFromHttp(jsName:string,func:Function,param?:any) { let url = gameCfg.cfgUrl+"config/"+jsName httpManager.getNormal(url,(respTxt)=>{ func(respTxt,jsName,param) }) } //预加载配置 downConfig() { let downCfgIdx = 1 let downMax = 6 function callBack(data:any,file:string,type?:any){ if(data) { if(type) DataManager.ins().readConfigToObj(data,type) downCfgIdx += 1 cc.sys.localStorage.setItem(file,data); EventCenter.emit(MSG_Event.ReadStartCfg,downCfgIdx,downMax) } } this.getDataFromHttp("express.txt",callBack,fileCfgType.ruleFunc) this.getDataFromHttp("level.txt",callBack,fileCfgType.level) this.getDataFromHttp("obj.txt",callBack,fileCfgType.obj) this.getDataFromHttp("sale.txt",callBack,fileCfgType.sale) this.getDataFromHttp("unlock.txt",callBack,fileCfgType.unlock) //签到 this.getDataFromHttp("signIn.json",callBack) } //错误消息事件 checkMsgResp(resp:MsgGameStruct,mainId:number) { if(resp.mainId==-1) EventCenter.emit(MSG_Event.Net_ERRO,"接受的数据不完整,请升级版本") else if(resp.mainId==-2) EventCenter.emit(MSG_Event.Net_ERRO,"网络相应超时,没有获取到登录数据") else if(resp.mainId == 0)//包体错误 EventCenter.emit(MSG_Event.Net_ERRO,utoStr(resp.msgBody)) else if(resp.mainId==mainId) return true; return false; } //根据数据设置玩家数据 setUserGameInfoByData(info:hallproto.CMD_GAMEINFO) { let curGameInfo = AccountManager.ins().getGameInfo() //设置资产信息 for(let idx=0;idxmeansDt.prop.num); if(unlockProp)//解锁参数 { (unlockProp as PropUnlock).setUnLock(meansDt.prop.bUnlock); (unlockProp as PropUnlock).setFee(meansDt.prop.unlockfee) } if(levelProp)//等级 { levelProp.setLevel(meansDt.prop.level) ; let buffProp = obj.getPropByType(propType.buff) as Propbuff //当前buff let exData = DataManager.ins().getLevelCfgByIdLv(meansDt.id,meansDt.prop.level); if(exData&&exData._buff) { let jsonData = exData._buff let idFun = jsonData._idFun;//解锁条件id if(idFun==funcExpression.addBuffCoinNum || idFun==funcExpression.addBuffCoinPer) { let num = 0 if (jsonData._param[0] instanceof Object)//excelJson,表达式 num = curGameInfo.m_gameFun.doExpressDecode(curGameInfo,jsonData._param[0],meansDt.id) as number else num = jsonData._param[0] let bufftp = idFun ==funcExpression.addBuffCoinNum ? buffType.base:buffType.ratio if(buffProp) buffProp.setBuff(bufftp,num) } } } let ableCathes = meansDt.prop.catchFishes; if(ableCathes && ableCathes.length>0)//可捕获 { let catchProp = obj.getPropByType(propType.catch) if(!catchProp) { obj.addProp(new PropCatch()) catchProp = obj.getPropByType(propType.catch) } for(let idj=0;idj{ EventCenter.emit(MSG_Event.Net_LoadingEnd) if(this.checkMsgResp(resp,baseproto.ENUM_MAIN_ID.TOKEN_ID))//获取到token { let tokenMsg = tokenproto.CMD_S2C_TOKEN_INFO.decode(resp.msgBody) cc.sys.localStorage.setItem("gameToken",tokenMsg.tokenStr) AccountManager.ins().initGameInfo() EventCenter.emit(MSG_Event.Net_Token) } }); } else { AccountManager.ins().initGameInfo() EventCenter.emit(MSG_Event.Net_Token) } } //获取游戏数据 getGameData() { let gameData = cc.sys.localStorage.getItem("gameData") if(!gameData)//没有本地数据 { EventCenter.emit(MSG_Event.Net_LoadingBegin) //请求服务器上的数据 let gameToken = cc.sys.localStorage.getItem("gameToken") this.gameNetHttp.setUrlPort(gameCfg.hallUrl,"/hall") this.gameNetHttp.setTokenStr(gameToken) ///////////////////////////////////////////////////////////// console.log("askGameData:"+gameCfg.hallUrl) //this.gameNetHttp.setUrlPort(gameCfg.tokenUrl,"login") this.gameNetHttp.sendPostPbMessage(baseproto.ENUM_MAIN_ID.HALL_ID,hallproto.ENUM_C2S_ID.GET_GAMEINFO,null,(resp:MsgGameStruct)=>{ EventCenter.emit(MSG_Event.Net_LoadingEnd) if(this.checkMsgResp(resp,baseproto.ENUM_MAIN_ID.HALL_ID))//获取到token { if(resp.subId == hallproto.ENUM_S2C_ID.USERINFO_RESP) { ProxyNetDataMgr.ins().saveGameData = hallproto.CMD_GAMEINFO.decode(resp.msgBody) let sInData = ProxyNetDataMgr.ins().saveGameData.singInData if(!sInData)//没有签到属性 ProxyNetDataMgr.ins().saveGameData.singInData = hallproto.SingInData.create({weekOnetime:0,singInlist : []}) this.setUserGameInfoByData(ProxyNetDataMgr.ins().saveGameData) cc.sys.localStorage.setItem("gameData",JSON.stringify(ProxyNetDataMgr.ins().saveGameData))//utoStr(resp.msgBody)) EventCenter.emit(MSG_Event.Net_GameData) ProxyClientDataMgr.ins().unlockLevelUpDefault()//默认升级解锁 ProxyClientDataMgr.ins().startParkFee() ProxyClientDataMgr.ins().goFishing() } } }); } else { ProxyNetDataMgr.ins().saveGameData = JSON.parse(gameData) if(!ProxyNetDataMgr.ins().saveGameData.singInData)//没有签到属性 ProxyNetDataMgr.ins().saveGameData.singInData = hallproto.SingInData.create({weekOnetime:0,singInlist : []}) this.setUserGameInfoByData(ProxyNetDataMgr.ins().saveGameData) EventCenter.emit(MSG_Event.Net_GameData) ProxyNetDataMgr.ins().sendLocalGameDataToServer() ProxyClientDataMgr.ins().unlockLevelUpDefault()//默认升级解锁 ProxyClientDataMgr.ins().startParkFee() ProxyClientDataMgr.ins().goFishing() } } //获取签到信息 getSingInInfo(){ let url = "http://"+gameCfg.hallUrl+"/hall?serverTm=0" httpManager.getNormal(url,function(resp){ let serverTm = Number(resp)//服务器当前时间戳 let cfgSignIn = cc.sys.localStorage.getItem("signIn.json") if(!cfgSignIn) { let desp = "读取签到配置错误,请重新登录更新配置" console.log(desp) EventCenter.emit(MSG_Event.TipsNormal,desp) } else { if(!resp)//没有获取到时间 { let desp = "时间获取失败,请检测网络" console.log(desp) EventCenter.emit(MSG_Event.TipsNormal,desp) return } cc.sys.localStorage.setItem("serverTime",resp) //处理配置 let curGameInfo = AccountManager.ins().getGameInfo() if(!curGameInfo)return; let signInProp = curGameInfo.getPropByType(propType.signIn) as PropSignIn let curdt = new Date() curdt.setTime(serverTm) signInProp.reset(curdt.getFullYear(),curdt.getMonth(),curdt.getDate())//当前年月日 let gameData = ProxyNetDataMgr.ins().saveGameData let dataSignIn = gameData.singInData//签到数据 let jsData = JSON.parse(cfgSignIn) for (const weekDay in jsData) { signInProp.setReward(jsData[weekDay].id,jsData[weekDay].type,jsData[weekDay].reward,jsData[weekDay].desp) } if(dataSignIn) signInProp.setSignInInfo(dataSignIn.weekOnetime as number,dataSignIn.singInlist) EventCenter.emit(MSG_Event.Net_RespSignIn) } }) } //保存到服务器 sendLocalGameDataToServer(){ this.gameNetHttp.setUrlPort(gameCfg.hallUrl,"/hall") let gameToken = cc.sys.localStorage.getItem("gameToken") this.gameNetHttp.setTokenStr(gameToken) ///////////////////////////////////////////////////////////// console.log("sendLocalGameDataToServer:"+gameCfg.hallUrl) let sendUint8 = hallproto.CMD_GAMEINFO.encode(ProxyNetDataMgr.ins().saveGameData).finish() this.gameNetHttp.sendPostPbMessage(baseproto.ENUM_MAIN_ID.HALL_ID,hallproto.ENUM_C2S_ID.UPTO_GAMEINFO,sendUint8,(resp:MsgGameStruct)=>{ if(resp.mainId>0) console.log("告诉服务器保存成功") else if(resp.mainId==0) console.log(utoStr(resp.msgBody)) else console.log("网络相应超时 或者数据结构不正确") }); } }