Current section

Files

Jump to
mongodb_driver lib mongo event_handler.ex
Raw

lib/mongo/event_handler.ex

defmodule Mongo.EventHandler do
@moduledoc false
require Logger
@all [:commands, :topology]
def start(opts \\ [topics: [:commands]]) do
spawn(__MODULE__, :register, [opts])
end
def register(opts) do
with true <- (opts[:topics] || @all)
|> Enum.map(fn topic -> Registry.register(:events_registry, topic, []) end)
|> Enum.all?(fn
{:ok, _} -> true
_other -> false
end) do
listen(opts)
:ok
end
end
def listen(opts) do
receive do
{:broadcast, :commands, %{command_name: cmd} = message} when cmd != :isMaster ->
Logger.info("Received command: " <> (inspect message))
listen(opts)
{:broadcast, :commands, is_master} ->
case opts[:is_master] do
true -> Logger.info("Received is master:" <> (inspect is_master))
_ -> []
end
listen(opts)
{:broadcast, topic, message} ->
Logger.info("Received #{topic}: " <> (inspect message))
listen(opts)
other ->
Logger.info("Stopping EventHandler received unknown message:" <> inspect other)
end
end
end