evoq_event_type_registry (evoq v1.14.1)

View Source

Event type registry for evoq.

Maintains a mapping of event types to interested handlers. Uses pg (process groups) for efficient pub/sub routing.

This is the key to per-event-type subscriptions: - Handlers register interest in specific event types - When events are published, only interested handlers receive them - Scales to millions of events without per-stream overhead

Summary

Functions

Get all registered event types.

Get all handlers registered for an event type. Returns both pids (from pg) and modules (from internal state).

Register a handler pid for an event type. Notifies any registered store subscription listeners when a previously unseen event type gets its first handler.

Register a handler module for an event type (legacy API).

Register a store subscription listener.

Start the event type registry.

Unregister a handler pid from an event type.

Unregister a handler module from an event type (legacy API).

Unregister a store subscription listener.

Functions

get_all_event_types()

-spec get_all_event_types() -> [binary()].

Get all registered event types.

get_handlers(EventType)

-spec get_handlers(binary()) -> [pid() | atom()].

Get all handlers registered for an event type. Returns both pids (from pg) and modules (from internal state).

register(EventType, HandlerPid)

-spec register(binary(), pid()) -> ok.

Register a handler pid for an event type. Notifies any registered store subscription listeners when a previously unseen event type gets its first handler.

register_handler(EventType, HandlerModule)

-spec register_handler(binary(), atom()) -> ok.

Register a handler module for an event type (legacy API).

register_listener(ListenerPid)

-spec register_listener(pid()) -> {ok, [binary()]}.

Register a store subscription listener.

Atomically returns the current list of event types AND subscribes the listener for future type registration notifications. This is race-free: no register/2 call can execute between returning the current types and subscribing for notifications, because both happen in the same gen_server call.

The listener receives {new_event_type, EventType :: binary()} messages when a previously unseen event type gets its first handler.

start_link()

-spec start_link() -> {ok, pid()} | {error, term()}.

Start the event type registry.

unregister(EventType, HandlerPid)

-spec unregister(binary(), pid()) -> ok.

Unregister a handler pid from an event type.

unregister_handler(EventType, HandlerModule)

-spec unregister_handler(binary(), atom()) -> ok.

Unregister a handler module from an event type (legacy API).

unregister_listener(ListenerPid)

-spec unregister_listener(pid()) -> ok.

Unregister a store subscription listener.