lib/nats_ex.ex

defmodule NatsEx do
  @moduledoc """
  NatsEx application
  """
  use Application

  # See http://elixir-lang.org/docs/stable/elixir/Application.html
  # for more information on OTP Applications
  @impl Application
  def start(_type, _args) do
    # Initialize syn
    # :syn.init()

    # Initialize sid counter ets table
    NatsEx.SidCounter.init(0)

    # Stores a counter with how many messages still there for the `sid` to unsubscribe.
    :unsub_ets = :ets.new(:unsub_ets, [:public, :named_table, :set])

    children = [
      NatsEx.ProcessGroup,
      NatsEx.ConnectionSup,
      {Registry, keys: :duplicate, name: :sids}
    ]

    opts = [strategy: :one_for_one, name: NatsEx.Supervisor]
    Supervisor.start_link(children, opts)
  end
end