Packages

Elixir SDK for the SW4RM multi-agent coordination protocol

Current section

Files

Jump to
sw4rm_sdk lib sw4rm envelope sequence_tracker.ex
Raw

lib/sw4rm/envelope/sequence_tracker.ex

defmodule Sw4rm.Envelope.SequenceTracker do
@moduledoc """
GenServer-based monotonic sequence number generator.
Uses OTP process isolation for thread-safe sequence tracking.
"""
use GenServer
# -- Client API --
@doc "Start a sequence tracker. Options: `:start` (default 1)."
def start_link(opts \\ []) do
name = Keyword.get(opts, :name)
start = Keyword.get(opts, :start, 1)
GenServer.start_link(__MODULE__, start - 1, name: name)
end
@doc "Get the next sequence number."
@spec next(GenServer.server()) :: pos_integer()
def next(server), do: GenServer.call(server, :next)
# -- Callbacks --
@impl true
def init(counter), do: {:ok, counter}
@impl true
def handle_call(:next, _from, counter) do
next_val = counter + 1
{:reply, next_val, next_val}
end
end