UNPKG

@methodus/server

Version:
172 lines 6.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); require("reflect-metadata"); const servers_1 = require("./servers"); const log_1 = require("./log"); const colors = require("colors"); const class_container_1 = require("./class-container"); const plugins_1 = require("./plugins"); const figlet = require("figlet"); const server_container_1 = require("./server-container"); const client_container_1 = require("./client-container"); let Server = class Server { constructor(port, app, httpServer) { this._app = {}; this.port = 0; this._plugins = []; if (port) { this.port = +port || 0; } this.app = app; this.httpServer = httpServer; this.serverKey = this.makeid(); this.instanceId = servers_1.Servers.addServer(this); } makeid() { let text = ''; const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; for (let i = 0; i < 5; i++) { text += possible.charAt(Math.floor(Math.random() * possible.length)); } return text; } plugins(plugins) { this._plugins = plugins; return this; } configure(config) { this.config = config; return this; } async printlogo() { const options = { font: 'Bigfig', horizontalLayout: 'default', verticalLayout: 'default', }; console.log(figlet.textSync('methodus', options)); } useClient(_class) { if (_class.classType) { const methodusClass = _class.classType; let configName = methodusClass.name; if (!configName && methodusClass.constructor) { configName = methodusClass.constructor.name; } const metaObject = class_container_1.ClassContainer.get(configName); _class.transportType = new client_container_1.ClientContainer(_class.transportType); servers_1.Servers.clients[configName] = _class; if (metaObject) { metaObject.methodType = _class.transportType.name; class_container_1.ClassContainer.set(configName, metaObject); log_1.logger.info(colors.blue(`using class ${_class.classType.name} in ${_class.transportType.name} mode`)); } else { log_1.logger.error('could not load metadata for ' + configName); } } } async start() { this.port = 0; await this.printlogo(); if (this.config && this._plugins && this._plugins.length > 0) { const loader = new plugins_1.PluginLoader(); await loader.config(this.config, this._plugins); } const onStart = []; if (this.httpServer) { servers_1.Servers.set(this.instanceId, 'http', this.httpServer); } if (this.app) { servers_1.Servers.set(this.instanceId, 'express', this.app); } if (this.config && this.config.servers) { this.config.servers.forEach((server) => { if (server.options && server.options.port) { this.port = server.options.port; } if (server.onStart) { onStart.push(server.onStart); } const aServerInstance = servers_1.Servers.get(this.instanceId, server.type.name); if (!aServerInstance) { server.instanceId = this.instanceId; return new server_container_1.ServerContainer(server, this); } else { return aServerInstance; } }); onStart.forEach((startEvent) => { const instance = servers_1.Servers.get(this.instanceId, 'express'); if (instance && instance._app) { startEvent(instance._app); } }); const httpServerIntance = servers_1.Servers.get(this.instanceId, 'http'); if (httpServerIntance) { httpServerIntance.listen(this.port); } } if (this.config) { const classes = this.config.classes.entries(); for (let i = 0; i < this.config.classes.size; i++) { const element = classes.next(); this.useClass(element.value[1]); } const clients = this.config.clients.entries(); for (let i = 0; i < this.config.clients.size; i++) { const element = clients.next(); this.useClient(element.value[1]); } } return this; } useClass(_class) { const serverInstance = this; Object.keys(servers_1.Servers.instances).forEach((serverId) => { const server = servers_1.Servers.instances[serverId]; if (_class.classType) { const methodusClass = _class.classType; let configName = methodusClass.name; if (!configName && methodusClass.constructor) { configName = methodusClass.constructor.name; } const metaObject = class_container_1.ClassContainer.get(configName); const serverTypeName = _class.serverType.name || _class.serverType; if (server[serverTypeName]) { servers_1.Servers.classes[configName] = _class; if (metaObject) { metaObject.methodType = _class.methodType; metaObject.serverType = serverTypeName; metaObject.instanceId = serverInstance.instanceId; class_container_1.ClassContainer.set(configName, metaObject); log_1.logger.info(colors.blue(`using class ${_class.classType.name} in ${_class.methodType} mode`)); const activeServers = servers_1.Servers.get(serverInstance.instanceId, serverTypeName); if (activeServers) { activeServers.useClass(_class.classType, metaObject.methodType); } } else { log_1.logger.error('could not load metadata for ' + configName); } } } }); } kill() { servers_1.Servers.serversArray.forEach((server) => { if (server && server.close) { server.close(); } }); servers_1.Servers.reset(); } }; Server = tslib_1.__decorate([ log_1.LogClass(log_1.logger), tslib_1.__metadata("design:paramtypes", [Object, Object, Object]) ], Server); exports.Server = Server; //# sourceMappingURL=server.js.map