123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- import { _decorator, sys, log } from "cc";
- import { Util } from './util';
- const { ccclass, property } = _decorator;
- @ccclass("StorageManager")
- export class StorageManager {
- private static _instance: StorageManager;
- public static get instance () {
- if (this._instance) {
- return this._instance;
- }
- this._instance = new StorageManager();
- this._instance.start();
- return this._instance;
- }
- private _path: any = null;
- private _keyConfig: string = 'archero';//游戏英文名称
- private _markSave: boolean = false;
- private _saveTimer: number = -1;
- public jsonData: {[key: string]: any} = {};
- start () {
- this.jsonData = {
- "userId": "",
- };
- this._path = this._getConfigPath();
- var content;
- if (sys.isNative) {
- // var valueObject = jsb.fileUtils.getValueMapFromFile(this._path);
- // content = valueObject[this._keyConfig];
- } else {
- content = sys.localStorage.getItem(this._keyConfig);
- }
- // // 解密代码
- // if (cc.game.config["encript"]) {
- // var newContent = new Xxtea("upgradeHeroAbility").xxteaDecrypt(content);
- // if (newContent && newContent.length > 0) {
- // content = newContent;
- // }
- // }
- if (content && content.length) {
- if (content.startsWith('@')) {
- content = content.substring(1);
- content = Util.decrypt(content);
- }
- try {
- //初始化操作
- var jsonData = JSON.parse(content);
- this.jsonData = jsonData;
- }catch (excepaiton) {
- }
- }
- //启动无限定时器,每1秒保存一次数据,而不是无限保存数据
- // this._saveTimer = setInterval(() =>{
- // this.scheduleSave();
- // }, 500);
- //每隔5秒保存一次数据,主要是为了保存最新在线时间,方便离线奖励时间判定
- this._saveTimer = setInterval(() =>{
- this.scheduleSave();
- }, 5000);
- }
- /**
- * 存储配置文件,不保存到本地
- * @param {string}key 关键字
- * @param {any}value 存储值
- */
- setConfigDataWithoutSave (key: string, value: any) {
- let account: string= this.jsonData.userId;
- if (this.jsonData[account]) {
- this.jsonData[account][key] = value;
- } else {
- console.error("no account can not save");
- }
- }
- /**
- * 存储配置文件,保存到本地
- * @param {string}key 关键字
- * @param {any}value 存储值
- */
- setConfigData (key: string, value: any) {
- this.setConfigDataWithoutSave(key, value);
- this._markSave = true; //标记为需要存储,避免一直在写入,而是每隔一段时间进行写入
- }
- /**
- * 根据关键字获取数值
- * @param {string} key 关键字
- * @returns
- */
- getConfigData (key: string) {
- let account: string = this.jsonData.userId;
- if (this.jsonData[account]) {
- var value = this.jsonData[account][key];
- return value ? value : "";
- } else {
- log("no account can not load");
- return "";
- }
- }
- /**
- * 设置全局数据
- * @param {string} key 关键字
- * @param {any}value 存储值
- * @returns
- */
- public setGlobalData (key:string, value: any) {
- this.jsonData[key] = value;
- this.save();
- }
- /**
- * 获取全局数据
- * @param {string} key 关键字
- * @returns
- */
- public getGlobalData (key:string) {
- return this.jsonData[key];
- }
- /**
- * 设置用户唯一标示符
- * @param {string} userId 用户唯一标示符
- * @param {any}value 存储值
- * @returns
- */
- public setUserId (userId:string) {
- this.jsonData.userId = userId;
- if (!this.jsonData[userId]) {
- this.jsonData[userId] = {};
- }
- this.save();
- }
- /**
- * 获取用户唯一标示符
- * @returns {string}
- */
- public getUserId () {
- return this.jsonData.userId;
- }
- /**
- * 定时存储
- * @returns
- */
- public scheduleSave () {
- if (!this._markSave) {
- return;
- }
- this.save();
- }
- /**
- * 标记为已修改
- */
- public markModified () {
- this._markSave = true;
- }
- /**
- * 保存配置文件
- * @returns
- */
- public save () {
- // 写入文件
- var str = JSON.stringify(this.jsonData);
- // // 加密代码
- // if (cc.game.config["encript"]) {
- // str = new Xxtea("upgradeHeroAbility").xxteaEncrypt(str);
- // }
- let zipStr = '@' + Util.encrypt(str);
- // let zipStr = str;
- this._markSave = false;
-
- if (!sys.isNative) {
- var ls = sys.localStorage;
- ls.setItem(this._keyConfig, zipStr);
- return;
- }
- var valueObj: any = {};
- valueObj[this._keyConfig] = zipStr;
- //@ts-ignore
- jsb.fileUtils.writeToFile(valueObj, this._getConfigPath());
- }
- /**
- * 获取配置文件路径
- * @returns 获取配置文件路径
- */
- private _getConfigPath () {
- let platform: any= sys.platform;
- let path: string = "";
- if (platform === sys.OS.WINDOWS) {
- path = "src/conf";
- } else if (platform === sys.OS.LINUX) {
- path = "./conf";
- } else {
- if (sys.isNative) {
- // path = jsb.fileUtils.getWritablePath();
- // path = path + "conf";
- } else {
- path = "src/conf";
- }
- }
- return path;
- }
- }
|