Current section

Files

Jump to
eventstore lib event_store notifications stream_broadcaster.ex
Raw

lib/event_store/notifications/stream_broadcaster.ex

defmodule EventStore.Notifications.StreamBroadcaster do
@moduledoc false
# Broadcasts events to single stream subscriptions.
use GenStage
alias EventStore.Registration
alias EventStore.Notifications.Reader
def start_link(args) do
GenStage.start_link(__MODULE__, args)
end
def init(_args) do
{:consumer, :ok, subscribe_to: [Reader]}
end
def handle_events(events, _from, serializer) do
for {stream_uuid, batch} <- events do
:ok = broadcast(stream_uuid, batch)
end
{:noreply, [], serializer}
end
defp broadcast(stream_uuid, events) do
Registration.broadcast(stream_uuid, {:events, events})
end
end