Reliable WebSocket (TCP) plus an optional UDP fast lane — 1 TCP + 1 UDP per player
public static TokenResponse getToken(
Client client,
String playerToken
) throws IOException
Retrieves a realtime authentication token for WebSocket connections.
public boolean connect(
String realtimeToken
)
Connects to the realtime WebSocket server using the provided token.
public void send(
ERoomTargetPlayer target,
String command,
Object data,
int[] targetIds
)
Sends a message to the specified players via WebSocket.
public boolean connectUdp(
Integer udpPort
)
Binds one UDP endpoint alongside the WebSocket (max 1 TCP + 1 UDP per player). Datagrams authenticate with the server-issued connection id. Null port = the udp_port announced by the server.
public void sendUnreliable(
ERoomTargetPlayer target,
String command,
Object data,
int[] targetIds
)
Sends over the bound UDP channel — unordered, unacknowledged, latest-wins via seq. Ideal for 20-60Hz movement/state streams. Falls back to the WebSocket when UDP isn't bound.
Prediction.PredictionBuffer<S, I> — nextSeq() / record() / reconcile()
Prediction.SnapshotBuffer<S> — add(t, state, seq) / sample(renderTime, lerp)
Client-side movement prediction: record each input with its seq, adopt authoritative state on arrival, replay unacked inputs. SnapshotBuffer interpolates remote entities ~100ms in the past. In rooms/realtime/Prediction.java.
public void disconnect()
Disconnects from the server and cleans up both channels.