websocket_client.ex (1369B)
- # Pleroma: A lightweight social networking server
- # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
- # SPDX-License-Identifier: AGPL-3.0-only
- defmodule Pleroma.Integration.WebsocketClient do
- # https://github.com/phoenixframework/phoenix/blob/master/test/support/websocket_client.exs
- use WebSockex
- @doc """
- Starts the WebSocket server for given ws URL. Received Socket.Message's
- are forwarded to the sender pid
- """
- def start_link(sender, url, headers \\ []) do
- WebSockex.start_link(
- url,
- __MODULE__,
- %{sender: sender},
- extra_headers: headers
- )
- end
- @doc """
- Closes the socket
- """
- def close(socket) do
- send(socket, :close)
- end
- @doc """
- Sends a low-level text message to the client.
- """
- def send_text(server_pid, msg) do
- send(server_pid, {:text, msg})
- end
- @doc false
- @impl true
- def handle_frame(frame, state) do
- send(state.sender, frame)
- {:ok, state}
- end
- @impl true
- def handle_disconnect(conn_status, state) do
- send(state.sender, {:close, conn_status})
- {:ok, state}
- end
- @doc false
- @impl true
- def handle_info({:text, msg}, state) do
- {:reply, {:text, msg}, state}
- end
- @impl true
- def handle_info(:close, _state) do
- {:close, <<>>, "done"}
- end
- @doc false
- @impl true
- def terminate(_reason, _state) do
- :ok
- end
- end