Current section
Files
Jump to
Current section
Files
lib/hyperliquid/streamer/supervisor.ex
defmodule Hyperliquid.Streamer.Supervisor do
@moduledoc """
Supervisor for WebSocket stream processes in the Hyperliquid application.
This module implements a dynamic supervisor that manages WebSocket stream
processes. It allows for dynamically starting and stopping stream processes,
providing flexibility in managing multiple WebSocket connections.
## Key Features
- Dynamically supervises WebSocket stream processes
- Provides functions to start and stop individual stream processes
- Allows querying of currently supervised children
## Usage
This supervisor is typically started as part of your application's supervision tree.
It can then be used to dynamically manage WebSocket stream processes.
Example:
# Start the supervisor
{:ok, pid} = Hyperliquid.Streamer.Supervisor.start_link()
# Start a new stream process
{:ok, stream_pid} = Hyperliquid.Streamer.Supervisor.start_stream([%{type: "allMids"}])
# Stop a stream process
:ok = Hyperliquid.Streamer.Supervisor.stop_child(stream_pid)
Note: This supervisor uses a :one_for_one strategy, meaning each child is
supervised independently.
"""
use DynamicSupervisor
alias Hyperliquid.Streamer.Stream
def start_link(args \\ []) do
DynamicSupervisor.start_link(__MODULE__, [], name: __MODULE__)
end
def init(_arg) do
DynamicSupervisor.init(strategy: :one_for_one)
end
def children do
DynamicSupervisor.which_children(__MODULE__)
end
def start_stream(args \\ []) do
DynamicSupervisor.start_child(__MODULE__, {Stream, args})
end
def stop_child(pids) when is_list(pids), do: Enum.map(pids, &stop_child(&1))
def stop_child(pid) when is_pid(pid) do
DynamicSupervisor.terminate_child(__MODULE__, pid)
end
end