/** * @author Martin Karkowski * @email m.karkowski@zema.de * @create date 2020-11-06 08:52:48 * @modify date 2020-11-11 14:49:28 * @desc [description] */ import { getSingleton } from "../helpers/singletonMethod"; import { NopeGenericModule } from "../module/GenericModule"; import { NopeObservable } from "../observables/nopeObservable"; import { INopeRpcDispatcherOptions } from "../types/nope/nopeCommunication.interface"; import { INopeDispatcher } from "../types/nope/nopeDispatcher.interface"; import { nopeDispatcher } from "./nopeDispatcher"; /** * Function to extract a Singleton Dispatcher * @param options The provided options for the Dispatcher */ export function getDispatcher(options: INopeRpcDispatcherOptions) { const container = getSingleton('nopeBackendDispatcher.instance', () => { const dispatcher = new nopeDispatcher(options, () => new NopeObservable()); // Register a default instance generator: // Defaultly generate a NopeGenericModule dispatcher.registerInternalInstanceGenerator('*', async (dispather, description) => { const mod = new NopeGenericModule(dispather, () => new NopeObservable()); await mod.fromDescription(description, 'overwrite'); // await mod.init(); return mod; }); // Return the Dispathcer return dispatcher as INopeDispatcher; }); return container.instance }