[mod] 熱更新調整
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
|
||||
export default class LocalStorageData {
|
||||
private static _instance: LocalStorageData = null;
|
||||
public static get Instance(): LocalStorageData {
|
||||
@@ -12,40 +11,8 @@ export default class LocalStorageData {
|
||||
// =======================================================================================
|
||||
public get CompileVersion(): string { return cc.sys.localStorage.getItem("CompileVersion"); }
|
||||
public set CompileVersion(value: string) { cc.sys.localStorage.setItem("CompileVersion", value.toString()); }
|
||||
public get RemoteVerList(): string { return cc.sys.localStorage.getItem("RemoteVerList"); }
|
||||
public set RemoteVerList(value: string) { cc.sys.localStorage.setItem("RemoteVerList", value); }
|
||||
public get LocalVerList(): string { return cc.sys.localStorage.getItem("LocalVerList"); }
|
||||
public set LocalVerList(value: string) { cc.sys.localStorage.setItem("LocalVerList", value); }
|
||||
public get ComboDeviceID(): string { return cc.sys.localStorage.getItem("ComboDeviceID") || ""; }
|
||||
public set ComboDeviceID(value: string) { cc.sys.localStorage.setItem("ComboDeviceID", value); }
|
||||
public get BundleUrl(): string { return cc.sys.localStorage.getItem("BundleUrl"); }
|
||||
public set BundleUrl(value: string) { cc.sys.localStorage.setItem("BundleUrl", value); }
|
||||
public get Language(): string { return cc.sys.localStorage.getItem("language"); }
|
||||
public set Language(value: string) { cc.sys.localStorage.setItem("language", value); }
|
||||
public get MusicType(): string { return cc.sys.localStorage.getItem("MusicType"); }
|
||||
public set MusicType(value: string) { cc.sys.localStorage.setItem("MusicType", value); }
|
||||
public get SoundType(): string { return cc.sys.localStorage.getItem("SoundType"); }
|
||||
public set SoundType(value: string) { cc.sys.localStorage.setItem("SoundType", value); }
|
||||
public get LvUpNotifyType(): boolean { return JSON.parse(cc.sys.localStorage.getItem("LvUpNotifyType")); }
|
||||
public set LvUpNotifyType(value: boolean) { cc.sys.localStorage.setItem("LvUpNotifyType", JSON.stringify(value)); }
|
||||
public get WinNotifyType(): boolean { return JSON.parse(cc.sys.localStorage.getItem("WinNotifyType")); }
|
||||
public set WinNotifyType(value: boolean) { cc.sys.localStorage.setItem("WinNotifyType", JSON.stringify(value)); }
|
||||
public get DownloadList_Preview(): string { return cc.sys.localStorage.getItem("DownloadList_Preview"); }
|
||||
public set DownloadList_Preview(value: string) { cc.sys.localStorage.setItem("DownloadList_Preview", value); }
|
||||
|
||||
/**
|
||||
* key: id
|
||||
* value: 是否開過卡
|
||||
*/
|
||||
public get BingoCardInfo(): Map<number, boolean> { return cc.sys.localStorage.getItem("BingoCardInfo") ? new Map(JSON.parse(cc.sys.localStorage.getItem("BingoCardInfo"))) : new Map<number, boolean>(); }
|
||||
public set BingoCardInfo(value: Map<number, boolean>) { cc.sys.localStorage.setItem("BingoCardInfo", JSON.stringify(Array.from(value.entries()))); }
|
||||
|
||||
/**
|
||||
* key: id
|
||||
* value: 是否開過卡
|
||||
*/
|
||||
public get FiveCardInfo(): Map<number, boolean> { return cc.sys.localStorage.getItem("FiveCardInfo") ? new Map(JSON.parse(cc.sys.localStorage.getItem("FiveCardInfo"))) : new Map<number, boolean>(); }
|
||||
public set FiveCardInfo(value: Map<number, boolean>) { cc.sys.localStorage.setItem("FiveCardInfo", JSON.stringify(Array.from(value.entries()))); }
|
||||
|
||||
// =======================================================================================
|
||||
}
|
||||
|
@@ -1,4 +1,5 @@
|
||||
import { CoroutineV2 } from "../Engine/CatanEngine/CoroutineV2/CoroutineV2";
|
||||
import LocalStorageData from "../Engine/Data/LocalStorageData";
|
||||
import UpdatePanel from "../UpdatePanel";
|
||||
import BusinessTypeSetting from "../_BusinessTypeSetting/BusinessTypeSetting";
|
||||
import Enum_HUDM from "./Enum_HUDM";
|
||||
@@ -45,17 +46,29 @@ export default class HUDM extends cc.Component {
|
||||
}
|
||||
HUDM._instance = this;
|
||||
this._updatePanel = params[0];
|
||||
let packageUrl: string = `https://jianmiau.tk/Resources/App/JMKA/update/remote-assets/${BusinessTypeSetting.COMPILE_VERSION}`;
|
||||
// let packageUrl: string = `https://jianmiau.tk/Resources/App/JMKA/update/remote-assets/${BusinessTypeSetting.COMPILE_VERSION}`;
|
||||
let packageUrl: string = BusinessTypeSetting.UsePatch;
|
||||
|
||||
this.CheckCompileVersion();
|
||||
this.CheckChangePatchUrl();
|
||||
|
||||
this._customManifest = JSON.stringify({
|
||||
"packageUrl": packageUrl,
|
||||
"remoteManifestUrl": `${packageUrl}/project.manifest`,
|
||||
"remoteVersionUrl": `${packageUrl}/version.json`,
|
||||
"version": "0.0",
|
||||
"version": "0.0.0",
|
||||
});
|
||||
|
||||
this._storagePath = `${(jsb.fileUtils ? jsb.fileUtils.getWritablePath() : "./")}${this._path}`;
|
||||
|
||||
// 本地熱更目錄下已存在project.manifest,則直接修改已存在的project.manifest
|
||||
if (this._isChangeUrl) {
|
||||
if (jsb.fileUtils.isFileExist(this._storagePath + "/project.manifest")) {
|
||||
this._isChangeUrl = true;
|
||||
this._modifyAppLoadUrlForManifestFile(this._storagePath, packageUrl);
|
||||
}
|
||||
}
|
||||
|
||||
this._versionCompareHandle = function (versionA: string, versionB: string): number {
|
||||
// console.log("Ver A " + versionA + "VerB " + versionB);
|
||||
let vA: string[] = versionA.split(".");
|
||||
@@ -120,6 +133,25 @@ export default class HUDM extends cc.Component {
|
||||
}
|
||||
}
|
||||
|
||||
private _modifyAppLoadUrlForManifestFile(filePath: string, newBundleUrl: string): void {
|
||||
let allpath: string[] = [filePath, filePath + "_temp"];
|
||||
let manifestname: string[] = ["project.manifest", "project.manifest.temp"];
|
||||
for (var i: number = 0; i < allpath.length; ++i) {
|
||||
let path: string = `${allpath[i]}/${manifestname[i]}`;
|
||||
if (jsb.fileUtils.isFileExist(path)) {
|
||||
// console.log(`[HUD] modifyAppLoadUrlForManifestFile: 有下載的manifest文件,直接修改熱更地址`);
|
||||
// 修改project.manifest
|
||||
let projectManifest: string = jsb.fileUtils.getStringFromFile(path);
|
||||
let projectManifestObj: any = JSON.parse(projectManifest);
|
||||
projectManifestObj.packageUrl = newBundleUrl;
|
||||
projectManifestObj.remoteManifestUrl = newBundleUrl + "/project.manifest";
|
||||
projectManifestObj.remoteVersionUrl = newBundleUrl + "/version.json";
|
||||
let afterString: string = JSON.stringify(projectManifestObj);
|
||||
jsb.fileUtils.writeStringToFile(afterString, path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//#endregion
|
||||
|
||||
public *CheckUpdate(): IterableIterator<any> {
|
||||
@@ -148,6 +180,42 @@ export default class HUDM extends cc.Component {
|
||||
yield null;
|
||||
}
|
||||
|
||||
let newBundleUrl: string = BusinessTypeSetting.UsePatch;
|
||||
this._modifyAppLoadUrlForManifestFile(this._storagePath, newBundleUrl);
|
||||
this._initAssetManaget();
|
||||
|
||||
let manifest: jsb.Manifest = new jsb.Manifest(this._customManifest, this._storagePath);
|
||||
this._am.loadLocalManifest(manifest, this._storagePath);
|
||||
if (!this._am.getLocalManifest() || !this._am.getLocalManifest().isLoaded()) {
|
||||
// this.tipsLabel.string = "Failed to load local manifest ...";
|
||||
console.error("checkUpdate -> Failed to load local manifest ...");
|
||||
return;
|
||||
}
|
||||
|
||||
// 更新動態路徑後再跑一次
|
||||
this._am.setEventCallback(this.checkCb.bind(this));
|
||||
|
||||
this._needUpdateData = null;
|
||||
this._am.checkUpdate();
|
||||
this._updating = true;
|
||||
while (this._needUpdateData === null) {
|
||||
yield null;
|
||||
}
|
||||
if (this._isChangeUrl && ((!this._needUpdateData.IsNeedUpdate && this._needUpdateData.TotalBytes !== "failed") || this._needUpdateData.TotalBytes === "0 B")) {
|
||||
if (jsb.fileUtils.isFileExist(this._storagePath)) {
|
||||
let isremoveDirectory: boolean = jsb.fileUtils.removeDirectory(this._storagePath);
|
||||
let isremoveDirectory_temp: boolean = jsb.fileUtils.removeDirectory(this._storagePath + "_temp");
|
||||
if (isremoveDirectory_temp) {
|
||||
console.log(`removeDirectory: ${this._storagePath}_temp`);
|
||||
}
|
||||
if (isremoveDirectory) {
|
||||
console.log(`removeDirectory: ${this._storagePath}`);
|
||||
this._needUpdateData = null;
|
||||
this._initAssetManaget();
|
||||
this._needUpdateData = yield* this.CheckUpdate();
|
||||
}
|
||||
}
|
||||
}
|
||||
return this._needUpdateData;
|
||||
}
|
||||
|
||||
@@ -184,7 +252,7 @@ export default class HUDM extends cc.Component {
|
||||
this._updating = false;
|
||||
|
||||
if (failed) {
|
||||
this._needUpdateData = new Enum_HUDM.NeedUpdateDataObj(false, null);
|
||||
this._needUpdateData = new Enum_HUDM.NeedUpdateDataObj(false, "failed");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -348,4 +416,31 @@ export default class HUDM extends cc.Component {
|
||||
this._updateListener = null;
|
||||
}
|
||||
}
|
||||
|
||||
//#region 清除資料
|
||||
|
||||
/** 判斷更改編譯版號.清除BUNDLE記錄 */
|
||||
public CheckCompileVersion(): void {
|
||||
let oldCompileVersion: string = LocalStorageData.Instance.CompileVersion;
|
||||
let newCompileVersion: string = BusinessTypeSetting.COMPILE_VERSION;
|
||||
if (oldCompileVersion && oldCompileVersion !== newCompileVersion) {
|
||||
// this.ClearBundleData();
|
||||
console.warn(`change compile version. ${oldCompileVersion} -> ${newCompileVersion}`);
|
||||
}
|
||||
LocalStorageData.Instance.CompileVersion = BusinessTypeSetting.COMPILE_VERSION;
|
||||
}
|
||||
|
||||
/** 判斷更改PATCH環境.清除BUNDLE記錄 */
|
||||
public CheckChangePatchUrl(): void {
|
||||
let oldBundleUrl: string = LocalStorageData.Instance.BundleUrl;
|
||||
let newBundleUrl: string = BusinessTypeSetting.UsePatch;
|
||||
if (oldBundleUrl && oldBundleUrl !== newBundleUrl) {
|
||||
// this.ClearBundleData();
|
||||
console.warn(`change patch url. ${oldBundleUrl} -> ${newBundleUrl}`);
|
||||
this._isChangeUrl = true;
|
||||
}
|
||||
LocalStorageData.Instance.BundleUrl = BusinessTypeSetting.UsePatch;
|
||||
}
|
||||
|
||||
//#endregion
|
||||
}
|
||||
|
@@ -6,6 +6,7 @@ node version_generator.js -v 1.0.0 -u https://jianmiau.tk/Resources/App/JMKA/upd
|
||||
|
||||
import { CoroutineV2 } from "./Engine/CatanEngine/CoroutineV2/CoroutineV2";
|
||||
import { System_Eevent } from "./Engine/CatanEngine/CSharp/System/System_Eevent";
|
||||
import LocalStorageData from "./Engine/Data/LocalStorageData";
|
||||
import { Enum_HUDM } from "./HUD/Enum_HUDM";
|
||||
import HUDM from "./HUD/HUDM";
|
||||
import NativeClass from "./NativeClass";
|
||||
@@ -41,8 +42,10 @@ export default class Manager extends cc.Component {
|
||||
private *_init(): IterableIterator<any> {
|
||||
console.log(`COMPILE VERSION: ${BusinessTypeSetting.COMPILE_VERSION}`);
|
||||
this.Version.string = `Ver ${BusinessTypeSetting.COMPILE_VERSION}`;
|
||||
BusinessTypeSetting.UsePatch = `https://jianmiau.tk/Resources/App/JMKA/update/remote-assets/${BusinessTypeSetting.NEXT_VERSION}`;
|
||||
cc.debug.setDisplayStats(false);
|
||||
|
||||
new LocalStorageData();
|
||||
new NativeClass(this.webview);
|
||||
if (cc.sys.isNative) {
|
||||
new HUDM(this.UpdatePanel.getComponentInChildren(UpdatePanel));
|
||||
|
@@ -1,4 +1,12 @@
|
||||
export default class BusinessTypeSetting {
|
||||
public static readonly MajorVersion: number = 3;
|
||||
public static readonly MinorVersion: number = 0;
|
||||
// public static readonly BuildVersion: number = 0;
|
||||
public static readonly Revision: number = 0;
|
||||
/** 編譯版本 */
|
||||
public static readonly COMPILE_VERSION: string = "3.0";
|
||||
public static readonly COMPILE_VERSION: string = `${BusinessTypeSetting.MajorVersion}.${BusinessTypeSetting.MinorVersion}.${BusinessTypeSetting.Revision}`;
|
||||
public static readonly NEXT_VERSION: string = `${BusinessTypeSetting.MajorVersion}.${BusinessTypeSetting.MinorVersion}.${BusinessTypeSetting.Revision + 1}`;
|
||||
|
||||
/** 資源伺服器網址 */
|
||||
public static UsePatch: string = null;
|
||||
}
|
Reference in New Issue
Block a user