diff --git a/server/lib/server/application.ex b/server/lib/server/application.ex index 89b5bd5..6e1b1f5 100644 --- a/server/lib/server/application.ex +++ b/server/lib/server/application.ex @@ -24,7 +24,9 @@ defmodule Server.Application do # See https://hexdocs.pm/elixir/Supervisor.html # for other strategies and supported options opts = [strategy: :one_for_one, name: Server.Supervisor] - Supervisor.start_link(children, opts) + result = Supervisor.start_link(children, opts) + with {:ok, _} <- result, do: Server.Hosts.mark_all_offline() + result end # Tell Phoenix to update the endpoint configuration diff --git a/server/lib/server_web/channels/agent_socket.ex b/server/lib/server_web/channels/agent_socket.ex new file mode 100644 index 0000000..c068a87 --- /dev/null +++ b/server/lib/server_web/channels/agent_socket.ex @@ -0,0 +1,12 @@ +defmodule ServerWeb.AgentSocket do + @moduledoc "Entry socket for agents. Actual authentication happens in HostChannel.join/3." + use Phoenix.Socket + + channel "host:*", ServerWeb.HostChannel + + @impl true + def connect(_params, socket, _connect_info), do: {:ok, socket} + + @impl true + def id(_socket), do: nil +end diff --git a/server/lib/server_web/endpoint.ex b/server/lib/server_web/endpoint.ex index c4aa06f..d42b3b9 100644 --- a/server/lib/server_web/endpoint.ex +++ b/server/lib/server_web/endpoint.ex @@ -15,6 +15,10 @@ defmodule ServerWeb.Endpoint do websocket: [connect_info: [session: @session_options]], longpoll: [connect_info: [session: @session_options]] + socket "/socket", ServerWeb.AgentSocket, + websocket: [timeout: 45_000], + longpoll: false + # Serve at "/" the static files from "priv/static" directory. # # You should set gzip to true if you are running phx.digest