@woosh/meep-engine 3.46.0 → 3.47.0
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/editor/actions/concrete/TransformModifyAction.d.ts.map +1 -1
- package/editor/actions/concrete/TransformModifyAction.js +10 -2
- package/editor/ecs/component/FieldDescriptor.js +15 -0
- package/editor/ecs/component/createObjectEditor.js +41 -12
- package/editor/ecs/component/editors/ecs/Transform64Editor.d.ts.map +1 -1
- package/editor/ecs/component/editors/ecs/Transform64Editor.js +77 -70
- package/editor/tools/TransformToolV2.d.ts.map +1 -1
- package/editor/tools/TransformToolV2.js +4 -0
- package/editor/tools/v2/TransformControls.d.ts.map +1 -1
- package/editor/tools/v2/TransformControls.js +7 -0
- package/editor/view/ecs/EntityEditor.d.ts.map +1 -1
- package/editor/view/ecs/EntityEditor.js +4 -2
- package/package.json +1 -1
- package/src/core/collection/array/array_insert_at.d.ts +16 -0
- package/src/core/collection/array/array_insert_at.d.ts.map +1 -0
- package/src/core/collection/array/array_insert_at.js +32 -0
- package/src/core/collection/array/array_remove_at.d.ts +15 -0
- package/src/core/collection/array/array_remove_at.d.ts.map +1 -0
- package/src/core/collection/array/array_remove_at.js +30 -0
- package/src/core/geom/3d/quaternion/quat3_look_rotation.d.ts +37 -0
- package/src/core/geom/3d/quaternion/quat3_look_rotation.d.ts.map +1 -0
- package/src/core/geom/3d/quaternion/quat3_look_rotation.js +172 -0
- package/src/core/geom/Quaternion.d.ts +1 -0
- package/src/core/geom/Quaternion.d.ts.map +1 -1
- package/src/core/geom/Quaternion.js +12 -48
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +9 -4
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +10 -0
- package/src/engine/ecs/transform/t64_look_rotation.d.ts +4 -4
- package/src/engine/ecs/transform/t64_look_rotation.d.ts.map +1 -1
- package/src/engine/ecs/transform/t64_look_rotation.js +7 -18
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.js +30 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +6 -0
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.js +72 -29
- package/src/engine/input/devices/KeyboardDevice.d.ts +1 -0
- package/src/engine/input/devices/KeyboardDevice.d.ts.map +1 -1
- package/src/engine/input/devices/KeyboardDevice.js +7 -6
- package/src/engine/navigation/ecs/path_following/PathFollowingSystem.d.ts.map +1 -1
- package/src/engine/navigation/ecs/path_following/PathFollowingSystem.js +15 -2
- package/src/engine/network/CONGESTION_CONTROL.md +9 -9
- package/src/engine/network/MESSAGE_TRANSPORT.md +364 -0
- package/src/engine/network/NetworkSession.d.ts +31 -11
- package/src/engine/network/NetworkSession.d.ts.map +1 -1
- package/src/engine/network/NetworkSession.js +453 -286
- package/src/engine/network/README.md +77 -27
- package/src/engine/network/SMOOTHNESS_DESIGN.md +13 -5
- package/src/engine/network/diagnostics/BandwidthMeter.d.ts +1 -1
- package/src/engine/network/diagnostics/BandwidthMeter.js +1 -1
- package/src/engine/network/orchestrator/HostJoin.d.ts +111 -0
- package/src/engine/network/orchestrator/HostJoin.d.ts.map +1 -0
- package/src/engine/network/orchestrator/HostJoin.js +271 -0
- package/src/engine/network/orchestrator/NetworkPeer.d.ts +151 -112
- package/src/engine/network/orchestrator/NetworkPeer.d.ts.map +1 -1
- package/src/engine/network/orchestrator/NetworkPeer.js +450 -499
- package/src/engine/network/orchestrator/PendingSlices.d.ts +30 -0
- package/src/engine/network/orchestrator/PendingSlices.d.ts.map +1 -0
- package/src/engine/network/orchestrator/PendingSlices.js +83 -0
- package/src/engine/network/orchestrator/ReliableFrames.d.ts +34 -0
- package/src/engine/network/orchestrator/ReliableFrames.d.ts.map +1 -0
- package/src/engine/network/orchestrator/ReliableFrames.js +96 -0
- package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts +77 -10
- package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts.map +1 -1
- package/src/engine/network/orchestrator/ServerAuthoritativeClient.js +236 -61
- package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts +20 -6
- package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts.map +1 -1
- package/src/engine/network/orchestrator/ServerAuthoritativeServer.js +33 -8
- package/src/engine/network/replication/Replicator.d.ts.map +1 -1
- package/src/engine/network/replication/Replicator.js +7 -1
- package/src/engine/network/sim/ActionLog.d.ts +32 -5
- package/src/engine/network/sim/ActionLog.d.ts.map +1 -1
- package/src/engine/network/sim/ActionLog.js +47 -5
- package/src/engine/network/sim/SimActionExecutor.d.ts +42 -2
- package/src/engine/network/sim/SimActionExecutor.d.ts.map +1 -1
- package/src/engine/network/sim/SimActionExecutor.js +100 -4
- package/src/engine/network/sim/Snapshotter.d.ts +12 -0
- package/src/engine/network/sim/Snapshotter.d.ts.map +1 -1
- package/src/engine/network/sim/Snapshotter.js +43 -0
- package/src/engine/network/state/Baseline.d.ts +1 -1
- package/src/engine/network/state/Baseline.js +1 -1
- package/src/engine/network/state/FrameBufferRing.d.ts +25 -6
- package/src/engine/network/state/FrameBufferRing.d.ts.map +1 -1
- package/src/engine/network/state/FrameBufferRing.js +51 -6
- package/src/engine/network/state/InputRing.d.ts +4 -0
- package/src/engine/network/state/InputRing.d.ts.map +1 -1
- package/src/engine/network/state/InputRing.js +7 -0
- package/src/engine/network/transport/DeferredTransport.d.ts.map +1 -1
- package/src/engine/network/transport/DeferredTransport.js +1 -0
- package/src/engine/network/transport/LoopbackTransport.d.ts.map +1 -1
- package/src/engine/network/transport/LoopbackTransport.js +4 -2
- package/src/engine/network/transport/Transport.d.ts +7 -0
- package/src/engine/network/transport/Transport.d.ts.map +1 -1
- package/src/engine/network/transport/Transport.js +8 -0
- package/src/engine/network/transport/adapters/NodeUDPTransport.d.ts.map +1 -1
- package/src/engine/network/transport/adapters/NodeUDPTransport.js +20 -5
- package/src/engine/network/transport/adapters/WebRTCDataChannelTransport.d.ts.map +1 -1
- package/src/engine/network/transport/adapters/WebRTCDataChannelTransport.js +8 -0
- package/src/engine/network/transport/adapters/WebTransportTransport.d.ts.map +1 -1
- package/src/engine/network/transport/adapters/WebTransportTransport.js +6 -0
- package/src/engine/network/transport/connection/Connection.d.ts +191 -0
- package/src/engine/network/transport/connection/Connection.d.ts.map +1 -0
- package/src/engine/network/transport/connection/Connection.js +1262 -0
- package/src/engine/network/transport/connection/RangeSet.d.ts +94 -0
- package/src/engine/network/transport/connection/RangeSet.d.ts.map +1 -0
- package/src/engine/network/transport/connection/RangeSet.js +260 -0
- package/src/engine/network/transport/connection/RxStream.d.ts +48 -0
- package/src/engine/network/transport/connection/RxStream.d.ts.map +1 -0
- package/src/engine/network/transport/connection/RxStream.js +211 -0
- package/src/engine/network/transport/connection/TxStream.d.ts +90 -0
- package/src/engine/network/transport/connection/TxStream.d.ts.map +1 -0
- package/src/engine/network/transport/connection/TxStream.js +243 -0
- package/src/engine/network/transport/connection/bytes_copy.d.ts +17 -0
- package/src/engine/network/transport/connection/bytes_copy.d.ts.map +1 -0
- package/src/engine/network/transport/connection/bytes_copy.js +34 -0
- package/src/engine/network/transport/connection/varint.d.ts +46 -0
- package/src/engine/network/transport/connection/varint.d.ts.map +1 -0
- package/src/engine/network/transport/connection/varint.js +107 -0
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/engine/sound/ecs/audio/AudioEmitter.d.ts +38 -7
- package/src/engine/sound/ecs/audio/AudioEmitter.d.ts.map +1 -1
- package/src/engine/sound/ecs/audio/AudioEmitter.js +35 -7
- package/src/engine/sound/ecs/audio/AudioEmitterSerializationAdapter.d.ts.map +1 -1
- package/src/engine/sound/ecs/audio/AudioEmitterSerializationAdapter.js +5 -1
- package/src/engine/sound/ecs/audio/AudioEmitterSerializationUpgrader_0_1.d.ts +18 -0
- package/src/engine/sound/ecs/audio/AudioEmitterSerializationUpgrader_0_1.d.ts.map +1 -0
- package/src/engine/sound/ecs/audio/AudioEmitterSerializationUpgrader_0_1.js +48 -0
- package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts +12 -2
- package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts.map +1 -1
- package/src/engine/sound/ecs/audio/AudioEmitterSystem.js +173 -9
- package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts +9 -3
- package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts.map +1 -1
- package/src/engine/sound/ecs/audio/LiveEmitterSet.js +28 -8
- package/src/engine/sound/ecs/trigger/AudioEventTrigger.d.ts +8 -0
- package/src/engine/sound/ecs/trigger/AudioEventTrigger.d.ts.map +1 -1
- package/src/engine/sound/ecs/trigger/AudioEventTriggerSerializationAdapter.d.ts.map +1 -1
- package/src/engine/sound/ecs/trigger/AudioEventTriggerSerializationAdapter.js +5 -1
- package/src/engine/sound/ecs/trigger/AudioEventTriggerSerializationUpgrader_0_1.d.ts +18 -0
- package/src/engine/sound/ecs/trigger/AudioEventTriggerSerializationUpgrader_0_1.d.ts.map +1 -0
- package/src/engine/sound/ecs/trigger/AudioEventTriggerSerializationUpgrader_0_1.js +51 -0
- package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.d.ts.map +1 -1
- package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.js +15 -1
- package/src/engine/sound/sopra/README.md +768 -644
- package/src/engine/sound/sopra/SopraEngine.d.ts +104 -8
- package/src/engine/sound/sopra/SopraEngine.d.ts.map +1 -1
- package/src/engine/sound/sopra/SopraEngine.js +327 -12
- package/src/engine/sound/sopra/definition/EventDescription.d.ts +28 -2
- package/src/engine/sound/sopra/definition/EventDescription.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/EventDescription.js +55 -5
- package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.d.ts +10 -0
- package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.js +77 -55
- package/src/engine/sound/sopra/definition/EventDescriptionSerializationUpgrader_0_1.d.ts +31 -0
- package/src/engine/sound/sopra/definition/EventDescriptionSerializationUpgrader_0_1.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/EventDescriptionSerializationUpgrader_0_1.js +75 -0
- package/src/engine/sound/sopra/definition/effect/AbstractAudioEffect.d.ts +38 -9
- package/src/engine/sound/sopra/definition/effect/AbstractAudioEffect.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/effect/AbstractAudioEffect.js +34 -5
- package/src/engine/sound/sopra/definition/effect/CompressorEffect.d.ts +7 -2
- package/src/engine/sound/sopra/definition/effect/CompressorEffect.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/effect/CompressorEffect.js +137 -122
- package/src/engine/sound/sopra/definition/effect/EqEffect.d.ts +3 -1
- package/src/engine/sound/sopra/definition/effect/EqEffect.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/effect/EqEffect.js +146 -131
- package/src/engine/sound/sopra/definition/effect/ReverbEffect.d.ts +1 -0
- package/src/engine/sound/sopra/definition/effect/ReverbEffect.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/effect/ReverbEffect.js +6 -1
- package/src/engine/sound/sopra/runtime/BusGraph.d.ts +44 -2
- package/src/engine/sound/sopra/runtime/BusGraph.d.ts.map +1 -1
- package/src/engine/sound/sopra/runtime/BusGraph.js +83 -43
- package/src/engine/sound/sopra/runtime/EffectChain.d.ts +96 -0
- package/src/engine/sound/sopra/runtime/EffectChain.d.ts.map +1 -0
- package/src/engine/sound/sopra/runtime/EffectChain.js +286 -0
- package/src/engine/sound/sopra/runtime/EffectParamOverrides.d.ts +123 -0
- package/src/engine/sound/sopra/runtime/EffectParamOverrides.d.ts.map +1 -0
- package/src/engine/sound/sopra/runtime/EffectParamOverrides.js +320 -0
- package/src/engine/sound/sopra/runtime/EventInstance.d.ts +55 -5
- package/src/engine/sound/sopra/runtime/EventInstance.d.ts.map +1 -1
- package/src/engine/sound/sopra/runtime/EventInstance.js +201 -26
- package/src/engine/sound/sopra/serialization/populateSopraSerializationRegistry.d.ts +2 -1
- package/src/engine/sound/sopra/serialization/populateSopraSerializationRegistry.d.ts.map +1 -1
- package/src/engine/sound/sopra/serialization/populateSopraSerializationRegistry.js +6 -1
- package/src/engine/sound/sopra/serialization/sopraSerializationHarness.d.ts +15 -0
- package/src/engine/sound/sopra/serialization/sopraSerializationHarness.d.ts.map +1 -1
- package/src/engine/sound/sopra/serialization/sopraSerializationHarness.js +32 -0
- package/src/engine/sound/sopra/util/MockAudioContext.d.ts.map +1 -1
- package/src/engine/sound/sopra/util/MockAudioContext.js +3 -0
- package/src/engine/sound/sopra/util/fadeOutAndStop.d.ts +13 -3
- package/src/engine/sound/sopra/util/fadeOutAndStop.d.ts.map +1 -1
- package/src/engine/sound/sopra/util/fadeOutAndStop.js +25 -13
- package/src/shade/RENDERER_CONTRACT.md +6 -3
- package/src/shade/device/SHADE_DEVICE_FLOOR.d.ts +24 -0
- package/src/shade/device/SHADE_DEVICE_FLOOR.d.ts.map +1 -0
- package/src/shade/device/SHADE_DEVICE_FLOOR.js +34 -0
- package/src/shade/device/ShadeDeviceFailure.d.ts +12 -5
- package/src/shade/device/ShadeDeviceFailure.d.ts.map +1 -1
- package/src/shade/device/ShadeDeviceFailure.js +17 -8
- package/src/shade/device/ShadeDeviceFailureReason.d.ts +1 -1
- package/src/shade/device/ShadeDeviceFailureReason.js +2 -2
- package/src/shade/device/shade_device_floor_unmet.d.ts +13 -0
- package/src/shade/device/shade_device_floor_unmet.d.ts.map +1 -0
- package/src/shade/device/shade_device_floor_unmet.js +32 -0
- package/src/shade/renderer/Renderer.d.ts +2 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +29 -55
- package/src/shade/renderer/buffer/GPUBufferAllocator.d.ts.map +1 -1
- package/src/shade/renderer/buffer/GPUBufferAllocator.js +9 -0
- package/src/shade/renderer/buffer/buffer_pool_ops.d.ts +21 -12
- package/src/shade/renderer/buffer/buffer_pool_ops.d.ts.map +1 -1
- package/src/shade/renderer/buffer/buffer_pool_ops.js +18 -19
- package/src/shade/renderer/gpu_primitive/test/gpu_test.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/test/gpu_test.js +8 -11
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/pool/TransientResourcePool.d.ts +24 -0
- package/src/shade/renderer/pool/TransientResourcePool.d.ts.map +1 -1
- package/src/shade/renderer/pool/TransientResourcePool.js +41 -10
- package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
- package/src/shade/renderer/shader/ComputeShader.js +18 -2
- package/src/shade/renderer/shader/ImageShader.d.ts.map +1 -1
- package/src/shade/renderer/shader/ImageShader.js +230 -218
- package/src/view/graphics/GraphicsContextFailureView.d.ts +1 -2
- package/src/view/graphics/GraphicsContextFailureView.d.ts.map +1 -1
- package/src/view/graphics/GraphicsContextFailureView.js +1 -2
- package/src/engine/network/transport/Channel.js +0 -336
- package/src/engine/network/transport/ReliableCommandPipeline.js +0 -335
- package/src/engine/network/transport/fragments/FragmentAssembler.js +0 -350
- package/src/engine/network/transport/fragments/FragmentRetention.js +0 -191
- package/src/engine/network/transport/fragments/fragment_send.js +0 -157
- package/src/engine/network/transport/fragments/packet_size.js +0 -107
|
@@ -9,9 +9,7 @@ export namespace NetworkPacketType {
|
|
|
9
9
|
let RECOVERY_REQUEST: number;
|
|
10
10
|
let STATE_BURST: number;
|
|
11
11
|
let AUTH_STATE: number;
|
|
12
|
-
let FRAGMENT: number;
|
|
13
12
|
let RELIABLE_COMMAND: number;
|
|
14
|
-
let NACK_FRAGMENT: number;
|
|
15
13
|
let TIME_DILATION: number;
|
|
16
14
|
let INITIAL_SYNC: number;
|
|
17
15
|
let RESUME_HELLO: number;
|
|
@@ -20,6 +18,21 @@ export namespace NetworkPacketType {
|
|
|
20
18
|
let DISCONNECT: number;
|
|
21
19
|
let FRAME_MARKER: number;
|
|
22
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Flags of an INITIAL_SYNC page.
|
|
23
|
+
*/
|
|
24
|
+
export type InitialSyncPage = number;
|
|
25
|
+
/**
|
|
26
|
+
* Flags of an INITIAL_SYNC page.
|
|
27
|
+
* @readonly
|
|
28
|
+
* @enum {number}
|
|
29
|
+
*/
|
|
30
|
+
export const InitialSyncPage: Readonly<{
|
|
31
|
+
/** The first page of a join: it issues the session token, and replaces the receiver's world. */
|
|
32
|
+
FIRST: 1;
|
|
33
|
+
/** The last page: every entity's state at its frame is now with the receiver. */
|
|
34
|
+
FINAL: 2;
|
|
35
|
+
}>;
|
|
23
36
|
/**
|
|
24
37
|
* Reason codes for {@link NetworkPacketType.RESUME_REJECT }.
|
|
25
38
|
*/
|
|
@@ -51,39 +64,20 @@ export const ResumeRejectReason: Readonly<{
|
|
|
51
64
|
*/
|
|
52
65
|
NoSessionToken: 5;
|
|
53
66
|
}>;
|
|
54
|
-
/**
|
|
55
|
-
* One outbound action-stream send, awaiting confirmation.
|
|
56
|
-
*
|
|
57
|
-
* A send occupies one transport seq when it fits the MTU and N consecutive
|
|
58
|
-
* seqs when it has to be fragmented. All of those seqs map to the SAME record:
|
|
59
|
-
* the receiver reassembles a fragmented message all-or-nothing, so the frame
|
|
60
|
-
* range is confirmed only when `unacked` reaches zero without `abandoned`
|
|
61
|
-
* having been set by a loss along the way.
|
|
62
|
-
*
|
|
63
|
-
* A tick may make several sends to one peer, each carrying the next slice of
|
|
64
|
-
* the owed range (see {@link NetworkPeer#flush_outbound}). They confirm
|
|
65
|
-
* independently, and the baseline advances only through slices confirmed in
|
|
66
|
-
* order — a later slice landing says nothing about an earlier one still in
|
|
67
|
-
* flight. `head` marks the first slice of a tick, whose start is the pack
|
|
68
|
-
* start itself; see {@link NetworkPeer#__credit_confirmed}.
|
|
69
|
-
*
|
|
70
|
-
* @typedef {{frame_start: number, frame_end: number, head: boolean, unacked: number, abandoned: boolean}} PendingAck
|
|
71
|
-
* @property {number} frame_start first frame in the packed range
|
|
72
|
-
* @property {number} frame_end last frame in the packed range
|
|
73
|
-
* @property {boolean} head this send began at the pack start, so nothing
|
|
74
|
-
* sendable lies before it and its confirmation credits outright
|
|
75
|
-
* @property {number} unacked seqs of this send not yet acked or declared lost
|
|
76
|
-
* @property {boolean} abandoned at least one seq was declared lost, so the
|
|
77
|
-
* message is forfeit and must never advance the baseline
|
|
78
|
-
*/
|
|
79
67
|
/**
|
|
80
68
|
* Per-tick orchestrator that wires the action infrastructure to one or more
|
|
81
69
|
* peers over a Transport.
|
|
82
70
|
*
|
|
83
71
|
* Holds a single world (`EntityComponentDataset`) plus the action machinery
|
|
84
72
|
* (executor, replicator, action log). For each connected peer it owns a
|
|
85
|
-
*
|
|
86
|
-
*
|
|
73
|
+
* {@link Connection} and the action-stream slices sent on it and not yet
|
|
74
|
+
* resolved ({@link PendingSlices}), so that their acknowledgements advance the
|
|
75
|
+
* `Baseline.last_acked(peer_id)` watermark.
|
|
76
|
+
*
|
|
77
|
+
* Every `send_*` queues; nothing reaches a transport until {@link send_queued}
|
|
78
|
+
* (or {@link flush_peer}), which {@link end_tick} calls last. One tick's
|
|
79
|
+
* traffic to a peer thereby leaves together, packed into as few datagrams as
|
|
80
|
+
* fit.
|
|
87
81
|
*
|
|
88
82
|
* Use as both server (many connected peers) and client (one peer = the server).
|
|
89
83
|
* The asymmetry is in *who* connects — the orchestrator itself is symmetric.
|
|
@@ -94,9 +88,9 @@ export const ResumeRejectReason: Readonly<{
|
|
|
94
88
|
* - `begin_tick(frame_number)` — open the action log for this frame.
|
|
95
89
|
* - User code runs game logic, calling `executor.execute(action)` for each
|
|
96
90
|
* replicated state mutation. Inbound actions from peers also flow into
|
|
97
|
-
* the executor automatically (via the
|
|
91
|
+
* the executor automatically (via the connection's onMessage wiring).
|
|
98
92
|
* - `end_tick()` — close the frame and dispatch outgoing packets to every peer.
|
|
99
|
-
* 3. `disconnect_peer(peer_id)` — release the
|
|
93
|
+
* 3. `disconnect_peer(peer_id)` — release the connection + baseline state.
|
|
100
94
|
*
|
|
101
95
|
* @author Alex Goldring
|
|
102
96
|
* @copyright Company Named Limited (c) 2026
|
|
@@ -115,9 +109,20 @@ export class NetworkPeer {
|
|
|
115
109
|
* mutation_ledger_retention_frames?: number,
|
|
116
110
|
* changed_set_capacity?: number,
|
|
117
111
|
* max_packets_per_tick?: number,
|
|
112
|
+
* clock: function(): number,
|
|
113
|
+
* tick_period_ms: number,
|
|
114
|
+
* send_rate_bytes_per_second?: number,
|
|
115
|
+
* max_message_bytes?: number,
|
|
116
|
+
* receive_window_bytes?: number,
|
|
117
|
+
* max_queued_bytes?: number,
|
|
118
118
|
* }} options
|
|
119
|
+
* `clock` returns milliseconds and never runs backwards: every network timer (loss, probe,
|
|
120
|
+
* pacing) runs on it, and nothing in the stack reads a clock of its own. `tick_period_ms` is
|
|
121
|
+
* how often this peer sends: the longest it sits on an acknowledgement, and the resolution
|
|
122
|
+
* of its timers. The remaining four configure every {@link Connection}; see there.
|
|
123
|
+
* `max_message_bytes` and `receive_window_bytes` must be the same on both ends.
|
|
119
124
|
*/
|
|
120
|
-
constructor({ world, binary_registry, replicated_components, action_classes, scope_filter, frame_capacity, initial_buffer_size, mutation_ledger, mutation_ledger_retention_frames, changed_set_capacity, max_packets_per_tick, }: {
|
|
125
|
+
constructor({ world, binary_registry, replicated_components, action_classes, scope_filter, frame_capacity, initial_buffer_size, mutation_ledger, mutation_ledger_retention_frames, changed_set_capacity, max_packets_per_tick, clock, tick_period_ms, send_rate_bytes_per_second, max_message_bytes, receive_window_bytes, max_queued_bytes, }: {
|
|
121
126
|
world: EntityComponentDataset;
|
|
122
127
|
binary_registry: BinarySerializationRegistry;
|
|
123
128
|
replicated_components: Function[];
|
|
@@ -131,6 +136,12 @@ export class NetworkPeer {
|
|
|
131
136
|
mutation_ledger_retention_frames?: number;
|
|
132
137
|
changed_set_capacity?: number;
|
|
133
138
|
max_packets_per_tick?: number;
|
|
139
|
+
clock: () => number;
|
|
140
|
+
tick_period_ms: number;
|
|
141
|
+
send_rate_bytes_per_second?: number;
|
|
142
|
+
max_message_bytes?: number;
|
|
143
|
+
receive_window_bytes?: number;
|
|
144
|
+
max_queued_bytes?: number;
|
|
134
145
|
});
|
|
135
146
|
/** @type {EntityComponentDataset} */
|
|
136
147
|
world: EntityComponentDataset;
|
|
@@ -153,17 +164,9 @@ export class NetworkPeer {
|
|
|
153
164
|
* fit one packet; past that the owed range grows until it meets the
|
|
154
165
|
* ring floor and frames are lost.
|
|
155
166
|
*
|
|
156
|
-
* It is also the bandwidth ceiling under catch-up — this many
|
|
157
|
-
* tick per peer
|
|
158
|
-
*
|
|
159
|
-
* replies once a tick, `33 / max_packets_per_tick` consecutive lost
|
|
160
|
-
* replies leave a delivered packet outside the window and it is
|
|
161
|
-
* declared lost: a wasted re-send rather than a defect, since the
|
|
162
|
-
* receiver skips frames it has already applied. Eight tolerates three
|
|
163
|
-
* such losses in a row (one tick in sixteen at 50% loss, one in ten
|
|
164
|
-
* thousand at 10%), and lets a 60 Hz stream at 100 ms RTT carry a full
|
|
165
|
-
* packet of actions per frame. Lower it for peers that reply less often
|
|
166
|
-
* than every tick.
|
|
167
|
+
* It is also the bandwidth ceiling under catch-up — this many datagrams
|
|
168
|
+
* of actions per tick per peer. Eight lets a 60 Hz stream at 100 ms RTT
|
|
169
|
+
* carry a full datagram of actions per frame.
|
|
167
170
|
*
|
|
168
171
|
* @type {number}
|
|
169
172
|
*/
|
|
@@ -203,6 +206,24 @@ export class NetworkPeer {
|
|
|
203
206
|
* @type {Signal}
|
|
204
207
|
*/
|
|
205
208
|
onMalformedPacket: Signal;
|
|
209
|
+
/**
|
|
210
|
+
* The connection to a peer is no longer whole: `(peer_id, reason)`. Its connection said so
|
|
211
|
+
* (Connection.onProtocolError: a reliable lane broke its limits and stopped, or the peer
|
|
212
|
+
* acknowledged a packet never sent), or more of the peer's action stream arrived during
|
|
213
|
+
* {@link hold_inbound} than may be held. Nothing more can be trusted to arrive whole on it:
|
|
214
|
+
* give the connection up.
|
|
215
|
+
* @type {Signal}
|
|
216
|
+
*/
|
|
217
|
+
onProtocolError: Signal;
|
|
218
|
+
/**
|
|
219
|
+
* An action-stream frame larger than any message the connection may carry
|
|
220
|
+
* (`max_message_bytes`) was given up rather than sent: `(peer_id, frame_start, frame_end,
|
|
221
|
+
* bytes)`. It can never be delivered, so it is stepped over — the peer never applies it —
|
|
222
|
+
* and the stream goes on behind it. Raise `max_message_bytes` on both ends for frames that
|
|
223
|
+
* large.
|
|
224
|
+
* @type {Signal}
|
|
225
|
+
*/
|
|
226
|
+
onFrameTooLarge: Signal;
|
|
206
227
|
/**
|
|
207
228
|
* Fired when an inbound packet is a `RECOVERY_REQUEST` (peer is asking
|
|
208
229
|
* which entities mutated in a tick range so it can request their state).
|
|
@@ -233,7 +254,8 @@ export class NetworkPeer {
|
|
|
233
254
|
onAuthState: Signal;
|
|
234
255
|
/**
|
|
235
256
|
* Fires on TIME_DILATION packet arrival.
|
|
236
|
-
* Args: `(peer_id, buffer_depth)` — signed int16
|
|
257
|
+
* Args: `(peer_id, buffer_depth, frame_number)` — signed int16, and the sender's sim frame
|
|
258
|
+
* as it sent it: the freshest word of where the host is, every tick.
|
|
237
259
|
* @type {Signal}
|
|
238
260
|
*/
|
|
239
261
|
onTimeDilationFeedback: Signal;
|
|
@@ -243,10 +265,11 @@ export class NetworkPeer {
|
|
|
243
265
|
*/
|
|
244
266
|
onFrameMarker: Signal;
|
|
245
267
|
/**
|
|
246
|
-
* Fires on INITIAL_SYNC
|
|
247
|
-
* Args: `(peer_id, session_token, frame_number, buffer, payload_end)`.
|
|
248
|
-
* `session_token` is a `Uint8Array(16)` (UUID v1 raw bytes);
|
|
249
|
-
* buffer is positioned at the
|
|
268
|
+
* Fires on each INITIAL_SYNC page.
|
|
269
|
+
* Args: `(peer_id, session_token, frame_number, flags, buffer, payload_end)`.
|
|
270
|
+
* `session_token` is a `Uint8Array(16)` (UUID v1 raw bytes); `flags`
|
|
271
|
+
* is {@link InitialSyncPage}; the buffer is positioned at the page's
|
|
272
|
+
* uint32 entity count.
|
|
250
273
|
* @type {Signal}
|
|
251
274
|
*/
|
|
252
275
|
onInitialSync: Signal;
|
|
@@ -282,7 +305,7 @@ export class NetworkPeer {
|
|
|
282
305
|
onDisconnectPacket: Signal;
|
|
283
306
|
/**
|
|
284
307
|
* Fired when a reliable command arrives from a peer (delivered via
|
|
285
|
-
*
|
|
308
|
+
* the connection's USER lane, once and in order).
|
|
286
309
|
*
|
|
287
310
|
* Args: `(peer_id, buffer, payload_offset, payload_length)`. The
|
|
288
311
|
* buffer is the per-peer scratch and may be reused after the handler
|
|
@@ -296,7 +319,7 @@ export class NetworkPeer {
|
|
|
296
319
|
*/
|
|
297
320
|
onReliableCommand: Signal;
|
|
298
321
|
/**
|
|
299
|
-
* Wire `transport` to the peer identified by `peer_id`. Creates a
|
|
322
|
+
* Wire `transport` to the peer identified by `peer_id`. Creates a Connection
|
|
300
323
|
* over the transport and connects ack/payload notifications to the local
|
|
301
324
|
* Baseline / Replicator.
|
|
302
325
|
*
|
|
@@ -308,7 +331,8 @@ export class NetworkPeer {
|
|
|
308
331
|
onReceive: any;
|
|
309
332
|
}): void;
|
|
310
333
|
/**
|
|
311
|
-
* Unwire and forget a peer.
|
|
334
|
+
* Unwire and forget a peer. Sends nothing: the transport may already be gone. To say a last
|
|
335
|
+
* word first — a DISCONNECT — queue it and call {@link flush_peer}.
|
|
312
336
|
* @param {number} peer_id
|
|
313
337
|
*/
|
|
314
338
|
disconnect_peer(peer_id: number): void;
|
|
@@ -335,22 +359,21 @@ export class NetworkPeer {
|
|
|
335
359
|
*/
|
|
336
360
|
inbound_count(peer_id: number): number;
|
|
337
361
|
/**
|
|
338
|
-
* Number of
|
|
362
|
+
* Number of action-stream slices sent to `peer_id` still awaiting an
|
|
339
363
|
* ack-or-lost verdict. Returns 0 for an unknown peer.
|
|
340
364
|
*
|
|
341
|
-
* Diagnostics: this
|
|
342
|
-
*
|
|
343
|
-
* value that only grows is a leak in the ack accounting.
|
|
365
|
+
* Diagnostics: this must fall back to 0 once a stream of acks has resolved
|
|
366
|
+
* everything sent. A value that only grows is a leak in the ack accounting.
|
|
344
367
|
* @param {number} peer_id
|
|
345
368
|
* @returns {number}
|
|
346
369
|
*/
|
|
347
370
|
pending_ack_count(peer_id: number): number;
|
|
348
371
|
/**
|
|
349
|
-
*
|
|
372
|
+
* A peer's connection, for diagnostics: round-trip time, statistics, what is in flight.
|
|
350
373
|
* @param {number} peer_id
|
|
351
|
-
* @returns {
|
|
374
|
+
* @returns {Connection|undefined}
|
|
352
375
|
*/
|
|
353
|
-
|
|
376
|
+
connection_for(peer_id: number): Connection | undefined;
|
|
354
377
|
/**
|
|
355
378
|
* Send `peer_id` nothing on the action stream until {@link release_outbound}. What the log
|
|
356
379
|
* records meanwhile stays owed, and goes out on release unless the release starts past it.
|
|
@@ -372,6 +395,28 @@ export class NetworkPeer {
|
|
|
372
395
|
* @param {number} [from_frame=0]
|
|
373
396
|
*/
|
|
374
397
|
release_outbound(peer_id: number, from_frame?: number): void;
|
|
398
|
+
/**
|
|
399
|
+
* Keep the action stream and AUTH_STATE that `peer_id` sends, unapplied, until
|
|
400
|
+
* {@link release_inbound}; everything else it sends is handled as ever.
|
|
401
|
+
*
|
|
402
|
+
* For a client being given a world in pages. The host releases its action stream from the frame
|
|
403
|
+
* after the last page, so the stream's datagrams can overtake the last pages on the way; what
|
|
404
|
+
* they carry is about entities the client may not hold yet. Held, they are applied after the
|
|
405
|
+
* world is complete, in the order they came.
|
|
406
|
+
*
|
|
407
|
+
* Held messages are copies, bounded by `max_queued_bytes`; past that the connection can no
|
|
408
|
+
* longer give the peer a whole stream, and says so on {@link onProtocolError}.
|
|
409
|
+
*
|
|
410
|
+
* @param {number} peer_id
|
|
411
|
+
*/
|
|
412
|
+
hold_inbound(peer_id: number): void;
|
|
413
|
+
/**
|
|
414
|
+
* Stop holding `peer_id`'s action stream and AUTH_STATE, and handle what was held, in the order
|
|
415
|
+
* it arrived.
|
|
416
|
+
*
|
|
417
|
+
* @param {number} peer_id
|
|
418
|
+
*/
|
|
419
|
+
release_inbound(peer_id: number): void;
|
|
375
420
|
/**
|
|
376
421
|
* Open the action log for `frame_number`. Call before running game logic
|
|
377
422
|
* for the tick. The user's code (or the engine's `EntityManager.simulate`)
|
|
@@ -382,15 +427,29 @@ export class NetworkPeer {
|
|
|
382
427
|
*/
|
|
383
428
|
begin_tick(frame_number: number): void;
|
|
384
429
|
/**
|
|
385
|
-
* Close the current tick
|
|
386
|
-
*
|
|
387
|
-
* and sends via the channel; records the seqs the send went out under so
|
|
388
|
-
* that acks for all of them advance the baseline.
|
|
389
|
-
*
|
|
390
|
-
* If a {@link MutationLedger} was supplied at construction, this tick's
|
|
391
|
-
* accumulated changed-entity set is also compacted into the ledger.
|
|
430
|
+
* Close the current tick, queue the action stream for every peer (see
|
|
431
|
+
* {@link flush_outbound}), and send everything queued ({@link send_queued}).
|
|
392
432
|
*/
|
|
393
433
|
end_tick(): void;
|
|
434
|
+
/**
|
|
435
|
+
* Send what is queued for every peer: one flush of each connection, packing the tick's
|
|
436
|
+
* messages into as few datagrams as fit, and running its loss and probe timers. Also sends a
|
|
437
|
+
* bare acknowledgement to a peer that has sent something since the last one.
|
|
438
|
+
*/
|
|
439
|
+
send_queued(): void;
|
|
440
|
+
/**
|
|
441
|
+
* Send what is queued for one peer now. For a last word before {@link disconnect_peer}:
|
|
442
|
+
* queue the DISCONNECT, flush, then disconnect.
|
|
443
|
+
* @param {number} peer_id
|
|
444
|
+
*/
|
|
445
|
+
flush_peer(peer_id: number): void;
|
|
446
|
+
/**
|
|
447
|
+
* The frame `network_id` was last changed by an action this peer executed or applied, or -1.
|
|
448
|
+
* Stamped at the end of each tick, by {@link flush_outbound}.
|
|
449
|
+
* @param {number} network_id
|
|
450
|
+
* @returns {number}
|
|
451
|
+
*/
|
|
452
|
+
last_changed_frame(network_id: number): number;
|
|
394
453
|
/**
|
|
395
454
|
* Pack and dispatch the outbound action stream for `current_frame` to
|
|
396
455
|
* every connected peer. Second half of {@link end_tick} — exposed
|
|
@@ -404,9 +463,12 @@ export class NetworkPeer {
|
|
|
404
463
|
* MutationLedger (if configured), then packs frames
|
|
405
464
|
* `[last_acked+1, current_frame]` for each peer via
|
|
406
465
|
* `Replicator.pack_for_peer` into up to {@link max_packets_per_tick}
|
|
407
|
-
*
|
|
408
|
-
*
|
|
409
|
-
*
|
|
466
|
+
* slices, each the next part of that range and one datagram at most; a
|
|
467
|
+
* frame too large for a datagram goes on {@link Lane.FRAMES}. Empty packs
|
|
468
|
+
* (no in-scope actions) are not sent. Stamps and clears the per-tick
|
|
469
|
+
* changed-entity set.
|
|
470
|
+
*
|
|
471
|
+
* Only queues: {@link send_queued} sends.
|
|
410
472
|
*
|
|
411
473
|
* @param {number} current_frame
|
|
412
474
|
*/
|
|
@@ -417,8 +479,7 @@ export class NetworkPeer {
|
|
|
417
479
|
* server-side handler ({@link onRecoveryRequest}) is expected to respond by
|
|
418
480
|
* calling {@link send_state_burst_for_range}.
|
|
419
481
|
*
|
|
420
|
-
*
|
|
421
|
-
* lost, the client is expected to retry.
|
|
482
|
+
* Reliable, on the CONTROL lane.
|
|
422
483
|
*
|
|
423
484
|
* @param {number} peer_id
|
|
424
485
|
* @param {number} start_tick
|
|
@@ -439,7 +500,7 @@ export class NetworkPeer {
|
|
|
439
500
|
* @param {number} start_tick
|
|
440
501
|
* @param {number} end_tick
|
|
441
502
|
*/
|
|
442
|
-
send_state_burst_for_range(peer_id: number, start_tick: number, end_tick: number):
|
|
503
|
+
send_state_burst_for_range(peer_id: number, start_tick: number, end_tick: number): any;
|
|
443
504
|
/**
|
|
444
505
|
* Send the authoritative state of one entity to `peer_id`, tagged with
|
|
445
506
|
* the frame the state represents. Used by client-side prediction: the
|
|
@@ -459,16 +520,18 @@ export class NetworkPeer {
|
|
|
459
520
|
*/
|
|
460
521
|
send_auth_state(peer_id: number, frame_number: number, network_id: number, write_fn: (arg0: BinaryBuffer) => void): void;
|
|
461
522
|
/**
|
|
462
|
-
*
|
|
463
|
-
*
|
|
464
|
-
* header and writes the Snapshotter payload. Fragments transparently.
|
|
523
|
+
* Queue one INITIAL_SYNC page on the BULK lane: the header, then `length` bytes of
|
|
524
|
+
* `entities` — a uint32 entity count and that many Snapshotter entity records.
|
|
465
525
|
*
|
|
466
526
|
* @param {number} peer_id
|
|
467
527
|
* @param {Uint8Array} session_token 16-byte UUID v1 identifying this peer-session
|
|
468
|
-
* @param {number} frame_number server sim frame
|
|
469
|
-
* @param {
|
|
528
|
+
* @param {number} frame_number server sim frame the page's state is from
|
|
529
|
+
* @param {number} flags {@link InitialSyncPage}
|
|
530
|
+
* @param {Uint8Array} entities
|
|
531
|
+
* @param {number} length
|
|
532
|
+
* @returns {number} delivery mark on {@link Lane.BULK}
|
|
470
533
|
*/
|
|
471
|
-
|
|
534
|
+
send_sync_page(peer_id: number, session_token: Uint8Array, frame_number: number, flags: number, entities: Uint8Array, length: number): number;
|
|
472
535
|
/**
|
|
473
536
|
* Send a RESUME_HELLO packet to the server. Client-only direction.
|
|
474
537
|
*
|
|
@@ -507,58 +570,34 @@ export class NetworkPeer {
|
|
|
507
570
|
*
|
|
508
571
|
* @param {number} peer_id
|
|
509
572
|
* @param {number} buffer_depth signed integer; clamped to int16
|
|
573
|
+
* @param {number} frame_number this side's sim frame
|
|
510
574
|
*/
|
|
511
|
-
send_time_dilation_feedback(peer_id: number, buffer_depth: number): void;
|
|
575
|
+
send_time_dilation_feedback(peer_id: number, buffer_depth: number, frame_number: number): void;
|
|
512
576
|
/**
|
|
513
577
|
* Tell a peer which frame this one has just finished simulating. See
|
|
514
578
|
* {@link NetworkPacketType.FRAME_MARKER}. Also serves as the tick's keep-alive: it advances the
|
|
515
|
-
*
|
|
579
|
+
* connection's acknowledgements like any message.
|
|
516
580
|
*
|
|
517
581
|
* @param {number} peer_id
|
|
518
582
|
* @param {number} frame_number
|
|
519
583
|
*/
|
|
520
584
|
send_frame_marker(peer_id: number, frame_number: number): void;
|
|
521
585
|
/**
|
|
522
|
-
*
|
|
523
|
-
*
|
|
524
|
-
*
|
|
525
|
-
*
|
|
526
|
-
*
|
|
527
|
-
*
|
|
528
|
-
* Returns the logical seq the pipeline assigned (diagnostic only; the
|
|
529
|
-
* receiver dedups internally regardless).
|
|
586
|
+
* Queue a reliable command for a connected peer, on the connection's USER
|
|
587
|
+
* lane: it arrives once, whole, and in order with the peer's other
|
|
588
|
+
* commands, unless the connection ends first. Up to the connection's
|
|
589
|
+
* `max_message_bytes` (less the type byte). Use for messages where the
|
|
590
|
+
* action-stream model (best-effort, per-frame back-fill) isn't suitable —
|
|
591
|
+
* chat, lobby/room state, level transitions.
|
|
530
592
|
*
|
|
531
593
|
* @param {number} peer_id
|
|
532
594
|
* @param {Uint8Array} payload
|
|
533
595
|
* @param {number} length
|
|
534
|
-
* @returns {number}
|
|
596
|
+
* @returns {number} delivery mark: see {@link Connection#is_delivered} with {@link Lane.USER}
|
|
535
597
|
*/
|
|
536
598
|
send_reliable_command(peer_id: number, payload: Uint8Array, length: number): number;
|
|
537
599
|
#private;
|
|
538
600
|
}
|
|
539
|
-
/**
|
|
540
|
-
* One outbound action-stream send, awaiting confirmation.
|
|
541
|
-
*
|
|
542
|
-
* A send occupies one transport seq when it fits the MTU and N consecutive
|
|
543
|
-
* seqs when it has to be fragmented. All of those seqs map to the SAME record:
|
|
544
|
-
* the receiver reassembles a fragmented message all-or-nothing, so the frame
|
|
545
|
-
* range is confirmed only when `unacked` reaches zero without `abandoned`
|
|
546
|
-
* having been set by a loss along the way.
|
|
547
|
-
*
|
|
548
|
-
* A tick may make several sends to one peer, each carrying the next slice of
|
|
549
|
-
* the owed range (see {@link NetworkPeerflush_outbound }). They confirm
|
|
550
|
-
* independently, and the baseline advances only through slices confirmed in
|
|
551
|
-
* order — a later slice landing says nothing about an earlier one still in
|
|
552
|
-
* flight. `head` marks the first slice of a tick, whose start is the pack
|
|
553
|
-
* start itself; see {@link NetworkPeer__credit_confirmed }.
|
|
554
|
-
*/
|
|
555
|
-
export type PendingAck = {
|
|
556
|
-
frame_start: number;
|
|
557
|
-
frame_end: number;
|
|
558
|
-
head: boolean;
|
|
559
|
-
unacked: number;
|
|
560
|
-
abandoned: boolean;
|
|
561
|
-
};
|
|
562
601
|
import { ReplicatedComponentRegistry } from "../sim/ReplicatedComponentRegistry.js";
|
|
563
602
|
import { SimActionRegistry } from "../sim/SimActionRegistry.js";
|
|
564
603
|
import { ReplicationSlotTable } from "../state/ReplicationSlotTable.js";
|
|
@@ -568,6 +607,6 @@ import { SimActionExecutor } from "../sim/SimActionExecutor.js";
|
|
|
568
607
|
import { Replicator } from "../replication/Replicator.js";
|
|
569
608
|
import { Baseline } from "../state/Baseline.js";
|
|
570
609
|
import Signal from "../../../core/events/signal/Signal.js";
|
|
571
|
-
import {
|
|
610
|
+
import { Connection } from "../transport/connection/Connection.js";
|
|
572
611
|
import { BinaryBuffer } from "../../../core/binary/BinaryBuffer.js";
|
|
573
612
|
//# sourceMappingURL=NetworkPeer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NetworkPeer.d.ts","sourceRoot":"","sources":["../../../../../src/engine/network/orchestrator/NetworkPeer.js"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"NetworkPeer.d.ts","sourceRoot":"","sources":["../../../../../src/engine/network/orchestrator/NetworkPeer.js"],"names":[],"mappings":"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"}
|