Current section
Files
Jump to
Current section
Files
lib/notifier.ex
defmodule Kitto.Notifier do
def start_link, do: Agent.start_link(fn -> [] end, name: :notifier)
def broadcast!(topic, data) do
connections |> Enum.each(fn (conn) ->
if !Process.alive?(conn), do: delete(conn)
send conn, {:broadcast, {topic, data |> Map.merge(updated_at)}}
end)
end
def register(conn) do
notifier |> Agent.update(fn (connections) -> connections ++ [conn] end)
conn
end
def delete(conn), do: notifier |> Agent.update(&(&1 |> List.delete(conn)))
def connections, do: notifier |> Agent.get(&(&1))
defp notifier, do: Process.whereis(:notifier)
defp updated_at, do: %{updated_at: :os.system_time(:seconds)}
end