import { Utils } from '@uino/base-thing';
/**
* @class System
* The system.
* @memberof THING
*/
class System {
#wasmLoader = null;
constructor() {
}
// #region Private
// #endregion
update(deltaTime) {
if (this.#wasmLoader) {
this.#wasmLoader.update(deltaTime);
}
}
loadWasmModule(wasmRootPath, workerOptions = {}, callbackOptions = {}) {
let wasmLoader = this.#wasmLoader;
// Prevent to call multiple times
if (wasmLoader) {
let loadingPromise = wasmLoader.loadingPromise;
if (loadingPromise.resolved) {
return Promise.resolve({ module: wasmLoader.module, wasmOptions: wasmLoader.options });
}
else {
return loadingPromise;
}
}
else {
// Start to load WASM module
let wasmLoader = Utils.createObject('WasmLoader');
if (!wasmLoader) {
return Promise.reject('Create wasm loader failed');
}
this.#wasmLoader = wasmLoader;
return new Promise(async (resolve, reject) => {
let module = await wasmLoader.init({
wasmRootPath,
workerOptions,
callbackOptions
});
let wasmOptions = wasmLoader.options;
resolve({ module, wasmOptions });
});
}
}
login(method, url, requestHeaders, postFields) {
return this.#wasmLoader.resourceDownloader.login(method, url, requestHeaders, postFields).catch(() => {
Utils.error('Login failed, please check if the url is valid');
});
}
/**
* Check whether it's encrypted resource data.
* @param {ArrayBuffer} arrayBuffer The resource data
* @returns {Boolean}
* @example
* let file = await THING.Utils.loadBinaryFileAsync("./models/theme/frame.js");
* console.log(file);
* let result = THING.Utils._system.isEncryptedResourceData(file);
* console.log(result);
* @private
*/
isEncryptedResourceData(arrayBuffer) {
let resourceDownloader = this.#wasmLoader.resourceDownloader;
return resourceDownloader.isEncryptedResourceData(arrayBuffer);
}
/**
* Decrypt resource.
* @param {ArrayBuffer} arrayBuffer The resource data
* @returns {Promise<Uint8Array>}
* @example
* let file = await THING.Utils.loadBinaryFileAsync("./models/theme/frame.js");
* console.log(file);
* if (THING.Utils._system.isEncryptedResourceData(file)) {
* let data = await THING.Utils._system.decryptedResource(file);
* console.log(data);
* }
* @private
*/
decryptedResource(arrayBuffer) {
return new Promise((resolve, reject) => {
let resourceDownloader = this.#wasmLoader.resourceDownloader;
let data = resourceDownloader.decryptedResource(arrayBuffer);
resolve(data);
});
}
get httpRequestHeaders() {
return this.#wasmLoader.resourceDownloader.httpRequestHeaders;
}
set httpRequestHeaders(value) {
this.#wasmLoader.resourceDownloader.httpRequestHeaders = value;
}
get onGetResourceTypeFromUrl() {
return this.#wasmLoader.resourceDownloader.onGetResourceTypeFromUrl;
}
set onGetResourceTypeFromUrl(value) {
this.#wasmLoader.resourceDownloader.onGetResourceTypeFromUrl = value;
}
}
export { System }