Raxol.Swarm.TacticalOverlay
(Raxol v2.3.0)
View Source
CRDT-backed shared state visible to all nodes.
Maintains entities (LWW-Register per entity), waypoints (OR-Set), and annotations (LWW-Register per annotation). Syncs deltas to peers at a configurable interval, with full anti-entropy exchange periodically.
Summary
Functions
Returns a specification to start this module under a supervisor.
Receive a delta from a remote peer. Called via :rpc.cast.
Receive full state for anti-entropy exchange.
Types
@type pending_op() :: {:update_entity, atom(), Raxol.Swarm.CRDT.LWWRegister.t()} | {:add_waypoint, waypoint()} | {:remove_waypoint, waypoint()} | {:add_annotation, binary(), Raxol.Swarm.CRDT.LWWRegister.t()}
@type t() :: %Raxol.Swarm.TacticalOverlay{ annotations: %{required(binary()) => Raxol.Swarm.CRDT.LWWRegister.t()}, anti_entropy_interval_ms: pos_integer(), anti_entropy_ref: reference() | nil, comms_manager: GenServer.server(), entities: %{required(atom()) => Raxol.Swarm.CRDT.LWWRegister.t()}, node_id: node(), peers: [node()], pending_ops: [pending_op()], subscribers: [pid()], sync_interval_ms: pos_integer(), sync_ref: reference() | nil, waypoints: Raxol.Swarm.CRDT.ORSet.t() }
Functions
@spec add_annotation(GenServer.server(), binary(), map()) :: :ok
@spec add_waypoint(GenServer.server(), waypoint()) :: :ok
Returns a specification to start this module under a supervisor.
See Supervisor.
@spec get_all_entities(GenServer.server()) :: [entity()]
@spec get_all_waypoints(GenServer.server()) :: [waypoint()]
@spec get_overlay_state(GenServer.server()) :: map()
@spec receive_delta(GenServer.server(), node(), [term()]) :: :ok
Receive a delta from a remote peer. Called via :rpc.cast.
@spec receive_full_state(GenServer.server(), node(), map()) :: :ok
Receive full state for anti-entropy exchange.
@spec remove_waypoint(GenServer.server(), binary()) :: :ok
@spec set_peers(GenServer.server(), [node()]) :: :ok
@spec start_link(keyword()) :: GenServer.on_start()
@spec subscribe(GenServer.server()) :: :ok
@spec update_entity(GenServer.server(), atom(), map()) :: :ok