hamok
Version:
Lightweight Distributed Object Storage on RAFT consensus algorithm
58 lines (42 loc) • 1.35 kB
text/typescript
import { Hamok, setHamokLogLevel } from 'hamok';
import * as pino from 'pino';
const logger = pino.pino({
name: 'common-waiting-example',
level: 'debug',
});
type ExampleEventMap = {
'event-1': [number, string, boolean],
'event-2': [number, string],
}
export async function run() {
const server_1 = new Hamok();
const server_2 = new Hamok();
server_1.on('message', server_2.accept.bind(server_2));
server_2.on('message', server_1.accept.bind(server_1));
server_1.addRemotePeerId(server_2.localPeerId);
server_2.addRemotePeerId(server_1.localPeerId);
server_1.join();
// server_2.start();
const emitter_1 = server_1.createEmitter<ExampleEventMap>({
emitterId: 'my-distributed-emitter',
});
const emitter_2 = server_2.createEmitter<ExampleEventMap>({
emitterId: 'my-distributed-emitter',
});
logger.debug('Subscribing to event-1 on server_1, but server2 is not started');
emitter_1.notify('event-1', 1, 'hello', true);
logger.info('Starting server_2after 5s of waiting');
emitter_2.subscribe('event-1', (a, b, c) => {
logger.info('Server_2 received event-1 with %d, %s, %s', a, b, c);
});
await server_2.join();
await emitter_1.ready;
await emitter_2.ready;
server_1.close();
server_2.close();
}
if (require.main === module) {
logger.info('Running from module file');
setHamokLogLevel('info');
run();
}