Skip to content

Add a custom "Events" class for components? #487

@mStirner

Description

@mStirner

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);

    }

}

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions