open source
This commit is contained in:
@@ -0,0 +1,356 @@
|
||||
"use strict";
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||
});
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
window._conchInfo = { version: '2.1.3.1' };
|
||||
var _inline = !conchConfig.localizable;
|
||||
console.log('====================================================== ');
|
||||
console.log(' LAYA CONCH ');
|
||||
console.log(' runtimeversion:' + conchConfig.getRuntimeVersion());
|
||||
console.log(' jsversion:' + window._conchInfo.version);
|
||||
console.log(' isplug:' + conchConfig.getIsPlug());
|
||||
console.log('======================================================');
|
||||
function log(m) {
|
||||
console.log(m);
|
||||
}
|
||||
if (conchConfig.getOS() == "Conch-ios") {
|
||||
require('promise');
|
||||
}
|
||||
function loadLib(url) {
|
||||
var script = document.createElement("script");
|
||||
if (url.indexOf("laya.physics3D.js") >= 0) {
|
||||
url = url.replace("laya.physics3D.js", "laya.physics3D.runtime.js");
|
||||
}
|
||||
script.src = url;
|
||||
script.onerror = function () {
|
||||
if (window["onLayaInitError"]) {
|
||||
window["onLayaInitError"]("Load script error");
|
||||
}
|
||||
};
|
||||
document.head.appendChild(script);
|
||||
}
|
||||
window['loadLib'] = loadLib;
|
||||
const asyncs = require("async");
|
||||
function initFreeType() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
var sOS = conchConfig.getOS();
|
||||
var bRet = false;
|
||||
var sTempFontPath = conch.getCachePath() + "/runtimeFont/";
|
||||
if (!fs_exists(sTempFontPath)) {
|
||||
fs_mkdir(sTempFontPath);
|
||||
}
|
||||
sTempFontPath += "layabox.ttf";
|
||||
bRet = _conchTextCanvas.initFreeTypeDefaultFontFromFile(sTempFontPath);
|
||||
if (bRet == false) {
|
||||
var assetFontData = conch.readFileFromAsset('font/layabox.ttf', 'raw');
|
||||
if (assetFontData) {
|
||||
fs_writeFileSync(sTempFontPath, assetFontData);
|
||||
bRet = _conchTextCanvas.initFreeTypeDefaultFontFromFile(sTempFontPath);
|
||||
}
|
||||
}
|
||||
if (!bRet) {
|
||||
if (sOS == "Conch-window") {
|
||||
bRet = _conchTextCanvas.initFreeTypeDefaultFontFromFile("C:/Windows/Fonts/simhei.ttf");
|
||||
}
|
||||
else if (sOS == "Conch-android") {
|
||||
var fSystemVersion = navigator.sv;
|
||||
if (fSystemVersion >= 2.0 && fSystemVersion < 5.0) {
|
||||
bRet = _conchTextCanvas.initFreeTypeDefaultFontFromFile("/system/fonts/DFHEIA5A.ttf");
|
||||
if (bRet == false) {
|
||||
bRet = _conchTextCanvas.initFreeTypeDefaultFontFromFile("/system/fonts/DroidSansFallback.ttf");
|
||||
}
|
||||
}
|
||||
else if (fSystemVersion >= 5.0 && fSystemVersion < 6.0) {
|
||||
var vDefaultStrings = [];
|
||||
vDefaultStrings.push("/system/fonts/NotoSansHans-Regular.otf");
|
||||
vDefaultStrings.push("/system/fonts/Roboto-Regular.ttf");
|
||||
bRet = _conchTextCanvas.initFreeTypeDefaultFontFromFile(vDefaultStrings.join('|'));
|
||||
}
|
||||
else if (fSystemVersion >= 6.0 && fSystemVersion < 7.0) {
|
||||
var vDefaultStrings = [];
|
||||
vDefaultStrings.push("/system/fonts/NotoSansSC-Regular.otf");
|
||||
vDefaultStrings.push("/system/fonts/Roboto-Regular.ttf");
|
||||
bRet = _conchTextCanvas.initFreeTypeDefaultFontFromFile(vDefaultStrings.join('|'));
|
||||
}
|
||||
else if (fSystemVersion >= 7.0 && fSystemVersion < 8.0) {
|
||||
bRet = false;
|
||||
}
|
||||
}
|
||||
else if (sOS == "Conch-ios") {
|
||||
bRet = _conchTextCanvas.initFreeTypeDefaultFontFromFile("");
|
||||
}
|
||||
}
|
||||
if (bRet == false) {
|
||||
log('字体初始化失败,从网络下载字体...');
|
||||
var data = (yield asyncs.downloadSync(location.fullpath + '/font/simhei.ttf', true, null));
|
||||
if (!data) {
|
||||
data = (yield asyncs.downloadSync('http://runtime.layabox.com/font/simhei.ttf', true, null));
|
||||
}
|
||||
if (!data) {
|
||||
alert('下载字体失败。 ');
|
||||
return;
|
||||
}
|
||||
fs_writeFileSync(sTempFontPath, data);
|
||||
bRet = _conchTextCanvas.initFreeTypeDefaultFontFromFile(sTempFontPath);
|
||||
}
|
||||
if (!bRet) {
|
||||
log('字体初始化失败。');
|
||||
}
|
||||
});
|
||||
}
|
||||
function setOrientation(s) {
|
||||
var nameToVal = {
|
||||
landscape: 0, portrait: 1, user: 2, behind: 3, sensor: 4, nosensor: 5, sensor_landscape: 6, sensorLandscape: 6,
|
||||
sensor_portrait: 7, sensorPortrait: 7, reverse_landscape: 8, reverseLandscape: 8, reverse_portrait: 9, reversePortrait: 9, full_sensor: 10, fullSensor: 10,
|
||||
};
|
||||
var nOri = (function (name) {
|
||||
try {
|
||||
var n = nameToVal[name];
|
||||
return n || 0;
|
||||
}
|
||||
catch (e) {
|
||||
return 0;
|
||||
}
|
||||
})(s);
|
||||
conchConfig.setScreenOrientation(nOri);
|
||||
;
|
||||
}
|
||||
Object.defineProperty(window, 'screenOrientation', {
|
||||
get: function () {
|
||||
return window.___screenOri;
|
||||
},
|
||||
set: function (v) {
|
||||
window.___screenOri = v;
|
||||
setOrientation(v);
|
||||
}
|
||||
});
|
||||
function startApp(data) {
|
||||
var jsonobj = null;
|
||||
try {
|
||||
jsonobj = JSON.parse(data);
|
||||
}
|
||||
catch (e) {
|
||||
console.log("Error:start page parse error! \n " + data);
|
||||
return;
|
||||
}
|
||||
jsonobj.scripts.forEach((v) => {
|
||||
var t = document.createElement("script");
|
||||
t["src"] = v;
|
||||
t.onerror = function () {
|
||||
if (window["onLayaInitError"]) {
|
||||
window["onLayaInitError"]("Load script error");
|
||||
}
|
||||
};
|
||||
document.head.appendChild(t);
|
||||
});
|
||||
if (jsonobj.screenOrientation)
|
||||
setOrientation(jsonobj.screenOrientation);
|
||||
else if (jsonobj.screenorientation)
|
||||
setOrientation(jsonobj.screenorientation);
|
||||
else
|
||||
setOrientation("sensor_landscape");
|
||||
document.createElement("script").text = "window.onload&&window.onload()";
|
||||
}
|
||||
function loadApp(url) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
var urllen = url.length;
|
||||
if (urllen < 2)
|
||||
return;
|
||||
url = url.trim();
|
||||
if (url.substring(urllen - 1) === '/')
|
||||
url = url + 'runtime.json';
|
||||
url = url.replace(/.html$/i, '.json');
|
||||
if (url.indexOf('http://stand.alone.version') == 0)
|
||||
_inline = false;
|
||||
if (!_inline) {
|
||||
url = 'http://stand.alone.version/index.js';
|
||||
}
|
||||
console.log("loadApp:" + url);
|
||||
if (history.length <= 0) {
|
||||
history._push(url);
|
||||
}
|
||||
if (url.length < 2)
|
||||
return;
|
||||
location.setHref(url);
|
||||
var urlpath = location.fullpath + '/';
|
||||
var cache = window.appcache = new AppCache(urlpath);
|
||||
document.loadCookie();
|
||||
yield initFreeType();
|
||||
try {
|
||||
require("config");
|
||||
}
|
||||
catch (e) {
|
||||
}
|
||||
var isDccOk = true;
|
||||
function updateDcc() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
cache.setResourceID('appurl', urlpath);
|
||||
var curassets = cache.getResourceID('netassetsid');
|
||||
var assetsidStr = (yield asyncs.downloadSync(urlpath + 'update/assetsid.txt?rand=' + Math.random() * Date.now(), false, null));
|
||||
console.log("assetsid old:" + curassets + " new:" + assetsidStr);
|
||||
if (!assetsidStr) {
|
||||
if (curassets && curassets != "") {
|
||||
if (window["onLayaInitError"]) {
|
||||
isDccOk = false;
|
||||
window["onLayaInitError"]("Update DCC get assetsid error");
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (curassets != assetsidStr) {
|
||||
log('need update;');
|
||||
var txtdcc = '';
|
||||
var bindcc = yield asyncs.downloadSync(urlpath + 'update/filetable.bin?' + assetsidStr, true, null);
|
||||
if (!bindcc || !(bindcc instanceof ArrayBuffer)) {
|
||||
txtdcc = (yield asyncs.downloadSync(urlpath + 'update/filetable.txt?' + assetsidStr, false, null));
|
||||
}
|
||||
else {
|
||||
if (bindcc.byteLength % 8 != 0) {
|
||||
log('下载的的filetable.bin的长度不对。是不是错了。');
|
||||
}
|
||||
else {
|
||||
var v = new Uint32Array(bindcc);
|
||||
if (v[0] != 0xffeeddcc || v[1] != 1) {
|
||||
log('dcc.bin file err!');
|
||||
}
|
||||
else {
|
||||
if (v[2] == 0x00ffffff) {
|
||||
var stp = (4 + 8) / 2;
|
||||
var md5int = v.slice(4, 12);
|
||||
var md5char = new Uint8Array(md5int.buffer);
|
||||
var so = String.fromCharCode.apply(null, md5char);
|
||||
console.log('--------------------------------------------');
|
||||
console.log('so=' + so);
|
||||
console.log('netid=' + assetsidStr);
|
||||
if (so == assetsidStr) {
|
||||
for (var ii = stp, isz = v.length / 2; ii < isz; ii++)
|
||||
txtdcc += v[ii * 2].toString(16) + ' ' + v[ii * 2 + 1].toString(16) + '\n';
|
||||
}
|
||||
}
|
||||
else {
|
||||
console.log('----------------old format');
|
||||
for (var ii = 1, isz = v.length / 2; ii < isz; ii++)
|
||||
txtdcc += v[ii * 2].toString(16) + ' ' + v[ii * 2 + 1].toString(16) + '\n';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (txtdcc && txtdcc.length > 0) {
|
||||
cache.saveFileTable(txtdcc);
|
||||
window.appcache = cache = new AppCache(urlpath);
|
||||
cache.setResourceID('netassetsid', assetsidStr);
|
||||
}
|
||||
else {
|
||||
if (window["onLayaInitError"]) {
|
||||
isDccOk = false;
|
||||
window["onLayaInitError"]("Update DCC get filetable error");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
if (_inline) {
|
||||
yield updateDcc();
|
||||
if (!isDccOk) {
|
||||
console.log("init dcc fail");
|
||||
return;
|
||||
}
|
||||
}
|
||||
var data = yield asyncs.loadText(url);
|
||||
for (var n = 0; n < 3 && !data; n++) {
|
||||
data = yield asyncs.loadText(url);
|
||||
}
|
||||
if (!data) {
|
||||
if (window["loadingView"]) {
|
||||
window["loadingView"].setFontColor("#FF0000");
|
||||
window["loadingView"].setTips(['网络异常,请检查您的网络或与开发商联系。']);
|
||||
}
|
||||
data = cache.loadCachedURL(url);
|
||||
if (!data || data.length <= 0)
|
||||
if (window["onLayaInitError"]) {
|
||||
window["onLayaInitError"]("Load start url error");
|
||||
}
|
||||
return;
|
||||
}
|
||||
console.log("");
|
||||
var qpos = url.indexOf('?');
|
||||
if (qpos < 0)
|
||||
qpos = url.length;
|
||||
if (url.substr(qpos - 3, 3) === '.js') {
|
||||
window.eval(data + `
|
||||
//@ sourceURL=${url}
|
||||
`);
|
||||
document.createElement("script").text = "window.onload&&window.onload()";
|
||||
}
|
||||
else {
|
||||
startApp(data);
|
||||
}
|
||||
if (window["loadingView"] && window["loadingView"].loadingAutoClose) {
|
||||
window["loadingView"].hideLoadingView();
|
||||
}
|
||||
});
|
||||
}
|
||||
window.document.addEventListener('keydown', function (e) {
|
||||
switch (e.keyCode) {
|
||||
case 116:
|
||||
reloadJS(true);
|
||||
break;
|
||||
case 117:
|
||||
history.back();
|
||||
break;
|
||||
case 118:
|
||||
break;
|
||||
case 119:
|
||||
break;
|
||||
case 120:
|
||||
gc();
|
||||
break;
|
||||
}
|
||||
});
|
||||
window.loadConchUrl = loadApp;
|
||||
window['updateByZip'] = function (url, onEvent, onEnd) {
|
||||
let cachePath = conch.getCachePath();
|
||||
let localfile = cachePath + url.substr(url.lastIndexOf('/'));
|
||||
downloadBigFile(url, localfile, (total, now, speed) => {
|
||||
onEvent('downloading', Math.floor((now / total) * 100), null);
|
||||
return false;
|
||||
}, (curlret, httpret) => {
|
||||
if (curlret != 0 || httpret < 200 || httpret >= 300) {
|
||||
onEvent('downloadError');
|
||||
}
|
||||
else {
|
||||
onEvent('downloadOK');
|
||||
let zip = new ZipFile();
|
||||
if (zip.setSrc(localfile)) {
|
||||
zip.forEach((id, name, dir, sz) => {
|
||||
if (!dir) {
|
||||
let buf = zip.readFile(id);
|
||||
let fid = window.appcache.hashstr('/' + name);
|
||||
if (window.appcache.updateFile(fid, 0, buf, false)) {
|
||||
onEvent('updating', null, name);
|
||||
}
|
||||
else {
|
||||
onEvent("updateError", null, name);
|
||||
}
|
||||
}
|
||||
});
|
||||
zip.close();
|
||||
if (onEnd)
|
||||
onEnd(localfile);
|
||||
}
|
||||
else {
|
||||
console.log("set zip src error!");
|
||||
onEvent('unknownError');
|
||||
}
|
||||
}
|
||||
}, 10, 100000000);
|
||||
};
|
||||
loadApp(conch.presetUrl || "http://nativetest.layabox.com/layaplayer2.0.1/index.js");
|
||||
Reference in New Issue
Block a user