155 lines
5.8 KiB
JavaScript
Raw Permalink Normal View History

2021-06-07 15:13:32 +08:00
(function()
{
//是否启用热更新
var __updateEnabled = 0;
var boot = function()
{
require("main.js");
}
if (!__updateEnabled)
{
boot();
return;
}
var platform = __getPlatform(); //0-WINDOWS, 1-LINUX, 2-MAC 3-ANDROIDOS 4-IPHONE 5-IPAD
var storagePath = platform == 2 ? cxnative.NativeCreator.createNativeClass("cx.sys").call("getStoragePath", []) + "/" : "";
storagePath = jsb.fileUtils.getWritablePath() + "_cxcache/" + storagePath;
var manifestUrl = "project.manifest";
var manager = new jsb.AssetsManager(manifestUrl, storagePath);
var setSearchPaths = function()
{
var searchPath = jsb.fileUtils.getStringFromFile('.cx.searchPaths');
if (!searchPath)
return;
searchPath = JSON.parse(searchPath);
jsb.fileUtils.setSearchPaths(searchPath);
var fileList = [];
var tempPath = storagePath + 'updateTemp/';
var baseOffset = tempPath.length;
if (jsb.fileUtils.isDirectoryExist(tempPath) && !jsb.fileUtils.isFileExist(tempPath + 'project.manifest.temp'))
{
jsb.fileUtils.listFilesRecursively(tempPath, fileList);
fileList.forEach(srcPath =>
{
var relativePath = srcPath.substr(baseOffset);
var dstPath = storagePath + relativePath;
if (srcPath[srcPath.length] == '/')
jsb.fileUtils.createDirectory(dstPath)
else
{
if (cc.fileUtils.isFileExist(dstPath))
jsb.fileUtils.removeFile(dstPath)
jsb.fileUtils.renameFile(srcPath, dstPath);
}
})
jsb.fileUtils.removeDirectory(tempPath);
}
};
var updateCallback = function(event)
{
var completed, failed, canceled;
switch (event.getEventCode())
{
case 0: //jsb.EventAssetsManager.ERROR_NO_LOCAL_MANIFEST:
console.log("...update failed: No local manifest file found.");
failed = true;
break;
case 1: //jsb.EventAssetsManager.ERROR_DOWNLOAD_MANIFEST:
case 2: //jsb.EventAssetsManager.ERROR_PARSE_MANIFEST:
console.log("...update failed: Fail to download manifest file.");
failed = true;
break;
case 3:
console.log("...update NEW_VERSION_FOUND.");
break;
case 4: //jsb.EventAssetsManager.ALREADY_UP_TO_DATE:
console.log("...update skip: Already is the latest version.");
canceled = true;
break;
case 5: //jsb.EventAssetsManager.UPDATE_PROGRESSION:
var msg = event.getAssetId() + event.getMessage();
console.log("...update file: " + (!msg ? event.getDownloadedFiles() + "/" + event.getTotalFiles() : msg));
break;
case 6:
console.log("...update ASSET_UPDATED.");
break;
case 7: //jsb.EventAssetsManager.ERROR_UPDATING:
console.log("...update Asset error: " + event.getAssetId() + ", " + event.getMessage());
break;
case 8: //jsb.EventAssetsManager.UPDATE_FINISHED:
console.log("...update file finished.");
completed = true;
break;
case 9: //jsb.EventAssetsManager.UPDATE_FAILED:
console.log("...update failed: " + event.getMessage());
break;
case 10: //jsb.EventAssetsManager.ERROR_DECOMPRESS:
console.log("...update Asset decompress error: " + event.getMessage());
default:
console.log("...update Asset undefined event: " + event.getEventCode());
}
if (canceled)
{
manager.setEventCallback(null);
boot();
}
if (failed)
{
manager.setEventCallback(null);
console.log("...update skip...");
//如果是ios第一次启动需要网络权限导致的更新失败则待用户点击后授权后重启
if (platform == 4 || platform == 5)
{
var fullpath = storagePath + "firstLoad.log";
if (!jsb.fileUtils.getStringFromFile(fullpath))
{
console.log("...update restartForUpdate...");
jsb.fileUtils.writeStringToFile((new Date().getTime()) + "", fullpath);
cxnative.NativeCreator.createNativeClass("cx.sys").call("restartForUpdate", []);
return;
}
}
boot();
}
if (completed)
{
manager.setEventCallback(null);
var searchPaths = jsb.fileUtils.getSearchPaths();
var newPaths = manager.getLocalManifest().getSearchPaths();
if (searchPaths)
{
if(searchPaths[0] != newPaths)
Array.prototype.unshift.apply(searchPaths, newPaths);
}
jsb.fileUtils.writeStringToFile(JSON.stringify(searchPaths), ".cx.searchPaths");
jsb.fileUtils.setSearchPaths(searchPaths);
console.log("...update completed...");
boot();
}
};
var startUpdate = function()
{
console.log("...update...");
if (!manager.getLocalManifest().isLoaded())
{
console.log("...update getLocalManifest error...");
boot();
}
else
{
manager.setEventCallback(updateCallback);
if(manager.getState() == 0)
manager.loadLocalManifest(manifestUrl);
manager.update();
}
};
setSearchPaths();
startUpdate();
})();