2.6 KiB
Agent manager compatibility contract
The native AgentManager implements LibreMetaverse's non-movement agent
services over the native network and capability layers. It owns a strong
network-manager reference until Dispose, so UDP and event-queue callbacks do
not disappear when the weak GridClient service cache is the only other
reference.
Protocol selection and state
Chat, instant messages, conferences, gesture activation, animation, viewer
effects, balance requests, payments, profile updates, interests, picks,
classifieds, mute changes, and their replies retain the C# LLUDP packet choice
and wire fields. Capability-backed preferences, experiences, display names,
offline messages, attachment resources, viewer benefits, render information,
viewer statistics, postcards, and nav-mesh status use LLSD through the current
simulator's advertised capability. A missing optional capability produces the
same empty/None result as the reference; caller cancellation remains a typed
Error::Cancelled.
Incoming UDP and capability handlers update synchronized state before taking a
snapshot of the subscriber list. User callbacks therefore run without an
agent-state lock held. Group-chat membership, signaled animations, balance,
identity/group data, mute entries, preferences, benefits, and the last nav-mesh
status are shared between all GridClient::Self snapshots.
Debug output exposes only message and binary-payload lengths, never chat/IM
text, transaction descriptions, or capability URLs.
Mute lists are downloaded with the legacy RequestXfer/SendXferPacket protocol.
The receiver validates the agent, acknowledges ordered chunks, rejects
oversized or inconsistent transfers, replaces state only after a complete
download, and then raises MuteListUpdated.
Gesture execution
Gesture assets use the C# version-2 text format. PlayGestureAsync first uses
ViewerAsset and falls back to the LLUDP asset-transfer protocol. It executes
chat-channel prefixes, animation start/stop, sound triggers, and timed waits in
sequence. The reference's animation-completion wait remains a no-op. Downloads
are bounded to 16 MiB, the whole operation is bounded to 30 seconds, and a
cancelled UDP transfer sends an abort packet.
Verification
Unit tests cover UTF-8 chat splitting, identity and animation state, group-chat
ordering, invitation/display-name events, mute parsing, nav-mesh state, gesture
format round trips, and malformed assets. The offline fake-grid test performs
real seed discovery, serves a gesture through ViewerAsset, and observes the
resulting chat, animation, and sound packets on a loopback UDP peer.