import 'reflect-metadata'; import { promisify } from 'util'; import { AmqpLayer } from "../lib/communication/amqpLayer"; import { nopeDispatcher } from "../lib/dispatcher/nopeDispatcher"; import { getNopeLogger } from "../lib/logger/getLogger"; import { NopeObservable } from "../lib/observables/nopeObservable"; import { generateBenchmarkFunction } from "../modules/funcs/generateBenchmarkFunction"; const client = new AmqpLayer('localhost'); const sleep = promisify(setTimeout) const logger = getNopeLogger('dispatcher','info') function genFunc(name, delay) { const logger = getNopeLogger('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();