132 lines
3.4 KiB
TypeScript
132 lines
3.4 KiB
TypeScript
/**
|
|
* @author Martin Karkowski
|
|
* @email m.karkowski@zema.de
|
|
* @create date 2021-08-11 17:32:24
|
|
* @modify date 2021-08-17 16:24:10
|
|
* @desc [description]
|
|
*/
|
|
|
|
import { promisify } from "util";
|
|
import { runNopeBackend } from "../lib/cli/runNopeBackend";
|
|
import { EventMirror } from "../lib/communication/mirrors/eventMirror";
|
|
import { deepClone } from "../lib/helpers/objectMethods";
|
|
import { getNopeLogger } from "../lib/logger/getLogger";
|
|
import { DESCRIPTION } from "../modules/helloworld/src/helloworld.package";
|
|
|
|
const sleep = promisify(setTimeout);
|
|
const logger = getNopeLogger("test-script");
|
|
|
|
|
|
async function main() {
|
|
// Define the loaders
|
|
const loader_01 = await runNopeBackend({
|
|
skipLoadingConfig: true,
|
|
log: "info",
|
|
channel: "event",
|
|
singleton: false
|
|
});
|
|
const loader_02 = await runNopeBackend({
|
|
skipLoadingConfig: true,
|
|
log: "info",
|
|
channel: "event",
|
|
singleton: false
|
|
});
|
|
|
|
const mirror = new EventMirror();
|
|
|
|
await loader_01.dispatcher.communicator.addMirror(mirror);
|
|
await loader_02.dispatcher.communicator.addMirror(mirror);
|
|
|
|
|
|
const package_01 = deepClone(DESCRIPTION);
|
|
package_01.defaultInstances = [];
|
|
|
|
await loader_01.addPackage(package_01);
|
|
|
|
|
|
|
|
const package_02 = deepClone(DESCRIPTION);
|
|
package_02.defaultInstances = [];
|
|
|
|
await loader_02.addPackage(package_02);
|
|
|
|
await sleep(300);
|
|
|
|
// 1. We now want to specificy the dispatcher which should host
|
|
// the instance. In this case, we want to host the instance on
|
|
// the dispatcher of the loader_01. We define this be adding
|
|
// the *selector* : "dispatcher"
|
|
const instance_01_a = await loader_01.dispatcher.generateInstance({
|
|
identifier: "instance01",
|
|
type: package_01.providedClasses[0].description.name,
|
|
params: [],
|
|
}, {
|
|
selector: "dispatcher"
|
|
});
|
|
|
|
logger.info(instance_01_a.identifier, "created");
|
|
|
|
// Now we just want to create an additional accessor for the instance
|
|
// again. We dont care, on which system we are
|
|
const instance_01_b = await loader_02.dispatcher.generateInstance({
|
|
identifier: "instance01",
|
|
type: package_01.providedClasses[0].description.name,
|
|
params: [],
|
|
}, {
|
|
selector: "first"
|
|
});
|
|
|
|
logger.info(instance_01_b.identifier, "created");
|
|
|
|
const error = new Error("failed");
|
|
|
|
try {
|
|
await loader_02.dispatcher.generateInstance({
|
|
identifier: "instance01",
|
|
type: package_01.providedClasses[0].description.name,
|
|
params: [],
|
|
}, {
|
|
selector: "dispatcher"
|
|
});
|
|
|
|
throw error;
|
|
} catch (e) {
|
|
if (error === e) {
|
|
logger.error("Failed to raise an error");
|
|
} else {
|
|
logger.info("Successfully prevent to create the instance, because the Dispatcher is a mismatch");
|
|
}
|
|
}
|
|
|
|
const instance_02_a = await loader_01.dispatcher.generateInstance({
|
|
identifier: "instance02",
|
|
type: package_01.providedClasses[0].description.name,
|
|
params: [],
|
|
}, {
|
|
selector: "free-ram"
|
|
});
|
|
|
|
logger.info(instance_02_a.identifier, "created by 'free-ram'");
|
|
|
|
|
|
// This shouldnt be created.
|
|
const instance_02_b = await loader_02.dispatcher.generateInstance({
|
|
identifier: "instance02",
|
|
type: package_01.providedClasses[0].description.name,
|
|
params: [],
|
|
}, {
|
|
selector: "cpu-usage"
|
|
});
|
|
|
|
|
|
logger.info(instance_02_b.identifier, "created by 'cpu-usage'");
|
|
logger.info("done");
|
|
|
|
await loader_01.dispatcher.dispose();
|
|
await loader_02.dispatcher.dispose();
|
|
|
|
process.exit();
|
|
|
|
}
|
|
|
|
main().catch(console.error); |