godprotocol
Version:
A distributed computing environment for Web 4.0 — integrating AI, decentralisation, and virtual computation.
48 lines (41 loc) • 1.16 kB
JavaScript
import { query_ } from "../callables/functions/query.js";
class Events {
constructor() {
this.events_listeners = new Object();
}
add_listener = async (name, handler, filter) => {
let listeners = this.events_listeners[name];
if (!listeners) {
listeners = new Array();
this.events_listeners[name] = listeners;
}
if (
!listeners.find(
(li) =>
li.handler === handler &&
JSON.stringify(li.filter) === JSON.stringify(filter)
)
)
listeners.push({ handler, filter });
};
emit = async (name, payload, cb) => {
let listeners = this.events_listeners[name];
if (!listeners) return;
let total = 0;
for (let l = 0; l < listeners.length; l++) {
let { filter, handler } = listeners[l];
if (await query_(payload, filter, await this.ds.get_folder())) {
total++;
handler(payload)
.then((res) => {
total--;
cb && cb(res, { done: !total, event: { name, handler, filter } });
})
.catch((e) => {
console.log(e.message);
});
}
}
};
}
export default Events;