defmodule Chaperon.Action.WebSocket.Close do
@moduledoc """
WebSocket connection action that can be run to close the WebSocket connection
with the given `options`.
Closes & removes the `websocket` and `websocket_url` assigned values in
a session when run.
"""
defstruct options: []
end
defimpl Chaperon.Actionable, for: Chaperon.Action.WebSocket.Close do
alias Chaperon.Session
alias Chaperon.Action.WebSocket
use Chaperon.Session.Logging
def run(action, session) do
{ws_conn, ws_url} = WebSocket.for_action(session, action)
WebSocket.Client.close(ws_conn)
session
|> log_info("WS_CLOSE #{ws_url}")
|> WebSocket.delete_for_action(action)
|> Session.ok()
end
def abort(action, session) do
{:ok, action, session}
end
end
defimpl String.Chars, for: Chaperon.Action.WebSocket.Close do
def to_string(%{options: options}) do
"WS Close#{inspect(options)}"
end
end