[#20] removing client when the WS connection finishes
This commit is contained in:
parent
7db13e30ea
commit
cb3521678d
|
@ -52,7 +52,7 @@ defmodule POABackend.Receiver do
|
||||||
config :poa_backend,
|
config :poa_backend,
|
||||||
:subscriptions,
|
:subscriptions,
|
||||||
[
|
[
|
||||||
# {:my_receiver, [:ethereum_metrics]}
|
{:my_receiver, [:ethereum_metrics]}
|
||||||
]
|
]
|
||||||
|
|
||||||
## Implementing A Receiver Plugin
|
## Implementing A Receiver Plugin
|
||||||
|
@ -80,6 +80,10 @@ defmodule POABackend.Receiver do
|
||||||
{:ok, state}
|
{:ok, state}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def handle_message(_message, state) do
|
||||||
|
{:ok, state}
|
||||||
|
end
|
||||||
|
|
||||||
def terminate(_state) do
|
def terminate(_state) do
|
||||||
:ok
|
:ok
|
||||||
end
|
end
|
||||||
|
|
|
@ -29,6 +29,8 @@ defmodule POABackend.Receivers.Dashboard do
|
||||||
|
|
||||||
@moduledoc false
|
@moduledoc false
|
||||||
|
|
||||||
|
require Logger
|
||||||
|
|
||||||
alias POABackend.Protocol.Message
|
alias POABackend.Protocol.Message
|
||||||
|
|
||||||
@behaviour :cowboy_websocket_handler
|
@behaviour :cowboy_websocket_handler
|
||||||
|
@ -40,9 +42,13 @@ defmodule POABackend.Receivers.Dashboard do
|
||||||
def websocket_init(_type, req, %{receiver_id: receiver_id, ws_secret: ws_secret}) do
|
def websocket_init(_type, req, %{receiver_id: receiver_id, ws_secret: ws_secret}) do
|
||||||
case :cowboy_req.parse_header("wssecret", req) do
|
case :cowboy_req.parse_header("wssecret", req) do
|
||||||
{_, ^ws_secret, req} ->
|
{_, ^ws_secret, req} ->
|
||||||
|
Logger.info("Websocket connection with dashboard client accepted")
|
||||||
|
|
||||||
send(receiver_id, {:add_client, self()})
|
send(receiver_id, {:add_client, self()})
|
||||||
{:ok, req, %{}}
|
{:ok, req, %{receiver_id: receiver_id}}
|
||||||
{_, _, req} ->
|
{_, _, req} ->
|
||||||
|
Logger.info("Websocket connection with dashboard client unauthorized")
|
||||||
|
|
||||||
{:shutdown, req}
|
{:shutdown, req}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -55,7 +61,10 @@ defmodule POABackend.Receivers.Dashboard do
|
||||||
{:reply, {:text, build_message(message)}, req, state}
|
{:reply, {:text, build_message(message)}, req, state}
|
||||||
end
|
end
|
||||||
|
|
||||||
def websocket_terminate(_reason, _req, _state) do
|
def websocket_terminate(_reason, _req, %{receiver_id: receiver_id}) do
|
||||||
|
Logger.warn("Websocket connection with dashboard client lost")
|
||||||
|
|
||||||
|
send(receiver_id, {:remove_client, self()})
|
||||||
:ok
|
:ok
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -98,6 +107,10 @@ defmodule POABackend.Receivers.Dashboard do
|
||||||
{:ok, %{state | clients: [client | clients]}}
|
{:ok, %{state | clients: [client | clients]}}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def handle_message({:remove_client, client}, %{clients: clients} = state) do
|
||||||
|
{:ok, %{state | clients: List.delete(clients, client)}}
|
||||||
|
end
|
||||||
|
|
||||||
def terminate(_) do
|
def terminate(_) do
|
||||||
:ok
|
:ok
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue