Current section
Files
Jump to
Current section
Files
lib/router/user.ex
defmodule Agala.Router.User do
use Supervisor
require Logger
@default_handler Agala.Handler.Echo
def start_link do
Supervisor.start_link(__MODULE__, [], name: Agala.Router.User)
end
def init(_) do
children = [
worker(Agala.get_handler(), [], restart: :transient)
]
supervise(children, strategy: :simple_one_for_one)
end
def route(message) do
room_name = message |> start_chat
Logger.debug("Routing message to room #{inspect room_name}")
Agala.get_handler().handle_message(room_name, message)
end
def start_chat(message) do
room_name = users_atom(message)
Supervisor.start_child(Agala.Router.User, [room_name])
room_name
end
defp users_atom(%{"message" => %{"chat" => %{"id" => user_id}}}) do
user_id #|> Integer.to_string |> String.to_atom
end
end