gamelet-pixui-frame
Version:
pixui开发者框架
290 lines • 9.87 kB
JavaScript
;
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.UEGameletAdapter = 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.UEGameletAdapter = makeSingleton(PandoraSDKAdapterCls).getInstance();
//# sourceMappingURL=uerpc_mgr.js.map