defmodule Chessh.Application do alias Chessh.{PlayerSession, Node} use Application def initialize_node() do # If we have more than one node running the ssh daemon, we'd want to ensure # this is restarting after every potential crash. Otherwise the player sessions # on the node would hang. # User session also need to be cleaned up after the node exits the pool for # the same reason. node_id = System.fetch_env!("NODE_ID") Node.boot(node_id) PlayerSession.delete_all_on_node(node_id) end def start(_, _) do children = [ Chessh.Repo, Chessh.SSH.Daemon, Chessh.DiscordNotifier, Plug.Cowboy.child_spec( scheme: :http, plug: Chessh.Web.Endpoint, options: [port: Application.get_env(:chessh, Web)[:port]] ), {Cluster.Supervisor, [Application.get_env(:libcluster, :topologies), [name: Chessh.ClusterSupervisor]]} ] opts = [strategy: :one_for_one, name: Chessh.Supervisor] with {:ok, pid} <- Supervisor.start_link(children, opts) do initialize_node() {:ok, pid} end end end