nope/modules/mirror/cli/run.mirror-server.ts
Martin Karkowski bdff1158b3 Adding Server
2021-03-22 20:24:36 +01:00

95 lines
2.6 KiB
TypeScript

/**
* @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();
}