Packages
tai
0.0.65
0.0.75
0.0.74
0.0.73
0.0.72
0.0.71
0.0.70
0.0.69
0.0.68
0.0.67
0.0.66
0.0.65
0.0.64
0.0.63
0.0.62
0.0.61
0.0.60
0.0.59
0.0.58
0.0.57
0.0.56
0.0.55
0.0.54
0.0.53
0.0.52
0.0.51
0.0.50
0.0.49
0.0.48
0.0.47
0.0.46
0.0.45
0.0.44
0.0.43
0.0.42
0.0.41
0.0.40
0.0.39
0.0.38
0.0.37
0.0.36
0.0.35
0.0.34
0.0.33
0.0.32
0.0.31
0.0.30
0.0.29
0.0.28
0.0.27
0.0.26
0.0.25
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
A composable, real time, market data and trade execution toolkit
Current section
Files
Jump to
Current section
Files
lib/tai/venue_adapters/ftx/stream/process_auth.ex
defmodule Tai.VenueAdapters.Ftx.Stream.ProcessAuth do
use GenServer
alias Tai.VenueAdapters.Ftx.Stream
defmodule State do
@type venue :: Tai.Venue.id()
@type t :: %State{venue: venue}
@enforce_keys ~w[venue]a
defstruct ~w[venue]a
end
@type venue :: Tai.Venue.id()
@type state :: State.t()
def start_link(venue: venue) do
state = %State{venue: venue}
name = venue |> process_name()
GenServer.start_link(__MODULE__, state, name: name)
end
@spec process_name(venue) :: atom
def process_name(venue), do: :"#{__MODULE__}_#{venue}"
@impl true
def init(state) do
Process.flag(:trap_exit, true)
{:ok, state}
end
@impl true
def handle_cast({%{"channel" => "orders", "type" => "update", "data" => venue_order}, received_at}, state) do
Stream.UpdateOrder.update(venue_order, received_at, state)
{:noreply, state}
end
@impl true
def handle_cast({%{"channel" => "orders", "type" => "subscribed"}, received_at}, state) do
TaiEvents.info(%Tai.Events.StreamSubscribeOk{
venue: state.venue,
channel_name: "orders",
received_at: received_at,
meta: %{},
})
{:noreply, state}
end
@impl true
def handle_cast({msg, received_at}, state) do
TaiEvents.warn(%Tai.Events.StreamMessageUnhandled{
venue_id: state.venue,
msg: msg,
received_at: received_at |> Tai.Time.monotonic_to_date_time!()
})
{:noreply, state}
end
end