Routes events to agents based on event type.
The Router maintains a mapping from event types (modules) to lists of agents that should receive those events. When an event is dispatched, the router determines which agents should process it.
Usage
router = Router.new()
router = Router.add_route(router, QuestionEvent, fact_checker_agent)
router = Router.add_route(router, QuestionEvent, answer_generator_agent)
agents = Router.get_agents(router, %QuestionEvent{...})
#=> [fact_checker_agent, answer_generator_agent]Examples
# Create a router
router = Router.new()
# Add routes for different event types
router = router
|> Router.add_route(QuestionEvent, fact_checker)
|> Router.add_route(QuestionEvent, answer_generator)
|> Router.add_route(FactCheckEvent, aggregator)
|> Router.add_route(AnswerEvent, aggregator)
# Get agents for an event
agents = Router.get_agents(router, question_event)
Summary
Functions
Adds a route mapping an event type to an agent.
Gets all agents registered to handle a specific event.
Creates a new empty router.
Types
Functions
Adds a route mapping an event type to an agent.
Multiple agents can be registered for the same event type. When an event of that type is dispatched, all registered agents will receive it.
Parameters
router- The router to updateevent_type- The event module to routeagent- The agent (pid or module) to receive events of this type
Examples
iex> router = Router.new()
iex> router = Router.add_route(router, QuestionEvent, my_agent)
iex> Router.get_agents(router, %QuestionEvent{})
[my_agent]
Gets all agents registered to handle a specific event.
Parameters
router- The router to queryevent- The event struct to find handlers for
Returns
A list of agents (pids or modules) that handle this event type. Returns an empty list if no agents are registered.
Examples
iex> router = Router.new()
iex> router = Router.add_route(router, QuestionEvent, agent1)
iex> router = Router.add_route(router, QuestionEvent, agent2)
iex> Router.get_agents(router, %QuestionEvent{})
[agent1, agent2]
Creates a new empty router.
Examples
iex> Router.new()
%Router{routes: %{}}