@colyseus/core 0.17.44 → 0.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/MatchMaker.cjs +22 -13
- package/build/MatchMaker.cjs.map +2 -2
- package/build/MatchMaker.d.ts +10 -0
- package/build/MatchMaker.mjs +22 -14
- package/build/MatchMaker.mjs.map +2 -2
- package/build/Protocol.cjs +102 -37
- package/build/Protocol.cjs.map +2 -2
- package/build/Protocol.d.ts +33 -2
- package/build/Protocol.mjs +102 -37
- package/build/Protocol.mjs.map +2 -2
- package/build/Rewind.cjs +385 -0
- package/build/Rewind.cjs.map +7 -0
- package/build/Rewind.d.ts +291 -0
- package/build/Rewind.mjs +359 -0
- package/build/Rewind.mjs.map +7 -0
- package/build/Room.cjs +425 -149
- package/build/Room.cjs.map +3 -3
- package/build/Room.d.ts +314 -27
- package/build/Room.mjs +434 -152
- package/build/Room.mjs.map +3 -3
- package/build/RoomMessages.cjs +265 -0
- package/build/RoomMessages.cjs.map +7 -0
- package/build/RoomMessages.d.ts +49 -0
- package/build/RoomMessages.mjs +240 -0
- package/build/RoomMessages.mjs.map +7 -0
- package/build/RoomPlugin.cjs +252 -0
- package/build/RoomPlugin.cjs.map +7 -0
- package/build/RoomPlugin.d.ts +271 -0
- package/build/RoomPlugin.mjs +220 -0
- package/build/RoomPlugin.mjs.map +7 -0
- package/build/Server.cjs +49 -11
- package/build/Server.cjs.map +2 -2
- package/build/Server.d.ts +26 -0
- package/build/Server.mjs +50 -12
- package/build/Server.mjs.map +2 -2
- package/build/Transport.cjs +64 -2
- package/build/Transport.cjs.map +2 -2
- package/build/Transport.d.ts +108 -5
- package/build/Transport.mjs +63 -2
- package/build/Transport.mjs.map +2 -2
- package/build/errors/RoomExceptions.cjs +7 -4
- package/build/errors/RoomExceptions.cjs.map +2 -2
- package/build/errors/RoomExceptions.d.ts +15 -3
- package/build/errors/RoomExceptions.mjs +5 -3
- package/build/errors/RoomExceptions.mjs.map +2 -2
- package/build/index.cjs +30 -4
- package/build/index.cjs.map +2 -2
- package/build/index.d.ts +9 -5
- package/build/index.mjs +29 -6
- package/build/index.mjs.map +2 -2
- package/build/input/InputBuffer.cjs +536 -0
- package/build/input/InputBuffer.cjs.map +7 -0
- package/build/input/InputBuffer.d.ts +226 -0
- package/build/input/InputBuffer.mjs +507 -0
- package/build/input/InputBuffer.mjs.map +7 -0
- package/build/input/RoomInput.cjs +306 -0
- package/build/input/RoomInput.cjs.map +7 -0
- package/build/input/RoomInput.d.ts +91 -0
- package/build/input/RoomInput.mjs +287 -0
- package/build/input/RoomInput.mjs.map +7 -0
- package/build/input/types.cjs +18 -0
- package/build/input/types.cjs.map +7 -0
- package/build/input/types.d.ts +476 -0
- package/build/input/types.mjs +0 -0
- package/build/input/types.mjs.map +7 -0
- package/build/internal.cjs +61 -0
- package/build/internal.cjs.map +7 -0
- package/build/internal.d.ts +9 -0
- package/build/internal.mjs +29 -0
- package/build/internal.mjs.map +7 -0
- package/build/matchmaker/LocalDriver/LocalDriver.cjs +13 -0
- package/build/matchmaker/LocalDriver/LocalDriver.cjs.map +2 -2
- package/build/matchmaker/LocalDriver/LocalDriver.d.ts +1 -0
- package/build/matchmaker/LocalDriver/LocalDriver.mjs +13 -0
- package/build/matchmaker/LocalDriver/LocalDriver.mjs.map +2 -2
- package/build/matchmaker/driver.cjs.map +1 -1
- package/build/matchmaker/driver.d.ts +12 -0
- package/build/matchmaker/driver.mjs.map +1 -1
- package/build/presence/LocalPresence.d.ts +1 -1
- package/build/rooms/LobbyRoom.cjs +8 -10
- package/build/rooms/LobbyRoom.cjs.map +2 -2
- package/build/rooms/LobbyRoom.d.ts +4 -3
- package/build/rooms/LobbyRoom.mjs +8 -10
- package/build/rooms/LobbyRoom.mjs.map +2 -2
- package/build/rooms/QueueRoom.cjs +1 -1
- package/build/rooms/QueueRoom.cjs.map +2 -2
- package/build/rooms/QueueRoom.mjs +1 -1
- package/build/rooms/QueueRoom.mjs.map +2 -2
- package/build/rooms/RelayRoom.cjs +12 -16
- package/build/rooms/RelayRoom.cjs.map +2 -2
- package/build/rooms/RelayRoom.d.ts +32 -11
- package/build/rooms/RelayRoom.mjs +10 -16
- package/build/rooms/RelayRoom.mjs.map +2 -2
- package/build/router/default_routes.cjs +4 -1
- package/build/router/default_routes.cjs.map +2 -2
- package/build/router/default_routes.mjs +4 -1
- package/build/router/default_routes.mjs.map +2 -2
- package/build/router/index.cjs +71 -5
- package/build/router/index.cjs.map +2 -2
- package/build/router/index.d.ts +30 -6
- package/build/router/index.mjs +72 -7
- package/build/router/index.mjs.map +3 -3
- package/build/serializer/NoneSerializer.cjs +2 -2
- package/build/serializer/NoneSerializer.cjs.map +2 -2
- package/build/serializer/NoneSerializer.d.ts +3 -3
- package/build/serializer/NoneSerializer.mjs +2 -2
- package/build/serializer/NoneSerializer.mjs.map +2 -2
- package/build/serializer/SchemaSerializer.cjs +44 -14
- package/build/serializer/SchemaSerializer.cjs.map +2 -2
- package/build/serializer/SchemaSerializer.d.ts +3 -3
- package/build/serializer/SchemaSerializer.mjs +46 -16
- package/build/serializer/SchemaSerializer.mjs.map +2 -2
- package/build/serializer/Serializer.cjs.map +1 -1
- package/build/serializer/Serializer.d.ts +12 -2
- package/build/utils/DevMode.cjs +14 -14
- package/build/utils/DevMode.cjs.map +2 -2
- package/build/utils/DevMode.d.ts +0 -2
- package/build/utils/DevMode.mjs +14 -12
- package/build/utils/DevMode.mjs.map +2 -2
- package/build/utils/UserSessionIndex.cjs +162 -0
- package/build/utils/UserSessionIndex.cjs.map +7 -0
- package/build/utils/UserSessionIndex.d.ts +166 -0
- package/build/utils/UserSessionIndex.mjs +130 -0
- package/build/utils/UserSessionIndex.mjs.map +7 -0
- package/build/utils/Utils.cjs +3 -0
- package/build/utils/Utils.cjs.map +2 -2
- package/build/utils/Utils.d.ts +8 -0
- package/build/utils/Utils.mjs +2 -0
- package/build/utils/Utils.mjs.map +2 -2
- package/package.json +19 -14
- package/src/MatchMaker.ts +47 -15
- package/src/Protocol.ts +130 -59
- package/src/Rewind.ts +572 -0
- package/src/Room.ts +649 -235
- package/src/RoomMessages.ts +342 -0
- package/src/RoomPlugin.ts +563 -0
- package/src/Server.ts +82 -15
- package/src/Transport.ts +172 -9
- package/src/errors/RoomExceptions.ts +18 -4
- package/src/index.ts +23 -3
- package/src/input/InputBuffer.ts +549 -0
- package/src/input/RoomInput.ts +337 -0
- package/src/input/types.ts +503 -0
- package/src/internal.ts +46 -0
- package/src/matchmaker/LocalDriver/LocalDriver.ts +10 -0
- package/src/matchmaker/driver.ts +13 -0
- package/src/rooms/LobbyRoom.ts +12 -8
- package/src/rooms/QueueRoom.ts +1 -1
- package/src/rooms/RelayRoom.ts +9 -15
- package/src/router/default_routes.ts +6 -1
- package/src/router/index.ts +117 -11
- package/src/serializer/NoneSerializer.ts +3 -3
- package/src/serializer/SchemaSerializer.ts +110 -19
- package/src/serializer/Serializer.ts +13 -2
- package/src/utils/DevMode.ts +18 -13
- package/src/utils/UserSessionIndex.ts +311 -0
- package/src/utils/Utils.ts +9 -0
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import type { ClientPrivate } from '../Transport.ts';
|
|
2
|
+
import type { ConsumeOptions, IdleInput, InputAccessor, SanitizeInput } from './types.ts';
|
|
3
|
+
/**
|
|
4
|
+
* @internal Validate a `subSteps` count. Throws on a fractional/non-positive
|
|
5
|
+
* value: both sides loop `subSteps` times at `dt/subSteps`, so anything but a
|
|
6
|
+
* whole number is a determinism bug, not a tunable. Shared by `defineInput`
|
|
7
|
+
* and `setFixedTimestep`.
|
|
8
|
+
*/
|
|
9
|
+
export declare function validateSubSteps(subSteps: number | undefined, source: string): number | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* @internal Compile a {@link SanitizeInput} spec into the per-frame function the
|
|
12
|
+
* decode path applies. The map form precompiles to dense min/max arrays walked
|
|
13
|
+
* with the NaN-safe branch clamp; the callback form passes through.
|
|
14
|
+
*/
|
|
15
|
+
export declare function compileSanitizer<I>(spec: SanitizeInput<I>): (input: I) => void;
|
|
16
|
+
/** @internal */
|
|
17
|
+
export declare class InputBufferImpl<I = any> {
|
|
18
|
+
/** Pending snapshots, indexed `[_head, _items.length)`. Consumed inputs are
|
|
19
|
+
* NOT spliced off per-read — `_head` advances and the prefix is reclaimed in
|
|
20
|
+
* bulk by {@link compact} (a `shift()` per read is O(n), so a burst would be
|
|
21
|
+
* O(n²)). `_renderTimes`/`_reckonTimes` stay parallel to `_items`. */
|
|
22
|
+
private _items;
|
|
23
|
+
/** Read cursor: index of the oldest UNCONSUMED input (== `_items.length` when empty). */
|
|
24
|
+
private _head;
|
|
25
|
+
private _lastSeq;
|
|
26
|
+
private readonly _maxSize;
|
|
27
|
+
private readonly _seqField;
|
|
28
|
+
/**
|
|
29
|
+
* Cumulative count of inputs CONSUMED from this buffer (via any consume
|
|
30
|
+
* primitive — {@link next}/{@link take}/{@link drain}/{@link consume} — plus
|
|
31
|
+
* {@link clear} and overflow). Consumed = "removed from the pending set",
|
|
32
|
+
* whether applied to state or discarded. The server echoes this in the TIMED
|
|
33
|
+
* prefix as the reconciliation ack: how many of the client's inputs are
|
|
34
|
+
* reflected in (or finished influencing) the authoritative state, which lags
|
|
35
|
+
* the receive counter by inputs still buffered. Distinct from
|
|
36
|
+
* `_receivedInputCount` (receive-time, for RTT), which leads the state.
|
|
37
|
+
*/
|
|
38
|
+
consumedCount: number;
|
|
39
|
+
/** Render times parallel to `_items` (server-clock ms; `0` when unset). */
|
|
40
|
+
private _renderTimes;
|
|
41
|
+
/** Render time of the most recently drained input (see {@link renderTime}). */
|
|
42
|
+
private _lastRenderTime;
|
|
43
|
+
/** Reckon-display stamps parallel to `_items` — the client's serverNow
|
|
44
|
+
* estimate at input-sample time, i.e. the instant its forward-reckoned
|
|
45
|
+
* entities were displayed at (server-clock ms; `0` when unset). */
|
|
46
|
+
private _reckonTimes;
|
|
47
|
+
/** Reckon stamp of the most recently consumed input (see {@link reckonTime}). */
|
|
48
|
+
private _lastReckonTime;
|
|
49
|
+
/** Framework wire seq per buffered input (parallel to `_items`) — UNRELIABLE
|
|
50
|
+
* ONLY, lazily created on the first seq-carrying push. Reliable inputs are
|
|
51
|
+
* contiguous, so their consumed-seq-value is always exactly {@link consumedCount}
|
|
52
|
+
* and needs no parallel array; `undefined` here marks that (the common, default
|
|
53
|
+
* path pays nothing). A buffer is single-mode, so this is either never created
|
|
54
|
+
* (reliable) or created once and kept parallel (unreliable). */
|
|
55
|
+
private _seqs?;
|
|
56
|
+
/** Seq VALUE of the last consumed input — the reconciliation ack echoed to the
|
|
57
|
+
* client (see {@link ackSeq}). Only meaningful when {@link _seqs} is tracked
|
|
58
|
+
* (unreliable); reliable's ack falls back to {@link consumedCount}. */
|
|
59
|
+
private _lastConsumedSeq;
|
|
60
|
+
/** Whether the most recently produced frame was a synthesized idle (see {@link wasIdle}). */
|
|
61
|
+
private _lastWasIdle;
|
|
62
|
+
/** Reused {@link consume} iterator (lazily minted) + its per-call state, so a
|
|
63
|
+
* per-tick loop allocates no generator frame. `_iterRemaining` snapshots the
|
|
64
|
+
* COUNT to walk — a count, not an index: mid-pass mutations (`next()`/`take()`/
|
|
65
|
+
* `clear()`/compaction) shift indices but can only shorten a count-based pass,
|
|
66
|
+
* never point it past the tail. `_iterIdle` is an optional trailing synthesized
|
|
67
|
+
* frame; `_iterActive` guards against a nested consume() clobbering the shared
|
|
68
|
+
* `_iterRes`. */
|
|
69
|
+
private _iter?;
|
|
70
|
+
private _iterRemaining;
|
|
71
|
+
private _iterActive;
|
|
72
|
+
private _iterIdle?;
|
|
73
|
+
private readonly _iterRes;
|
|
74
|
+
/** Input schema ctor — mints the reused idle frame; idle is off without it. */
|
|
75
|
+
private readonly _ctor?;
|
|
76
|
+
/** Client slice this buffer belongs to (the live object is `Client & ClientPrivate`)
|
|
77
|
+
* — feeds the idle callback's ctx (latest + sessionId). */
|
|
78
|
+
private readonly _client?;
|
|
79
|
+
/** Room-level idle policy (`defineInput({ idle })`) — the bare-call default. */
|
|
80
|
+
private readonly _roomIdle?;
|
|
81
|
+
/** Reused synthesized idle frame + the schema's field names/defaults (lazy). */
|
|
82
|
+
private _idle?;
|
|
83
|
+
private _fieldNames?;
|
|
84
|
+
private _defaults?;
|
|
85
|
+
/** Reused ctx for the idle callback form (see {@link IdleContext}). */
|
|
86
|
+
private readonly _idleCtx;
|
|
87
|
+
constructor(maxSize: number, seqField: string | undefined, ctor?: new () => I, client?: Pick<ClientPrivate, '_input'> & {
|
|
88
|
+
sessionId: string;
|
|
89
|
+
}, idle?: IdleInput<I>);
|
|
90
|
+
/** The effective idle policy for one consume call: per-call `false` suppresses,
|
|
91
|
+
* per-call value overrides, else the room-level default (or none). */
|
|
92
|
+
private effectiveIdle;
|
|
93
|
+
/** Resolve an {@link IdleInput} to overrides — invokes the callback form
|
|
94
|
+
* LAZILY, here at synthesis time (the buffer is known to be empty). */
|
|
95
|
+
private resolveIdle;
|
|
96
|
+
/**
|
|
97
|
+
* The synthesized "no input this tick" frame: schema defaults overlaid with
|
|
98
|
+
* `overrides` (`true` = none). Copies BY FIELD NAME from the schema metadata —
|
|
99
|
+
* schema fields are prototype accessors (no own props), so `Object.assign`
|
|
100
|
+
* can't source from a schema instance; the name walk reads getters, letting
|
|
101
|
+
* `overrides` be a plain partial OR a schema instance (e.g. `latest`).
|
|
102
|
+
* ONE reused instance — refilled per call, never advances the ack.
|
|
103
|
+
*/
|
|
104
|
+
private idleFrame;
|
|
105
|
+
/** The idle frame to synthesize on an empty tick (room policy or per-call
|
|
106
|
+
* `opts.idle`), or `undefined` when no policy is in effect. Reuses the single
|
|
107
|
+
* idle instance; never advances the ack. Callers set {@link wasIdle}. */
|
|
108
|
+
private idleFrameOnEmpty;
|
|
109
|
+
/** Consume the input at the cursor: advance cursor + ack, stamp THIS input's
|
|
110
|
+
* render/reckon times, clear {@link wasIdle}. The shared per-input step behind
|
|
111
|
+
* {@link next}, {@link consume}'s iterator, and the re-entrant fallback. */
|
|
112
|
+
private stepHead;
|
|
113
|
+
/** Drop ALL slots, reusing the backing arrays' capacity — the zero-GC reset for
|
|
114
|
+
* the consume/next path ({@link compact}/{@link clear}). `drain()` deliberately
|
|
115
|
+
* does NOT use this (it returns an array, so fresh `[]` is faster there). */
|
|
116
|
+
private truncate;
|
|
117
|
+
/**
|
|
118
|
+
* Append a decoded input snapshot. `seq` is the framework wire seq (unreliable);
|
|
119
|
+
* omit it for reliable inputs, which get an implicit monotonic receive count so
|
|
120
|
+
* {@link ackSeq} stays well-defined in both modes.
|
|
121
|
+
*/
|
|
122
|
+
push(snapshot: I, renderTime?: number, reckonTime?: number, seq?: number): void;
|
|
123
|
+
/** Reclaim the consumed prefix `[0, _head)`. Free when fully drained (reuse the
|
|
124
|
+
* arrays); otherwise splice only once the cursor passes {@link COMPACT_THRESHOLD},
|
|
125
|
+
* so the amortized per-input cost stays O(1). */
|
|
126
|
+
private compact;
|
|
127
|
+
/** Returns true if `value` hasn't been seen, and updates the last-seen marker. */
|
|
128
|
+
accept(value: number): boolean;
|
|
129
|
+
drain(opts?: ConsumeOptions<I>): I[];
|
|
130
|
+
/** Consume the single oldest input (ack advances by one); `undefined` if
|
|
131
|
+
* empty — or the synthesized idle frame when an idle policy is in effect. */
|
|
132
|
+
next(opts?: ConsumeOptions<I>): I | undefined;
|
|
133
|
+
/** Consume up to `n` oldest inputs (ack advances by the count actually taken). */
|
|
134
|
+
take(n: number): I[];
|
|
135
|
+
/**
|
|
136
|
+
* Iterate pending inputs one at a time (per-yield ack + stamp updates), or
|
|
137
|
+
* exactly one synthesized idle frame on an empty buffer with a policy in
|
|
138
|
+
* effect. See {@link InputAccessor.consume}.
|
|
139
|
+
*
|
|
140
|
+
* Returns a POOLED iterator (reused across calls — no generator frame, no
|
|
141
|
+
* per-call allocation) that consumes at most the pending count snapshotted at
|
|
142
|
+
* the call — never past the live tail — plus one optional trailing idle frame.
|
|
143
|
+
* The cursor advances per `next()`, so `break` (which calls `return()`)
|
|
144
|
+
* leaves the rest buffered and compacts. A nested
|
|
145
|
+
* `consume()` of the SAME buffer while one is live falls back to a fresh
|
|
146
|
+
* generator so the pooled `_iterRes` isn't clobbered (nesting is meaningless —
|
|
147
|
+
* both share the cursor — but it must not corrupt).
|
|
148
|
+
*/
|
|
149
|
+
consume(opts?: ConsumeOptions<I>): IterableIterator<I>;
|
|
150
|
+
[Symbol.iterator](): IterableIterator<I>;
|
|
151
|
+
/** Lazily mint the reused iterator. Closures over `this` so it reads the
|
|
152
|
+
* private cursor directly; one `_iterRes` is reused — read each result before
|
|
153
|
+
* the next `next()`, as `for..of` / spread / `Array.from` all do. */
|
|
154
|
+
private ensureIter;
|
|
155
|
+
/** Re-entrant fallback: a fresh generator for a nested `consume()` of this same
|
|
156
|
+
* buffer (the pooled iterator is single-active). Same accounting + compaction. */
|
|
157
|
+
private consumeGen;
|
|
158
|
+
peek(): I[];
|
|
159
|
+
at(value: number): I | undefined;
|
|
160
|
+
get size(): number;
|
|
161
|
+
/** Render time (server-clock ms) of the most recently drained input; `0`
|
|
162
|
+
* until the first render-time-stamped input is drained. */
|
|
163
|
+
get renderTime(): number;
|
|
164
|
+
/** Reckon-display stamp of the most recently consumed input — the client's
|
|
165
|
+
* serverNow estimate when it sampled that input, i.e. the EXACT instant its
|
|
166
|
+
* forward-reckoned entities were displayed at. Same consume semantics as
|
|
167
|
+
* {@link renderTime}. RAW: stays `0` until stamped — the resolved,
|
|
168
|
+
* always-usable value is the accessor's `reckonTime`
|
|
169
|
+
* (`room.inputs.get(sid)`); `rewind.lastSeenBy()`'s midpoint-reconstruction
|
|
170
|
+
* fallback depends on this raw `0`. */
|
|
171
|
+
get reckonTime(): number;
|
|
172
|
+
/** Seq VALUE of the last consumed input — the reconciliation ack sent to the
|
|
173
|
+
* client. Reliable (no wire seq tracked): falls back to {@link consumedCount}
|
|
174
|
+
* for free. Unreliable: the framework wire seq, so a fully-dropped input doesn't
|
|
175
|
+
* make the ack lag the client's sent seq by the lost count. `0` before the first
|
|
176
|
+
* consume. */
|
|
177
|
+
get ackSeq(): number;
|
|
178
|
+
/** Whether the most recently produced frame was a synthesized idle (see {@link wasIdle}). */
|
|
179
|
+
get wasIdle(): boolean;
|
|
180
|
+
clear(): void;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Default per-client accessor. Reads `_input` and `_inputBuffer` off the
|
|
184
|
+
* client at access time — both are nullable until the room declares input
|
|
185
|
+
* via `defineInput()`. Cached as `client._inputAccessor` at join, so
|
|
186
|
+
* `room.inputs.get(sessionId)` is a Map lookup + property read.
|
|
187
|
+
*
|
|
188
|
+
* @internal
|
|
189
|
+
*/
|
|
190
|
+
export declare class InputAccessorImpl<I = any> implements InputAccessor<I> {
|
|
191
|
+
private _client;
|
|
192
|
+
/** Current room time (`clock.elapsedTime`) — resolves the {@link reckonTime}
|
|
193
|
+
* fallback. Threaded by `RoomInput.allocate()`; optional so bare
|
|
194
|
+
* constructions (tests) keep the raw 0. */
|
|
195
|
+
private _nowOf?;
|
|
196
|
+
constructor(client: ClientPrivate, nowOf?: () => number);
|
|
197
|
+
get latest(): I | undefined;
|
|
198
|
+
at(value: number): I | undefined;
|
|
199
|
+
consume(opts?: ConsumeOptions<I>): IterableIterator<I>;
|
|
200
|
+
[Symbol.iterator](): IterableIterator<I>;
|
|
201
|
+
drain(opts?: ConsumeOptions<I>): I[];
|
|
202
|
+
next(): I | undefined;
|
|
203
|
+
next(opts: {
|
|
204
|
+
idle: IdleInput<I>;
|
|
205
|
+
}): I;
|
|
206
|
+
take(n: number): I[];
|
|
207
|
+
peek(): I[];
|
|
208
|
+
get size(): number;
|
|
209
|
+
get consumedCount(): number;
|
|
210
|
+
get wasIdle(): boolean;
|
|
211
|
+
clear(): void;
|
|
212
|
+
get renderTime(): number;
|
|
213
|
+
/** @internal RAW reckon stamp (0 until stamped). The rewind binding reads
|
|
214
|
+
* THIS, not the resolved getter below: `Rewind._aim`'s midpoint fallback
|
|
215
|
+
* must still see 0 for unstamped clients (a resolved value would silently
|
|
216
|
+
* take the direct-stamp clamp path). */
|
|
217
|
+
get rawReckonTime(): number;
|
|
218
|
+
get reckonTime(): number;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Returned by `room.inputs.get(sessionId)` for unknown sessions and for rooms
|
|
222
|
+
* that didn't call `defineInput()`.
|
|
223
|
+
*
|
|
224
|
+
* @internal
|
|
225
|
+
*/
|
|
226
|
+
export declare const NO_OP_INPUT_ACCESSOR: InputAccessor<any>;
|