import { syscall } from "../syscall.ts"; /** * Exposes the SilverBullet event bus. * @module */ /** * Triggers an event on the SilverBullet event bus. * This can be used to implement an RPC-style system too, because event handlers can return values, * which are then accumulated in an array and returned to the caller. * @param eventName the name of the event to trigger * @param data payload to send with the event * @param timeout optional timeout in milliseconds to wait for a response * @returns an array of responses from the event handlers (if any) */ export function dispatchEvent( eventName: string, data: any, timeout?: number, ): Promise { return new Promise((resolve, reject) => { let timeouter: any = -1; if (timeout) { timeouter = setTimeout(() => { console.log("Timeout!"); reject("timeout"); }, timeout); } syscall("event.dispatch", eventName, data) .then((r: any) => { if (timeouter !== -1) { clearTimeout(timeouter); } resolve(r); }) .catch(reject); }); } /** * List all events currently registered (listened to) on the SilverBullet event bus. * @returns an array of event names */ export function listEvents(): Promise { return syscall("event.list"); }