clj-artnet.impl.protocol.poll

Helpers for ArtPoll discovery configuration and reply-on-change logic.

Provides pure functions for normalizing discovery settings and managing purely functional reply-on-change subscriber state.

allowed-reply-on-change-policies

default-discovery-config

disable-reply-on-change

(disable-reply-on-change entry)

Disables reply-on-change tracking for a peer entry.

enforce-reply-on-change-limit

(enforce-reply-on-change-limit state)

Enforces the limit on reply-on-change subscribers.

Returns updated state with excess subscribers disabled based on policy. Uses :discovery {:reply-on-change-limit N :reply-on-change-policy …}.

normalize-config

(normalize-config discovery)

Normalizes discovery configuration to canonical form.

Ensures :reply-on-change-limit is non-negative and :reply-on-change-policy is valid (defaults to :prefer-existing).

page-in-target-range?

(page-in-target-range? page target-enabled? target-bottom target-top page-port-addresses-fn)

Checks if a page has any port addresses within the targeted range.

Returns true if: - Targeted mode is disabled (pass-through) - Page has port addresses within target-bottom, target-top

peer-key

(peer-key {:keys [host port]})

Creates consistent peer lookup key from sender info (host and port).

reply-on-change-effects

(reply-on-change-effects state reply-data exclude-key)

Generates tx-packet effects for all reply-on-change peers.

Used when node state changes (e.g., address change, name change).

reply-on-change-peers

(reply-on-change-peers state exclude-key)

Gets a list of peers subscribed to reply-on-change, excluding a specific peer.

reply-on-change-peers-for-page

(reply-on-change-peers-for-page state page exclude-key page-port-addresses-fn)

Gets reply-on-change peers whose targeted mode matches the given page’s addresses.

If a peer uses targeted mode, only returns it if the page has addresses in range. If a peer doesn’t use the targeted mode, always returns it.