Package com.ultikits.ultitools.websocket
Connection lifecycle and inbound message dispatch for the link to UltiPanel. The whole subsystem is driven by the framework: it is created after a successful cloud login and torn down on shutdown. The wire protocol is a private contract between this client and the panel worker, and both sides change together, so these internals are not an extension point.
Stable extension points. Three classes of this package are public, stable API for
modules, as their own javadoc and COMPATIBILITY.md state:
PanelResponderRegistry: the single-owner registry a module uses to claim a request/response responder for a type the framework does not own (as of 6.3.0, WIRE-16; as of 6.3.1 served by the UltiCloud protocol v2module.request);SensitiveCommandRegistry(as of 6.3.1): the table of commands whose arguments are redacted from everything sent to UltiCloud, reached throughUltiTools#getSensitiveCommandRegistry();CloudPlayerLinks(as of 6.3.1): the player-link API, reached throughUltiTools#getCloudPlayerLinks().
@ApiStatus.Internal for everything else in it. The JetBrains
annotations cannot mark one class stable inside an internal package, so an IDE's unstable-API
inspection flags these three as well; their javadoc and COMPATIBILITY.md are the
contract.
As of 6.3.1 the live dispatch path is the UltiCloud protocol v2 agent connection in
com.ultikits.ultitools.utils. The protocol v1 inbound-message dispatch table was removed
in 6.3.1, and the protocol v1 client it served (UltiPanelWebSocketClient, with its
ReconnectStrategy and ExponentialBackoffStrategy) in 6.4.0.
This package previously also held a second, superseded dispatch mechanism — a
registry-plus-interface pair with five per-message-type implementations, formerly the sole
public class of a now-deleted handlers sub-package (WIRE-17) — replaced by the dispatch
table above in Phase 1 (plan 01-05) but left in the tree, unreferenced, until it was deleted in
6.3.0 (GEN-11, see compatibility/records/6.3.0.md). A reader arriving here from an old
link to that cluster will not find it; this is why.
- Since:
- 6.2.5
-
ClassDescriptionFrames and sends UltiCloud protocol v2 messages; internal, not for module use.Immutable limits from one accepted welcome; internal, not for module use.Creates and tracks UltiCloud player links on a module's behalf; the framework's player-link API.Why a link stopped being usable.Why a link request failed.What the handler reports about provisioning a game account for the linked player.What this server knows about the player's game authentication when the link is created.One completed link: how the web user proved the game identity, and what to provision.The answer to one
CloudPlayerLinks.create(com.ultikits.ultitools.abstracts.UltiToolsPlugin, java.util.UUID, java.lang.String, com.ultikits.ultitools.websocket.CloudPlayerLinks.GameAuth, java.util.Set<com.ultikits.ultitools.websocket.CloudPlayerLinks.LinkProof>)call: either a link, or a failure with a safe message.Receives completions and expiries of this server's links.One link that stopped being usable.An identity proof the server side can support for one link; the gateway decides which of the offered ones it actually accepts.The framework's transport for link messages; internal, not for module use.Immutable protocol request snapshot; internal, not for module use.Handles one parsed UltiCloud request; internal, not for module use.Writes the framework's lines about the panel connection itself to the server console, marked so the panel's log stream never sends them back to the panel (as of 6.3.0).The mark: a record of this type is a panel-connection line.The single-owner registry a module uses to claim a request/response responder for a panel message type the framework itself does not own (WIRE-16, D-26/D-27).An immutable pairing of a responder function with the module name that registered it and, when the registration named one, the module instance (#506).The table of commands whose arguments must never reach UltiCloud, and the redaction rule that enforces it.