UNPKG

wonder.js

Version:
426 lines (406 loc) 19.2 kB
'use strict'; var Most = require("most"); var Curry = require("bs-platform/lib/js/curry.js"); var Caml_obj = require("bs-platform/lib/js/caml_obj.js"); var Log$WonderLog = require("wonder-log/lib/js/src/Log.js"); var Contract$WonderLog = require("wonder-log/lib/js/src/Contract.js"); var BufferUtils$Wonderjs = require("../utils/BufferUtils.js"); var FetchExtend$Wonderjs = require("../../external/FetchExtend.js"); var ArrayService$Wonderjs = require("../../service/atom/ArrayService.js"); var StateDataMain$Wonderjs = require("../../service/state/main/data/StateDataMain.js"); var DataViewCommon$Wonderjs = require("../generate/DataViewCommon.js"); var HandleIMGUISystem$Wonderjs = require("../assemble/HandleIMGUISystem.js"); var LoadStreamWDBUtil$Wonderjs = require("../utils/LoadStreamWDBUtil.js"); var IsDebugMainService$Wonderjs = require("../../service/state/main/state/IsDebugMainService.js"); var ArrayService$WonderCommonlib = require("wonder-commonlib/lib/js/src/ArrayService.js"); var ConvertStreamSystem$Wonderjs = require("../converter/ConvertStreamSystem.js"); var DirectorMainService$Wonderjs = require("../../service/state/main/director/DirectorMainService.js"); var StateDataMainService$Wonderjs = require("../../service/state/main/state/StateDataMainService.js"); var OperateLoadMainService$Wonderjs = require("../../service/state/main/load/OperateLoadMainService.js"); var AssembleStreamWDBSystem$Wonderjs = require("../assemble/AssembleStreamWDBSystem.js"); var LoadStreamWDBBinBufferSystem$Wonderjs = require("./LoadStreamWDBBinBufferSystem.js"); var OperateScriptEventFunctionDataMainService$Wonderjs = require("../../service/state/main/script/OperateScriptEventFunctionDataMainService.js"); function _readReader (reader){ return reader.read(); }; function _close (controller){ controller.close(); }; function _getTotalLoadedByteLength(loadedUint8ArrayArr) { return ArrayService$WonderCommonlib.reduceOneParam((function (byteLength, loadedUint8Array) { return byteLength + loadedUint8Array.byteLength | 0; }), 0, loadedUint8ArrayArr); } function _getAllChunkLengths(allChunkLengths, totalLoadedByteLength, param) { if (allChunkLengths !== undefined) { return allChunkLengths; } else { var dataView = LoadStreamWDBUtil$Wonderjs.buildLoadedDataView(totalLoadedByteLength, /* tuple */[ param[0], param[1] ]); var match = DataViewCommon$Wonderjs.getUint32_1(BufferUtils$Wonderjs.getHeaderByteLength(/* () */0), dataView); var match$1 = DataViewCommon$Wonderjs.getUint32_1(BufferUtils$Wonderjs.getHeaderByteLength(/* () */0) + BufferUtils$Wonderjs.getWDBChunkHeaderByteLength(/* () */0) | 0, dataView); var match$2 = DataViewCommon$Wonderjs.getUint32_1((BufferUtils$Wonderjs.getHeaderByteLength(/* () */0) + BufferUtils$Wonderjs.getWDBChunkHeaderByteLength(/* () */0) | 0) + BufferUtils$Wonderjs.getWDBChunkHeaderByteLength(/* () */0) | 0, dataView); return /* tuple */[ match[0], match$1[0], match$2[0] ]; } } function _getStreamChunkData(streamChunkArr, chunkLengthData, totalLoadedByteLength, param) { var match = streamChunkArr.length > 0; if (match) { return streamChunkArr; } else { var dataView = LoadStreamWDBUtil$Wonderjs.buildLoadedDataView(totalLoadedByteLength, /* tuple */[ param[0], param[1] ]); return ConvertStreamSystem$Wonderjs.getStreamChunkArr(chunkLengthData, dataView); } } function _getJsonChunkStr(jsonChunkLength, totalLoadedByteLength, param) { var dataView = LoadStreamWDBUtil$Wonderjs.buildLoadedDataView(totalLoadedByteLength, /* tuple */[ param[0], param[1] ]); return BufferUtils$Wonderjs.getWDBJsonChunkStr(jsonChunkLength, dataView.buffer); } function _getBinBuffer(param, totalLoadedByteLength, totalUint8Array) { return new Uint8Array(totalUint8Array.buffer, (BufferUtils$Wonderjs.getWDBHeaderTotalByteLength(/* () */0) + BufferUtils$Wonderjs.alignedLength(param[0]) | 0) + BufferUtils$Wonderjs.alignedLength(param[1]) | 0, param[2]).buffer; } function _assembleAndStartLoop(assembleData, param, handleBeforeStartLoopFunc, state) { if (assembleData !== undefined) { return /* tuple */[ state, assembleData ]; } else { var match = AssembleStreamWDBSystem$Wonderjs.assemble(JSON.parse(_getJsonChunkStr(param[0], param[1], param[2])), param[3], state); var match$1 = match[3]; var match$2 = match[2]; var rootGameObject = match[1]; var state$1 = Curry._2(handleBeforeStartLoopFunc, match[0], rootGameObject); DirectorMainService$Wonderjs.start(state$1); return /* tuple */[ StateDataMainService$Wonderjs.unsafeGetState(StateDataMain$Wonderjs.stateData), /* tuple */[ rootGameObject, /* tuple */[ match$2[0], match$2[1], match$2[2] ], /* tuple */[ match$1[0], match$1[1], match$1[2] ] ] ]; } } function _isLoadHeader(totalLoadedByteLength) { return totalLoadedByteLength < BufferUtils$Wonderjs.getWDBHeaderTotalByteLength(/* () */0); } function _computeHeaderJsonStreamChunkTotalByteLength(jsonChunkLength, streamChunkLength) { return (BufferUtils$Wonderjs.getWDBHeaderTotalByteLength(/* () */0) + BufferUtils$Wonderjs.alignedLength(jsonChunkLength) | 0) + BufferUtils$Wonderjs.alignedLength(streamChunkLength) | 0; } function _isLoadBinBufferChunk(headerJsonStreamChunkTotalByteLength, totalLoadedByteLength) { return Caml_obj.caml_greaterequal(totalLoadedByteLength, headerJsonStreamChunkTotalByteLength); } function _isLoadStreamChunk(jsonChunkLength, totalLoadedByteLength) { return totalLoadedByteLength >= (BufferUtils$Wonderjs.getWDBHeaderTotalByteLength(/* () */0) + jsonChunkLength | 0); } function _getTotalNeedLoadedByteLength(allChunkLengths, totalLoadedByteLength, param) { var allChunkLengths$1 = _getAllChunkLengths(allChunkLengths, totalLoadedByteLength, /* tuple */[ param[0], param[1] ]); return ((BufferUtils$Wonderjs.getWDBHeaderTotalByteLength(/* () */0) + BufferUtils$Wonderjs.alignedLength(allChunkLengths$1[0]) | 0) + BufferUtils$Wonderjs.alignedLength(allChunkLengths$1[1]) | 0) + BufferUtils$Wonderjs.alignedLength(allChunkLengths$1[2]) | 0; } function _handleDone(controller, assembleData, param, handleWhenDoneFunc) { var totalUint8Array = param[2]; var loadedUint8ArrayArr = param[1]; var allChunkLengths = param[0]; Contract$WonderLog.requireCheck((function (param) { Contract$WonderLog.test(Log$WonderLog.buildAssertMessage("totalUint8Array should >= loaded data", "not"), (function (param) { var totalLoadedByteLength = _getTotalLoadedByteLength(loadedUint8ArrayArr); return Contract$WonderLog.Operators[/* >= */7](totalUint8Array.byteLength, totalLoadedByteLength); })); return Contract$WonderLog.test(Log$WonderLog.buildAssertMessage("load all data", "not"), (function (param) { var totalLoadedByteLength = _getTotalLoadedByteLength(loadedUint8ArrayArr); return Contract$WonderLog.Operators[/* = */0](totalLoadedByteLength, _getTotalNeedLoadedByteLength(allChunkLengths, totalLoadedByteLength, /* tuple */[ loadedUint8ArrayArr, totalUint8Array ])); })); }), IsDebugMainService$Wonderjs.getIsDebug(StateDataMain$Wonderjs.stateData)); var totalLoadedByteLength = _getTotalLoadedByteLength(loadedUint8ArrayArr); var allChunkLengths$1 = _getAllChunkLengths(allChunkLengths, totalLoadedByteLength, /* tuple */[ loadedUint8ArrayArr, totalUint8Array ]); var jsonChunkLength = allChunkLengths$1[0]; return Most.drain(HandleIMGUISystem$Wonderjs.handleIMGUI(true, JSON.parse(_getJsonChunkStr(jsonChunkLength, totalLoadedByteLength, /* tuple */[ loadedUint8ArrayArr, totalUint8Array ])), _getBinBuffer(/* tuple */[ jsonChunkLength, allChunkLengths$1[1], allChunkLengths$1[2] ], totalLoadedByteLength, totalUint8Array), StateDataMainService$Wonderjs.unsafeGetState(StateDataMain$Wonderjs.stateData))).then((function (param) { _close(controller); if (assembleData !== undefined) { var state = OperateLoadMainService$Wonderjs.markCanExecScriptAllEventFunction(true, Curry._2(handleWhenDoneFunc, StateDataMainService$Wonderjs.unsafeGetState(StateDataMain$Wonderjs.stateData), assembleData[0])); StateDataMainService$Wonderjs.setState(StateDataMain$Wonderjs.stateData, OperateScriptEventFunctionDataMainService$Wonderjs.execAllEventFunction(OperateScriptEventFunctionDataMainService$Wonderjs.getAllActiveInitEventFunctionData(state), state)); return Promise.resolve(/* () */0); } else { Log$WonderLog.error(Log$WonderLog.buildErrorMessage("read", "assembleData should exist, but actually is none", "", "", "")); return Promise.resolve(/* () */0); } })); } function read(param, param$1, param$2, reader) { var loadBlobImageMap = param$2[5]; var loadedStreamChunkArrWhichNotHasAllData = param$2[4]; var nextStreamChunkIndex = param$2[3]; var assembleData = param$2[2]; var streamChunkArr = param$2[1]; var allChunkLengths = param$2[0]; var totalUint8Array = param$1[1]; var loadedUint8ArrayArr = param$1[0]; var handleWhenDoneFunc = param[4]; var handleBeforeStartLoopFunc = param[3]; var match = param[2]; var handleWhenLoadingFunc = match[2]; var wdbPath = match[1]; var contentLength = match[0]; var controller = param[1]; var default11Image = param[0]; return _readReader(reader).then((function (streamData) { var match = FetchExtend$Wonderjs.isDone(streamData); if (match) { return _handleDone(controller, assembleData, /* tuple */[ allChunkLengths, loadedUint8ArrayArr, totalUint8Array ], handleWhenDoneFunc); } else { return _handleLoading(streamData, /* tuple */[ default11Image, controller, /* tuple */[ contentLength, wdbPath, handleWhenLoadingFunc ], handleBeforeStartLoopFunc, handleWhenDoneFunc ], /* tuple */[ loadedUint8ArrayArr, totalUint8Array ], /* tuple */[ allChunkLengths, streamChunkArr, assembleData, nextStreamChunkIndex, loadedStreamChunkArrWhichNotHasAllData, loadBlobImageMap ], reader); } })); } function _handleLoadBinBufferChunk(param, param$1, param$2, param$3, reader) { var allChunkLengths = param$3[0]; var totalUint8Array = param$2[1]; var loadedUint8ArrayArr = param$2[0]; var handleWhenDoneFunc = param$1[4]; var handleBeforeStartLoopFunc = param$1[3]; var match = param$1[2]; var handleWhenLoadingFunc = match[2]; var wdbPath = match[1]; var contentLength = match[0]; var controller = param$1[1]; var default11Image = param$1[0]; var totalLoadedByteLength = param[2]; var jsonChunkLength = param[0]; var streamChunkArr = _getStreamChunkData(param$3[1], /* tuple */[ jsonChunkLength, param[1] ], totalLoadedByteLength, /* tuple */[ loadedUint8ArrayArr, totalUint8Array ]); var state = StateDataMainService$Wonderjs.unsafeGetState(StateDataMain$Wonderjs.stateData); var state$1 = OperateLoadMainService$Wonderjs.markCanExecScriptAllEventFunction(false, state); var match$1 = _assembleAndStartLoop(param$3[2], /* tuple */[ jsonChunkLength, totalLoadedByteLength, /* tuple */[ loadedUint8ArrayArr, totalUint8Array ], default11Image ], handleBeforeStartLoopFunc, state$1); return LoadStreamWDBBinBufferSystem$Wonderjs.handleBinBufferData(/* tuple */[ param[3], totalLoadedByteLength, /* tuple */[ loadedUint8ArrayArr, totalUint8Array ] ], /* tuple */[ param$3[3], streamChunkArr, param$3[4], param$3[5] ], match$1[1], match$1[0]).then((function (param) { StateDataMainService$Wonderjs.setState(StateDataMain$Wonderjs.stateData, param[0]); return read(/* tuple */[ default11Image, controller, /* tuple */[ contentLength, wdbPath, handleWhenLoadingFunc ], handleBeforeStartLoopFunc, handleWhenDoneFunc ], /* tuple */[ loadedUint8ArrayArr, totalUint8Array ], /* tuple */[ allChunkLengths, param[1], param[2], param[3], param[4], param[5] ], reader); })); } function _handleLoading(streamData, param, param$1, param$2, reader) { var loadBlobImageMap = param$2[5]; var loadedStreamChunkArrWhichNotHasAllData = param$2[4]; var nextStreamChunkIndex = param$2[3]; var assembleData = param$2[2]; var streamChunkArr = param$2[1]; var allChunkLengths = param$2[0]; var totalUint8Array = param$1[1]; var handleWhenDoneFunc = param[4]; var handleBeforeStartLoopFunc = param[3]; var match = param[2]; var handleWhenLoadingFunc = match[2]; var wdbPath = match[1]; var contentLength = match[0]; var controller = param[1]; var default11Image = param[0]; var value = streamData.value; var loadedUint8ArrayArr = ArrayService$Wonderjs.push(value, param$1[0]); var totalLoadedByteLength = _getTotalLoadedByteLength(loadedUint8ArrayArr); Curry._3(handleWhenLoadingFunc, totalLoadedByteLength, contentLength, wdbPath); var match$1 = totalLoadedByteLength < BufferUtils$Wonderjs.getWDBHeaderTotalByteLength(/* () */0); if (match$1) { return read(/* tuple */[ default11Image, controller, /* tuple */[ contentLength, wdbPath, handleWhenLoadingFunc ], handleBeforeStartLoopFunc, handleWhenDoneFunc ], /* tuple */[ loadedUint8ArrayArr, totalUint8Array ], /* tuple */[ allChunkLengths, streamChunkArr, assembleData, nextStreamChunkIndex, loadedStreamChunkArrWhichNotHasAllData, loadBlobImageMap ], reader); } else { var allChunkLengths$1 = _getAllChunkLengths(allChunkLengths, totalLoadedByteLength, /* tuple */[ loadedUint8ArrayArr, totalUint8Array ]); var streamChunkLength = allChunkLengths$1[1]; var jsonChunkLength = allChunkLengths$1[0]; var headerJsonStreamChunkTotalByteLength = _computeHeaderJsonStreamChunkTotalByteLength(jsonChunkLength, streamChunkLength); var match$2 = Caml_obj.caml_greaterequal(totalLoadedByteLength, headerJsonStreamChunkTotalByteLength); if (match$2) { return _handleLoadBinBufferChunk(/* tuple */[ jsonChunkLength, streamChunkLength, totalLoadedByteLength, headerJsonStreamChunkTotalByteLength ], /* tuple */[ default11Image, controller, /* tuple */[ contentLength, wdbPath, handleWhenLoadingFunc ], handleBeforeStartLoopFunc, handleWhenDoneFunc ], /* tuple */[ loadedUint8ArrayArr, totalUint8Array ], /* tuple */[ allChunkLengths$1, streamChunkArr, assembleData, nextStreamChunkIndex, loadedStreamChunkArrWhichNotHasAllData, loadBlobImageMap ], reader); } else { return read(/* tuple */[ default11Image, controller, /* tuple */[ contentLength, wdbPath, handleWhenLoadingFunc ], handleBeforeStartLoopFunc, handleWhenDoneFunc ], /* tuple */[ loadedUint8ArrayArr, totalUint8Array ], /* tuple */[ allChunkLengths$1, streamChunkArr, assembleData, nextStreamChunkIndex, loadedStreamChunkArrWhichNotHasAllData, loadBlobImageMap ], reader); } } } exports._readReader = _readReader; exports._close = _close; exports._getTotalLoadedByteLength = _getTotalLoadedByteLength; exports._getAllChunkLengths = _getAllChunkLengths; exports._getStreamChunkData = _getStreamChunkData; exports._getJsonChunkStr = _getJsonChunkStr; exports._getBinBuffer = _getBinBuffer; exports._assembleAndStartLoop = _assembleAndStartLoop; exports._isLoadHeader = _isLoadHeader; exports._computeHeaderJsonStreamChunkTotalByteLength = _computeHeaderJsonStreamChunkTotalByteLength; exports._isLoadBinBufferChunk = _isLoadBinBufferChunk; exports._isLoadStreamChunk = _isLoadStreamChunk; exports._getTotalNeedLoadedByteLength = _getTotalNeedLoadedByteLength; exports._handleDone = _handleDone; exports.read = read; exports._handleLoadBinBufferChunk = _handleLoadBinBufferChunk; exports._handleLoading = _handleLoading; /* most Not a pure module */