event broker based on javascript generator etiher synchronous and asynchronous
Event Broker
In process event brokers based on javascript generator
The available brokers are:
AsyncEventBroker
An asynchronous event broker that support a single event handler.
EventBroker
Synchronous event broker that support a single event handlers
AsyncEventBrokerML
An asynchronous event broker that supports multiple event handlers.
AsyncEventBrokerTopicsML
An asynchronous event broker that supports multiple topics with multiple event handlers.
AsyncEventBroker Usage
Define Events' type
const replySymbol = Symbol("reply"); type ListenEvent = { data: string, [replySymbol]?: boolean } type ReplyEvent = { result: string }
Create an instance
const broker = new AsyncEventBroker<ListenEvent, ReplyEvent>()
Start broker
const listenerId = await broker.on( async ( ev:ListenEvent ) => { // handle event const result = await doSomething( ev.data ) if( !!ev[replySymbol] ) { // if reply is required return { result } ; // this will be replyed to sender } })
Note:
listenerId must be stored because it is need for eventually stop listening event. This is because: Only who start broker will be able to stop it
Send event to broker
await broker.emit( { data: "message1" } )
Send event to broker and wait reply
const reply = await broker.emitWithReply( { data: "message_with_reply", [replySymbol]: true } ) // reply = { result: "....." }
Stop broker
try { await broker.off( startId ) } catch( e ) { // startId is not valid !!! }
Other Examples
Other usage examples could be found in test folder
Add Package
deno add jsr:@soulsoftware/event-broker
Import symbol
import * as event_broker from "@soulsoftware/event-broker";
Import directly with a jsr specifier
import * as event_broker from "jsr:@soulsoftware/event-broker";
Add Package
pnpm i jsr:@soulsoftware/event-broker
pnpm dlx jsr add @soulsoftware/event-broker
Import symbol
import * as event_broker from "@soulsoftware/event-broker";
Add Package
yarn add jsr:@soulsoftware/event-broker
yarn dlx jsr add @soulsoftware/event-broker
Import symbol
import * as event_broker from "@soulsoftware/event-broker";
Add Package
vlt install jsr:@soulsoftware/event-broker
Import symbol
import * as event_broker from "@soulsoftware/event-broker";
Add Package
npx jsr add @soulsoftware/event-broker
Import symbol
import * as event_broker from "@soulsoftware/event-broker";
Add Package
bunx jsr add @soulsoftware/event-broker
Import symbol
import * as event_broker from "@soulsoftware/event-broker";