debug-server-next
Version:
Dev server for hippy-core.
58 lines (57 loc) • 2.51 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TunnelAppClient = void 0;
const tslib_1 = require("tslib");
const log_1 = require("@/utils/log");
const app_client_1 = require("./app-client");
const log = new log_1.Logger('app-client:tunnel');
class TunnelAppClient extends app_client_1.AppClient {
constructor(id, option) {
var _a;
super(id, option);
this.requestPromiseMap = new Map();
if (typeof ((_a = global.addon) === null || _a === void 0 ? void 0 : _a.sendMsg) === 'undefined') {
throw new Error('tunnel does not imported.');
}
this.type = "TunnelAppClient" /* Tunnel */;
this.registerMessageListener();
}
registerMessageListener() {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const { tunnelEmitter, TUNNEL_EVENT } = yield Promise.resolve().then(() => tslib_1.__importStar(require('../child-process/index')));
// TODO tunnel 暂不支持多调试实例,这里暂时移除上一个实例的事件监听
tunnelEmitter.removeAllListeners(TUNNEL_EVENT);
tunnelEmitter.on(TUNNEL_EVENT, (data) => tslib_1.__awaiter(this, void 0, void 0, function* () {
var _a;
let msgObject;
try {
msgObject = JSON.parse(data);
}
catch (e) {
return log.info('parse tunnel response json failed. error: %s, \n msg: %j', (_a = e) === null || _a === void 0 ? void 0 : _a.stack, data);
}
if ('id' in msgObject) {
const requestPromise = this.requestPromiseMap.get(msgObject.id);
if (requestPromise)
requestPromise.resolve(msgObject);
}
const res = yield this.downwardMessageHandler(msgObject);
if (!('id' in msgObject))
return;
const requestPromise = this.requestPromiseMap.get(msgObject.id);
if (requestPromise) {
requestPromise.resolve(res);
}
}));
});
}
sendHandler(msg) {
return new Promise((resolve, reject) => {
if (msg.id) {
this.requestPromiseMap.set(msg.id, { resolve, reject });
}
global.addon.sendMsg(JSON.stringify(msg));
});
}
}
exports.TunnelAppClient = TunnelAppClient;