From bdff1158b3c1074a56671ad847ac9b142120a67a Mon Sep 17 00:00:00 2001 From: Martin Karkowski Date: Mon, 22 Mar 2021 20:24:36 +0100 Subject: [PATCH] Adding Server --- modules/mirror/cli/run.mirror-server.ts | 94 +++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 modules/mirror/cli/run.mirror-server.ts diff --git a/modules/mirror/cli/run.mirror-server.ts b/modules/mirror/cli/run.mirror-server.ts new file mode 100644 index 0000000..cc51a61 --- /dev/null +++ b/modules/mirror/cli/run.mirror-server.ts @@ -0,0 +1,94 @@ +/** + * @author Martin Karkowski + * @email m.karkowski@zema.de + * @create date 2021-03-22 18:23:56 + * @modify date 2021-03-22 18:23:56 + * @desc [description] + */ + +import { ArgumentParser } from "argparse"; +import "reflect-metadata"; +import { promisify } from "util"; +import { Bridge } from "../../../lib/communication/bridge"; +import { getPackageLoader } from "../../../lib/loader/getPackageLoader"; +import { getNopeLogger } from "../../../lib/logger/getLogger"; +import { ICommunicationBridge } from "../../../lib/types/nope/nopeCommunication.interface"; +import { INopePackageLoader } from "../../../lib/types/nope/nopePackageLoader.interface"; +import { DESCRIPTION } from "../src/mirror-link.package"; +import { MirrorServerModule } from "../src/mirror-server.module"; + +const sleep = promisify(setTimeout); + +export async function runMirrorServer( + additionalArguments: { + help: string; + type: "string" | "number"; + name: string | string; + defaultValue?: any; + }[] = [] +) { + const parser = new ArgumentParser({ + version: "1.0.0", + addHelp: true, + description: "Command Line interface, will run a Mirror-Server" + }); + + for (const arg of additionalArguments) { + parser.addArgument(arg.name, { + help: arg.help, + defaultValue: arg.defaultValue, + type: arg.type + }); + } + + parser.addArgument(["-p", "--port"], { + help: "The Port to use in the Server.", + defaultValue: "7001", + type: "int", + dest: "port" + }); + + const args = parser.parseArgs(); + + // Define a Logger + const logger = getNopeLogger("Mirror-Server-CLI"); + + try { + let loader: INopePackageLoader; + try { + const communicator: ICommunicationBridge = new Bridge() as any; + + loader = getPackageLoader({ + communicator, + logger: getNopeLogger("dispatcher", "info") + }); + } catch (e) { + getNopeLogger("cli", "info").error("failed to load the Packages", e); + } + + await loader.dispatcher.ready.waitFor((value) => value); + + const thePackageToLoad = DESCRIPTION; + thePackageToLoad.defaultInstances = [ + { + options: { + identifier: "mirror-server", + params: [args.port], + type: MirrorServerModule.prototype.constructor.name.toString() + }, + selector: MirrorServerModule.prototype.constructor.name.toString() + } + ]; + + await loader.addPackage(thePackageToLoad); + await loader.generateInstances(); + } catch (e) { + logger.error("Something went wrong"); + logger.error(e); + } +} + +// If requested As Main => Perform the Operation. +if (require.main === module) { + runMirrorServer(); +}