not reseting state on browser disconnect or reconnect

This commit is contained in:
2026-03-03 14:53:59 -07:00
parent 60714f9afd
commit 7eb95af0b8
6 changed files with 119 additions and 96 deletions

View File

@@ -8,13 +8,13 @@ defmodule BackendWeb.ClusterStatusChannel do
@impl true
def join("cluster_status", _params, socket) do
Logger.info("Client joined clusterstatus channel")
:net_kernel.monitor_nodes(true)
{:ok, %{status: "connected"}, socket}
end
@impl true
def handle_in("get_nodes", _payload, socket) do
Logger.info("Client requested node list #{inspect(Node.list())}")
push(socket, "node_list", %{other_nodes: Node.list(), connected_node: node()})
send_node_list(socket)
{:noreply, socket}
end
@@ -29,4 +29,28 @@ defmodule BackendWeb.ClusterStatusChannel do
def handle_in(_event, _payload, socket) do
{:noreply, socket}
end
@impl true
def handle_info({:nodeup, node_name}, socket) do
Logger.info("Node up: #{node_name}, broadcasting updated node list")
send_node_list(socket)
{:noreply, socket}
end
@impl true
def handle_info({:nodedown, node_name}, socket) do
Logger.info("Node down: #{node_name}, broadcasting updated node list")
send_node_list(socket)
{:noreply, socket}
end
defp send_node_list(socket) do
game_pid = Backend.GameRunner.get_pid()
push(socket, "node_list", %{
other_nodes: Node.list(),
connected_node: node(),
game_node: node(game_pid)
})
end
end