import 'reflect-metadata'; import { AmqpLayer, } from "../lib/communication/amqpLayer"; import { generateBenchmarkFunction } from "../modules/funcs/generateBenchmarkFunction"; import { nopeDispatcher } from "../lib/dispatcher/nopeDispatcher"; import { promisify } from 'util' import { getLogger } from "../lib/logger/getLogger"; import { nopeObservable } from "../lib/observables/nopeObservable"; const client = new AmqpLayer('localhost'); const sleep = promisify(setTimeout) const logger = getLogger('info','DISPATCHER') function genFunc(name, delay) { const logger = getLogger('debug',name) return (idx: number) => { return new Promise((resolve, reject) => { try { logger.info('started ' + idx.toString()); setTimeout(() => { logger.info('finished ' + idx.toString()); resolve(); }, delay); } catch(e){ reject(e) } }) } } const main = async () => { await sleep(1000); const dispatcher = new nopeDispatcher({ communicator: client, logger }, () => new nopeObservable()); const benchmarkFunction = generateBenchmarkFunction(1000, 'Function'); const benchmarkDirect = generateBenchmarkFunction(1000, 'Direct'); const benchmarkObservable = generateBenchmarkFunction(1000, 'Observable'); // Register Functions dispatcher.registerFunction(genFunc('dispatcher-1-slow', 2000), { id: 'func' }); dispatcher.registerFunction(async () => benchmarkFunction(), { id: 'benchmark' }); await client.on('subscribe','benchmark', benchmarkDirect); await sleep(500); const obs01 = new nopeObservable(); obs01.subscribe(benchmarkObservable); dispatcher.registerObservable(obs01, { mode: 'subscribe', topic: 'test.var' }); dispatcher.registerObservable(obs01, { mode: 'subscribe', topic: 'test.var' }); } main();