-
Notifications
You must be signed in to change notification settings - Fork 3
Closed
Description
To be able to make every emitted event somewhere in a component available in all worker threads (if implemented, see #6), a custom/intercepted .emit(...)
method is needed.
Either use a Proxy or a custom EventEmitter
class.
Proxy approach (quick ChatGPT asked):
const EventEmitter = require('events');
// Erstellen einer neuen EventEmitter-Instanz
const myEmitter = new EventEmitter();
// Proxy-Handler erstellen
const handler = {
apply: function(target, thisArg, argumentsList) {
const [eventName, ...args] = argumentsList;
console.log(`Event emitted: ${eventName}`, args);
// Aufruf der originalen emit-Methode
return Reflect.apply(target, thisArg, argumentsList);
}
};
// Proxy für die emit-Methode erstellen
myEmitter.emit = new Proxy(myEmitter.emit, handler);
// Beispielereignisse
myEmitter.emit('event1', 'data1');
myEmitter.emit('event2', { key: 'value' });
myEmitter.emit('event3', 42);
EventEmitter class approach (quick written here)
class Events extends EventEmitter {
constructor(...args) {
super(...args);
this._registeredEvents = new Set();
}
emit(event, ...args) {
if (!this._registeredEvents.has(event)) {
this._registeredEvents.add(event);
process.nextTick(() => {
super.emit("_eventRegistered", event, ...args);
});
}
return super.emit(event, ...args);
}
}