ExWapp.Session.OutboundQueue (ExWapp v0.1.2)

Copy Markdown View Source

Per-session outbound command queue.

It serializes transport writes and keeps pending commands while the transport connection is unavailable.

Summary

Functions

Returns a specification to start this module under a supervisor.

Enqueues a protocol-critical node ahead of normal application traffic.

Types

item()

@type item() :: {:send_node, term()} | :restart_stream

t()

@type t() :: %ExWapp.Session.OutboundQueue{
  conn: pid() | nil,
  drop_policy: :reject_new | :drop_oldest,
  flush_batch_size: pos_integer(),
  flush_tick_ms: pos_integer(),
  flush_timer: reference() | nil,
  max_size: pos_integer(),
  queue: :queue.queue(item()),
  session: pid(),
  transport: module()
}

Functions

child_spec(init_arg)

Returns a specification to start this module under a supervisor.

See Supervisor.

clear_conn(pid)

@spec clear_conn(pid()) :: :ok

enqueue_node(pid, node)

@spec enqueue_node(pid(), term()) :: :ok

enqueue_priority_node(pid, node)

@spec enqueue_priority_node(pid(), term()) :: :ok

Enqueues a protocol-critical node ahead of normal application traffic.

Stanza ACKs use this path so a reconnect backlog or a burst of outbound messages cannot delay the acknowledgement that keeps the stream healthy.

restart_stream(pid)

@spec restart_stream(pid()) :: :ok

set_conn(pid, conn)

@spec set_conn(pid(), pid()) :: :ok

start_link(opts)

@spec start_link(keyword()) :: GenServer.on_start()