UNPKG

sdg

Version:

pomelo ts

84 lines 6.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const path_1 = tslib_1.__importDefault(require("path")); const chokidar_1 = tslib_1.__importDefault(require("chokidar")); const sdg_loader_1 = require("sdg-loader"); const base_1 = tslib_1.__importDefault(require("../../base")); const pathUtil_1 = require("../../util/pathUtil"); class HandlerService extends base_1.default { constructor(app, opts) { super(app, opts); this.handlerMap = {}; if (opts.reloadHandlers) this.watchHandlers(); } async handle(routeRecord, msg, session) { const handler = this.getHandler(routeRecord); if (!handler) { this.app.logger.error(`[handleManager]: fail to find handler for ${msg.__route__}`); throw 'fail to find handler for ' + msg.__route__; } const method = routeRecord.method; return handler[method](msg, session); // if (!Array.isArray(msg)) { // } else { // msg.push(session); // return handler[method].apply(handler, msg); // } } getHandler(routeRecord) { const serverType = routeRecord.serverType; if (!this.handlerMap[serverType]) { this.loadHandlers(); } const handlers = this.handlerMap[serverType] || {}; const handler = handlers[routeRecord.handler]; if (!handler) { this.app.logger.warn(`could not find handler for routeRecord: ${routeRecord}`, routeRecord); return null; } if (typeof handler[routeRecord.method] !== 'function') { this.app.logger.warn(`could not find the method ${routeRecord.method} in handler: ${routeRecord.handler}`); return null; } return handler; } /** * 手动更新文件缓存 */ manualReload() { const label = `[HandlerService] reload`; this.logger.time(label); this.loadHandlers(true); this.logger.timeEnd(label); } watchHandlers() { const app = this.app; const serverType = app.getServerType(); let p = pathUtil_1.getHandlerPath(app.getBase(), serverType); if (!p) return; chokidar_1.default.watch(p).on('change', (file) => { const label = `[HandlerService] on change: ${file}`; this.app.logger.time(label); if (!this.handlerMap[serverType]) this.handlerMap[serverType] = {}; this.handlerMap[serverType][path_1.default.parse(file).name] = sdg_loader_1.loadFile(file, app, true); this.app.logger.timeEnd(label); }); } /** * handler目录下加载到内存 * @param reload */ loadHandlers(reload = false) { const serverType = this.app.getServerType(); const p = pathUtil_1.getHandlerPath(this.app.getBase(), serverType); if (p) { this.handlerMap[serverType] = sdg_loader_1.load(p, this.app, reload); } } } exports.default = HandlerService; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlclNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbW9uL3NlcnZpY2UvaGFuZGxlclNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsd0RBQXdCO0FBQ3hCLGdFQUFnQztBQUNoQywyQ0FBNEM7QUFFNUMsOERBQThCO0FBRTlCLGtEQUFxRDtBQVdyRCxNQUFxQixjQUFlLFNBQVEsY0FBSTtJQUc5QyxZQUFZLEdBQWdCLEVBQUUsSUFBNEI7UUFDeEQsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLElBQUksQ0FBQyxjQUFjO1lBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFTSxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQXlCLEVBQUUsR0FBZ0IsRUFBRSxPQUFrQztRQUNqRyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDWixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkNBQTZDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQ3BGLE1BQU0sMkJBQTJCLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQztTQUNuRDtRQUVELE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDbEMsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLDZCQUE2QjtRQUM3QixXQUFXO1FBQ1QscUJBQXFCO1FBQ3JCLDhDQUE4QztRQUNoRCxJQUFJO0lBQ04sQ0FBQztJQUVNLFVBQVUsQ0FBQyxXQUF5QjtRQUN6QyxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsVUFBVSxD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