UNPKG

gamelet-pixui-frame

Version:

pixui开发者框架

290 lines 9.87 kB
"use strict"; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.UnityGameletAdapter = void 0; var FUNCARG_OP_CODE = { "ADD_DISPOSABLE_FUNC": 0, "ADD_NONDISPOSABLE_FUNC": 1, "REMOVE_NONDISPOSABLE_FUNC": 2, }; function makeSingleton(cls) { return (function () { var instance; return { getInstance: function () { if (!instance) { instance = new cls(); } return instance; } }; })(); } function functionArgEncoder(adapter, funcOpCode, arg) { var wrapper = {}; wrapper.valuetype = "function"; switch (funcOpCode) { case FUNCARG_OP_CODE.ADD_DISPOSABLE_FUNC: { wrapper.callbackID = adapter.registerDisposableCallback(arg); } ; break; case FUNCARG_OP_CODE.ADD_NONDISPOSABLE_FUNC: { wrapper.callbackID = adapter.registerNondisposableCallback(arg); } ; break; case FUNCARG_OP_CODE.REMOVE_NONDISPOSABLE_FUNC: { wrapper.callbackID = adapter.getNondisposableCallbackID(arg); if (wrapper.callbackID != undefined) adapter.removeNondisposableCallbackByID(wrapper.callbackID); } ; break; } wrapper.funcOpCode = funcOpCode; return wrapper; } function objectArgEncoder(adapter, funcOpCode, arg) { var wrapper = {}; wrapper.valuetype = "table"; wrapper.value = JSON.stringify(arg); return wrapper; } function undefinedArgEncoder(adapter, funcOpCode, arg) { var wrapper = {}; wrapper.valuetype = "nil"; return wrapper; } var ARG_ENCODERS = { "function": functionArgEncoder, "object": objectArgEncoder, "undefined": undefinedArgEncoder, }; function encodeArgs(adapter, funcOpCode) { var args = []; for (var _i = 2; _i < arguments.length; _i++) { args[_i - 2] = arguments[_i]; } var encodedArgs = []; for (var i = 0; i < args.length; ++i) { var argtype = typeof (args[i]); var encoder = ARG_ENCODERS[argtype]; if (encoder === undefined) { //@ts-ignore encodedArgs.push(args[i]); } else { //@ts-ignore // let arg = encoder(adapter, funcOpCode, args[i]); encodedArgs.push(encoder(adapter, funcOpCode, args[i])); } } return encodedArgs; } function tableArgDecoder(arg) { return JSON.parse(arg.value); } function nilArgDecoder(arg) { return undefined; } var ARG_DECODERS = { "table": tableArgDecoder, "nil": nilArgDecoder, }; function decodeArgs(args) { var decoededArgs = []; for (var i = 0; i < args.length; ++i) { var argtype = args[i].valuetype; var decoder = ARG_DECODERS[argtype]; if (decoder === undefined) { //@ts-ignore decoededArgs.push(args[i]); } else { //@ts-ignore decoededArgs.push(decoder(args[i])); } } return decoededArgs; } var LUA_EVENT_HANDLER_MAPPER = { "InvokeJavascriptDisposableCallback": "onInvokeDisposableCallback", "InvokeJavascriptNondisposableCallback": "onInvokeNondisposableCallback", "ProcessLuaReturn": "onProcessLuaReturn", }; var BANNED_FUNCTIONS = { "LuaTimer.Add": "LuaTimer is not allowed to call from javascript, use window.setInterval and window.setTimeout instead", "LuaTimer.Delete": "LuaTimer is not allowed to call from javascript, use window.setInterval and window.setTimeout instead", }; var LUAFUNC_ARG_OP_CODE = { "EventDispatcher.AddEventListener": FUNCARG_OP_CODE.ADD_NONDISPOSABLE_FUNC, "EventDispatcher.RemoveEventListener": FUNCARG_OP_CODE.REMOVE_NONDISPOSABLE_FUNC, }; var PandoraSDKAdapterCls = /** @class */ (function () { function PandoraSDKAdapterCls() { this.callbackID = 0; this.disposableCallbacks = {}; this.nonDisposableCallbacks = {}; this.luaResultSignals = {}; this.customMessageHandler = undefined; var inst = this; if (external.addEventListener) { external.addEventListener("message", function (msg) { try { var cmd = JSON.parse(msg.data); } catch (e) { return; } if (LUA_EVENT_HANDLER_MAPPER.hasOwnProperty(cmd.cmd)) { var funcName = LUA_EVENT_HANDLER_MAPPER[cmd.cmd]; if (typeof (inst[funcName]) == "function") { inst[funcName](cmd); } } else { if (typeof (inst.customMessageHandler) == "function") { inst.customMessageHandler(cmd); return; } else { // console.log("cmd processor " + cmd.cmd + " not defined"); return; } } }); } } PandoraSDKAdapterCls.prototype.getNewID = function () { var id = this.callbackID; this.callbackID += 1; return id.toString(); }; PandoraSDKAdapterCls.prototype.getNondisposableCallbackID = function (func) { for (var k in this.nonDisposableCallbacks) { var f = this.nonDisposableCallbacks[k]; if (func === f) { return k; } } return undefined; }; PandoraSDKAdapterCls.prototype.registerCustomMessageHandler = function (handler) { this.customMessageHandler = handler; }; PandoraSDKAdapterCls.prototype.registerDisposableCallback = function (callback) { var id = this.getNewID(); this.disposableCallbacks[id] = callback; return id; }; PandoraSDKAdapterCls.prototype.registerNondisposableCallback = function (callback) { var id = this.getNewID(); this.nonDisposableCallbacks[id] = callback; return id; }; PandoraSDKAdapterCls.prototype.removeNondisposableCallbackByID = function (id) { if (this.nonDisposableCallbacks.hasOwnProperty(id)) { delete this.nonDisposableCallbacks[id]; } }; // when callback is invoked, it will be remove from this.disposableCallbacks PandoraSDKAdapterCls.prototype.onInvokeDisposableCallback = function (cmd) { var id = cmd.callbackID; if (id == undefined) { return; } var callback = this.disposableCallbacks[id]; if (callback == undefined) { return; } delete this.disposableCallbacks[id]; var args = decodeArgs(cmd.args); callback.apply(void 0, args); }; PandoraSDKAdapterCls.prototype.onInvokeNondisposableCallback = function (cmd) { var id = cmd.callbackID; if (id == undefined) { return; } var callback = this.nonDisposableCallbacks[id]; if (callback == undefined) { return; } var args = decodeArgs(cmd.args); callback.apply(void 0, args); }; PandoraSDKAdapterCls.prototype.onProcessLuaReturn = function (cmd) { var isSuccess = cmd.callSuccess; var err = cmd.err; var id = cmd.callbackID; if (!this.luaResultSignals.hasOwnProperty(id)) { return undefined; } var results = decodeArgs(cmd.args); var signals = this.luaResultSignals[id]; delete this.luaResultSignals[id]; if (isSuccess) { if (results.length == 1) { signals.procDoneSignal(results[0]); return; } if (results.length <= 0) { signals.procDoneSignal(); return; } signals.procDoneSignal(results); } else { signals.procFailedSignal(err); } }; PandoraSDKAdapterCls.prototype.callLua = function (funcname) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } var bannedMessage = BANNED_FUNCTIONS[funcname]; if (bannedMessage) { console.log(bannedMessage); return undefined; } var cmdobj = {}; cmdobj.func = funcname; var opcode = LUAFUNC_ARG_OP_CODE[funcname]; if (opcode == undefined) { opcode = FUNCARG_OP_CODE.ADD_DISPOSABLE_FUNC; } cmdobj.args = encodeArgs.apply(void 0, __spreadArray([this, opcode], args, false)); var callbackID = this.getNewID(); cmdobj.callbackID = callbackID; var procDoneSignal; var procFailedSignal; var promise = new Promise(function (resolve, reject) { procDoneSignal = resolve; procFailedSignal = reject; }); this.luaResultSignals[callbackID] = { "procDoneSignal": procDoneSignal, "procFailedSignal": procFailedSignal }; if (external.sendMessage) { external.sendMessage(JSON.stringify(cmdobj)); } return promise; }; return PandoraSDKAdapterCls; }()); exports.UnityGameletAdapter = makeSingleton(PandoraSDKAdapterCls).getInstance(); //# sourceMappingURL=unityrpc_mgr.js.map