@replicast/core 0.1.2 → 1.0.0-rc.10
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/dist/decorators/entity.d.ts +43 -0
- package/dist/decorators/entity.d.ts.map +1 -0
- package/dist/decorators/entity.js +75 -0
- package/dist/decorators/entity.js.map +1 -0
- package/dist/decorators/index.d.ts +2 -0
- package/dist/decorators/index.d.ts.map +1 -1
- package/dist/decorators/index.js +1 -0
- package/dist/decorators/index.js.map +1 -1
- package/dist/decorators/metadata.d.ts +9 -6
- package/dist/decorators/metadata.d.ts.map +1 -1
- package/dist/decorators/metadata.js +20 -13
- package/dist/decorators/metadata.js.map +1 -1
- package/dist/decorators/store.d.ts +5 -8
- package/dist/decorators/store.d.ts.map +1 -1
- package/dist/decorators/store.js +10 -11
- package/dist/decorators/store.js.map +1 -1
- package/dist/decorators/system.d.ts +7 -10
- package/dist/decorators/system.d.ts.map +1 -1
- package/dist/decorators/system.js +15 -23
- package/dist/decorators/system.js.map +1 -1
- package/dist/entity/base-entity.d.ts +19 -0
- package/dist/entity/base-entity.d.ts.map +1 -0
- package/dist/entity/base-entity.js +18 -0
- package/dist/entity/base-entity.js.map +1 -0
- package/dist/entity/fields.d.ts +21 -0
- package/dist/entity/fields.d.ts.map +1 -0
- package/dist/entity/fields.js +67 -0
- package/dist/entity/fields.js.map +1 -0
- package/dist/entity/registry.d.ts +53 -0
- package/dist/entity/registry.d.ts.map +1 -0
- package/dist/entity/registry.js +167 -0
- package/dist/entity/registry.js.map +1 -0
- package/dist/entity/replicator.d.ts +40 -0
- package/dist/entity/replicator.d.ts.map +1 -0
- package/dist/entity/replicator.js +82 -0
- package/dist/entity/replicator.js.map +1 -0
- package/dist/entity/types.d.ts +29 -0
- package/dist/entity/types.d.ts.map +1 -0
- package/dist/entity/types.js +4 -0
- package/dist/entity/types.js.map +1 -0
- package/dist/entity/visibility.d.ts +11 -0
- package/dist/entity/visibility.d.ts.map +1 -0
- package/dist/entity/visibility.js +10 -0
- package/dist/entity/visibility.js.map +1 -0
- package/dist/entity/world.d.ts +67 -0
- package/dist/entity/world.d.ts.map +1 -0
- package/dist/entity/world.js +183 -0
- package/dist/entity/world.js.map +1 -0
- package/dist/index.d.ts +18 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/lifecycle/types.d.ts +2 -0
- package/dist/lifecycle/types.d.ts.map +1 -1
- package/dist/store/base-store.d.ts +24 -4
- package/dist/store/base-store.d.ts.map +1 -1
- package/dist/store/base-store.js +47 -20
- package/dist/store/base-store.js.map +1 -1
- package/dist/transport/app.d.ts +53 -0
- package/dist/transport/app.d.ts.map +1 -0
- package/dist/transport/app.js +53 -0
- package/dist/transport/app.js.map +1 -0
- package/dist/transport/client.d.ts +14 -1
- package/dist/transport/client.d.ts.map +1 -1
- package/dist/transport/client.js +58 -13
- package/dist/transport/client.js.map +1 -1
- package/dist/transport/codec.d.ts +7 -0
- package/dist/transport/codec.d.ts.map +1 -0
- package/dist/transport/codec.js +14 -0
- package/dist/transport/codec.js.map +1 -0
- package/dist/transport/context-browser.d.ts +6 -0
- package/dist/transport/context-browser.d.ts.map +1 -0
- package/dist/transport/context-browser.js +11 -0
- package/dist/transport/context-browser.js.map +1 -0
- package/dist/transport/context.d.ts +5 -0
- package/dist/transport/context.d.ts.map +1 -0
- package/dist/transport/context.js +9 -0
- package/dist/transport/context.js.map +1 -0
- package/dist/transport/protocol.d.ts +19 -1
- package/dist/transport/protocol.d.ts.map +1 -1
- package/dist/transport/protocol.js.map +1 -1
- package/dist/transport/server.d.ts +24 -1
- package/dist/transport/server.d.ts.map +1 -1
- package/dist/transport/server.js +188 -25
- package/dist/transport/server.js.map +1 -1
- package/dist/transport/ws-browser.d.ts +1 -1
- package/dist/transport/ws-browser.d.ts.map +1 -1
- package/dist/transport/ws-browser.js +1 -0
- package/dist/transport/ws-browser.js.map +1 -1
- package/package.json +10 -4
package/dist/transport/server.js
CHANGED
|
@@ -1,11 +1,30 @@
|
|
|
1
1
|
import { WebSocketServer, WebSocket } from 'ws';
|
|
2
2
|
import { getMethodRoles } from '../decorators/metadata.js';
|
|
3
|
+
import { contextStorage } from './context.js';
|
|
4
|
+
import { EntityWorld } from '../entity/world.js';
|
|
5
|
+
import { jsonCodec, msgpackCodec } from './codec.js';
|
|
3
6
|
const AUTH_TIMEOUT_MS = 10_000;
|
|
4
7
|
const KEEPALIVE_INTERVAL_MS = 30_000;
|
|
5
8
|
const MAX_CONCURRENT_RPC = 50;
|
|
9
|
+
const REPLICATION_HZ = 20;
|
|
10
|
+
const MAX_RPC_PER_SECOND = 30;
|
|
11
|
+
const MAX_ARGS_BYTES = 16_384;
|
|
12
|
+
// Coarse backstop against giant raw frames, independent of shape or content: `maxArgsBytes` below
|
|
13
|
+
// only measures the encoded `args` of a decoded `rpc` message, so a frame has to be fully received
|
|
14
|
+
// and parsed before that check ever runs. This cap makes `ws` reject an oversized frame outright
|
|
15
|
+
// (closing the connection) before it is even buffered, regardless of message type — including
|
|
16
|
+
// non-rpc or malformed traffic maxArgsBytes never sees. Kept deliberately far above maxArgsBytes'
|
|
17
|
+
// default (16KB) so it only ever fires on frames no legitimate client should send.
|
|
18
|
+
const MAX_MESSAGE_BYTES = 1_000_000;
|
|
6
19
|
export function createRPCServer(options) {
|
|
7
|
-
const { stores, systems, lifecycle, port, keepaliveInterval = KEEPALIVE_INTERVAL_MS, maxConcurrentRpc = MAX_CONCURRENT_RPC, } = options;
|
|
8
|
-
const
|
|
20
|
+
const { stores, systems, lifecycle, port, keepaliveInterval = KEEPALIVE_INTERVAL_MS, maxConcurrentRpc = MAX_CONCURRENT_RPC, maxRpcPerSecond = MAX_RPC_PER_SECOND, maxArgsBytes = MAX_ARGS_BYTES, encoding = 'json', tick, entities = [], replication, } = options;
|
|
21
|
+
const codec = encoding === 'msgpack' ? msgpackCodec : jsonCodec;
|
|
22
|
+
const wss = new WebSocketServer({ port, maxPayload: MAX_MESSAGE_BYTES });
|
|
23
|
+
/** Size, in bytes, of `value` encoded with the connection's own codec (json or msgpack). */
|
|
24
|
+
function encodedByteLength(value) {
|
|
25
|
+
const encoded = codec.encode(value);
|
|
26
|
+
return typeof encoded === 'string' ? Buffer.byteLength(encoded, 'utf8') : encoded.byteLength;
|
|
27
|
+
}
|
|
9
28
|
let actualPort = port;
|
|
10
29
|
let resolveReady;
|
|
11
30
|
const ready = new Promise(resolve => { resolveReady = resolve; });
|
|
@@ -25,18 +44,88 @@ export function createRPCServer(options) {
|
|
|
25
44
|
}
|
|
26
45
|
}, keepaliveInterval);
|
|
27
46
|
const connections = new Map();
|
|
47
|
+
/**
|
|
48
|
+
* Per-player @Server call rate limit (system and entity-scoped alike), keyed by playerId rather
|
|
49
|
+
* than by connection — a fresh reconnect must not hand out a fresh full bucket, or the limit is
|
|
50
|
+
* trivially bypassed by disconnecting and reconnecting. Never removed on disconnect, deliberately:
|
|
51
|
+
* removing it would restore the bypass for anyone who reconnects. Same lifetime tradeoff BaseStore
|
|
52
|
+
* already makes for per-player owner data (also never cleared on disconnect) — bounded by how many
|
|
53
|
+
* distinct playerIds the app's own auth hands out, not something replicast can scope down further.
|
|
54
|
+
*/
|
|
55
|
+
const rpcBuckets = new Map();
|
|
56
|
+
function takeRpcToken(playerId) {
|
|
57
|
+
let bucket = rpcBuckets.get(playerId);
|
|
58
|
+
if (!bucket) {
|
|
59
|
+
bucket = { tokens: maxRpcPerSecond, lastRefill: Date.now() };
|
|
60
|
+
rpcBuckets.set(playerId, bucket);
|
|
61
|
+
}
|
|
62
|
+
const now = Date.now();
|
|
63
|
+
const elapsedSec = (now - bucket.lastRefill) / 1000;
|
|
64
|
+
if (elapsedSec > 0) {
|
|
65
|
+
bucket.tokens = Math.min(maxRpcPerSecond, bucket.tokens + elapsedSec * maxRpcPerSecond);
|
|
66
|
+
bucket.lastRefill = now;
|
|
67
|
+
}
|
|
68
|
+
if (bucket.tokens < 1)
|
|
69
|
+
return false;
|
|
70
|
+
bucket.tokens -= 1;
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
28
73
|
const methods = new Map();
|
|
29
|
-
for (const system of systems) {
|
|
74
|
+
for (const system of Object.values(systems)) {
|
|
30
75
|
const proto = Object.getPrototypeOf(system);
|
|
31
|
-
|
|
76
|
+
// Prefer the name stamped by @replicast/vite-plugin; constructor.name is unreliable after bundling/minification.
|
|
77
|
+
const className = proto.constructor.__replicastName ?? proto.constructor.name;
|
|
32
78
|
const roles = getMethodRoles(proto);
|
|
33
79
|
for (const [methodName, role] of Object.entries(roles)) {
|
|
34
80
|
if (role === 'server') {
|
|
35
81
|
const key = `${className}.${methodName}`;
|
|
36
|
-
methods.set(key, (ctx, ...args) =>
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
82
|
+
methods.set(key, (ctx, ...args) => contextStorage.run(ctx, () => system[methodName](...args)));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function pushToClient(targetId, method, args) {
|
|
87
|
+
const target = connections.get(targetId);
|
|
88
|
+
if (target?.readyState === WebSocket.OPEN) {
|
|
89
|
+
target.send(codec.encode({ type: 'rpc', method, args }));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const world = new EntityWorld({
|
|
93
|
+
types: entities,
|
|
94
|
+
transport: {
|
|
95
|
+
sendRpc(playerId, id, method, args) {
|
|
96
|
+
const target = connections.get(playerId);
|
|
97
|
+
if (target?.readyState === WebSocket.OPEN) {
|
|
98
|
+
target.send(codec.encode({ type: 'entity_rpc', id, method, args }));
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
sendSync(playerId, sync) {
|
|
102
|
+
const target = connections.get(playerId);
|
|
103
|
+
if (target?.readyState === WebSocket.OPEN) {
|
|
104
|
+
target.send(codec.encode({ type: 'entity_sync', ...sync }));
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
players: () => [...connections.keys()],
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
// Runtime dispatch: on the server, calling a @Client / @Multicast method sends it to clients.
|
|
111
|
+
// This makes the server independent of the Vite transform (plain tsx/node works), and lets
|
|
112
|
+
// tick loops and lifecycle hooks call them like any other method.
|
|
113
|
+
for (const system of Object.values(systems)) {
|
|
114
|
+
const proto = Object.getPrototypeOf(system);
|
|
115
|
+
const className = proto.constructor.__replicastName ?? proto.constructor.name;
|
|
116
|
+
for (const [methodName, role] of Object.entries(getMethodRoles(proto))) {
|
|
117
|
+
const key = `${className}.${methodName}`;
|
|
118
|
+
if (role === 'client') {
|
|
119
|
+
Object.defineProperty(system, methodName, {
|
|
120
|
+
value: (targetId, ...args) => { pushToClient(targetId, key, args); },
|
|
121
|
+
configurable: true, writable: true,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
else if (role === 'multicast') {
|
|
125
|
+
Object.defineProperty(system, methodName, {
|
|
126
|
+
value: (...args) => { for (const pid of connections.keys())
|
|
127
|
+
pushToClient(pid, key, args); },
|
|
128
|
+
configurable: true, writable: true,
|
|
40
129
|
});
|
|
41
130
|
}
|
|
42
131
|
}
|
|
@@ -45,7 +134,7 @@ export function createRPCServer(options) {
|
|
|
45
134
|
instance._onReplication = (batch) => {
|
|
46
135
|
if (batch.globalSeq > 0) {
|
|
47
136
|
const msg = { type: 'state_patch', store: name, scope: 'global', seq: batch.globalSeq, patch: batch.global };
|
|
48
|
-
const raw =
|
|
137
|
+
const raw = codec.encode(msg);
|
|
49
138
|
for (const ws of connections.values()) {
|
|
50
139
|
if (ws.readyState === WebSocket.OPEN)
|
|
51
140
|
ws.send(raw);
|
|
@@ -54,7 +143,7 @@ export function createRPCServer(options) {
|
|
|
54
143
|
for (const [playerId, { seq, patch }] of batch.ownerByPlayer) {
|
|
55
144
|
const ws = connections.get(playerId);
|
|
56
145
|
if (ws?.readyState === WebSocket.OPEN) {
|
|
57
|
-
ws.send(
|
|
146
|
+
ws.send(codec.encode({ type: 'state_patch', store: name, scope: 'owner', seq, patch }));
|
|
58
147
|
}
|
|
59
148
|
}
|
|
60
149
|
};
|
|
@@ -64,6 +153,9 @@ export function createRPCServer(options) {
|
|
|
64
153
|
ws._isAlive = true;
|
|
65
154
|
ws.on('pong', () => { ws._isAlive = true; });
|
|
66
155
|
ws.on('message', () => { ws._isAlive = true; });
|
|
156
|
+
// `ws` emits 'error' (e.g. maxPayload exceeded) and closes the socket itself; without a listener
|
|
157
|
+
// here that error event is unhandled and crashes the process — swallow it, 'close' does the cleanup.
|
|
158
|
+
ws.on('error', () => { });
|
|
67
159
|
const authTimeout = setTimeout(() => ws.close(), AUTH_TIMEOUT_MS);
|
|
68
160
|
ws.once('message', async (raw) => {
|
|
69
161
|
// Fix 1: declare playerId in outer scope so catch can clean up
|
|
@@ -96,20 +188,16 @@ export function createRPCServer(options) {
|
|
|
96
188
|
// Use a const-typed alias after the null-guard for use in closures
|
|
97
189
|
const pid = playerId;
|
|
98
190
|
connections.set(pid, ws);
|
|
99
|
-
ws.send(JSON.stringify({ type: 'connected', playerId: pid, storeCount: stores.length }));
|
|
191
|
+
ws.send(JSON.stringify({ type: 'connected', playerId: pid, storeCount: stores.length, encoding }));
|
|
100
192
|
for (const { name, instance } of stores) {
|
|
101
193
|
const snapshot = instance.getSnapshot(pid);
|
|
102
|
-
ws.send(
|
|
194
|
+
ws.send(codec.encode({ type: 'state_init', store: name, snapshot }));
|
|
103
195
|
}
|
|
104
196
|
const ctx = {
|
|
105
197
|
playerId: pid,
|
|
106
198
|
get players() { return [...connections.keys()]; },
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
if (target?.readyState === WebSocket.OPEN) {
|
|
110
|
-
target.send(JSON.stringify({ type: 'rpc', method, args }));
|
|
111
|
-
}
|
|
112
|
-
},
|
|
199
|
+
get serverTime() { return Date.now(); },
|
|
200
|
+
sendToClient(targetId, method, ...args) { pushToClient(targetId, method, args); },
|
|
113
201
|
};
|
|
114
202
|
// Fix 2: register RPC and close handlers BEFORE awaiting onPlayerJoined
|
|
115
203
|
let inFlight = 0;
|
|
@@ -117,33 +205,44 @@ export function createRPCServer(options) {
|
|
|
117
205
|
ws.on('message', async (raw) => {
|
|
118
206
|
let msg;
|
|
119
207
|
try {
|
|
120
|
-
msg =
|
|
208
|
+
msg = codec.decode(raw);
|
|
121
209
|
}
|
|
122
210
|
catch {
|
|
123
211
|
return;
|
|
124
212
|
}
|
|
125
213
|
if (msg.type === 'ping') {
|
|
126
|
-
ws.send(
|
|
214
|
+
ws.send(codec.encode({ type: 'pong', id: msg.id }));
|
|
127
215
|
return;
|
|
128
216
|
}
|
|
129
217
|
if (msg.type !== 'rpc')
|
|
130
218
|
return;
|
|
219
|
+
if (!takeRpcToken(pid)) {
|
|
220
|
+
ws.send(codec.encode({ type: 'rpc_result', id: msg.id, error: 'rate_limited' }));
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
if (encodedByteLength(msg.args) > maxArgsBytes) {
|
|
224
|
+
ws.send(codec.encode({ type: 'rpc_result', id: msg.id, error: 'args_too_large' }));
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
131
227
|
if (inFlight >= maxConcurrentRpc) {
|
|
132
|
-
ws.send(
|
|
228
|
+
ws.send(codec.encode({ type: 'rpc_result', id: msg.id, error: 'Too many concurrent requests' }));
|
|
133
229
|
return;
|
|
134
230
|
}
|
|
135
|
-
|
|
231
|
+
// Entity-scoped calls carry the target entity id; the world authorises the caller.
|
|
232
|
+
const handler = msg.entityId !== undefined
|
|
233
|
+
? (c, ...args) => contextStorage.run(c, () => world.invoke(pid, msg.entityId, msg.method, args))
|
|
234
|
+
: methods.get(msg.method);
|
|
136
235
|
if (!handler) {
|
|
137
|
-
ws.send(
|
|
236
|
+
ws.send(codec.encode({ type: 'rpc_result', id: msg.id, error: `Unknown method: ${msg.method}` }));
|
|
138
237
|
return;
|
|
139
238
|
}
|
|
140
239
|
inFlight++;
|
|
141
240
|
try {
|
|
142
241
|
const result = await handler(ctx, ...msg.args);
|
|
143
|
-
ws.send(
|
|
242
|
+
ws.send(codec.encode({ type: 'rpc_result', id: msg.id, result }));
|
|
144
243
|
}
|
|
145
244
|
catch (err) {
|
|
146
|
-
ws.send(
|
|
245
|
+
ws.send(codec.encode({
|
|
147
246
|
type: 'rpc_result',
|
|
148
247
|
id: msg.id,
|
|
149
248
|
error: err instanceof Error ? err.message : String(err),
|
|
@@ -159,10 +258,15 @@ export function createRPCServer(options) {
|
|
|
159
258
|
// Fix 3: guard against reconnect overwriting the map entry
|
|
160
259
|
if (connections.get(pid) === ws)
|
|
161
260
|
connections.delete(pid);
|
|
261
|
+
world.dropViewer(pid);
|
|
162
262
|
await lifecycle.onPlayerLeft(ctx);
|
|
163
263
|
});
|
|
164
264
|
await lifecycle.onPlayerJoined(ctx);
|
|
165
265
|
joined = true;
|
|
266
|
+
// Send the initial entity set now rather than waiting for the next replication tick,
|
|
267
|
+
// so entities spawned in onPlayerJoined arrive with the connection.
|
|
268
|
+
if (entities.length > 0)
|
|
269
|
+
world.flush();
|
|
166
270
|
}
|
|
167
271
|
catch (err) {
|
|
168
272
|
// Fix 1: on any error (e.g. onPlayerJoined throw), clean up connection and close
|
|
@@ -172,15 +276,74 @@ export function createRPCServer(options) {
|
|
|
172
276
|
}
|
|
173
277
|
});
|
|
174
278
|
});
|
|
279
|
+
let tickTimer;
|
|
280
|
+
if (tick) {
|
|
281
|
+
const dt = 1 / tick.hz;
|
|
282
|
+
const tickCtx = {
|
|
283
|
+
playerId: '',
|
|
284
|
+
get players() { return [...connections.keys()]; },
|
|
285
|
+
get serverTime() { return Date.now(); },
|
|
286
|
+
sendToClient(targetId, method, ...args) { pushToClient(targetId, method, args); },
|
|
287
|
+
};
|
|
288
|
+
let running = false;
|
|
289
|
+
tickTimer = setInterval(() => {
|
|
290
|
+
if (running)
|
|
291
|
+
return; // skip if the previous async tick hasn't finished
|
|
292
|
+
running = true;
|
|
293
|
+
Promise.resolve()
|
|
294
|
+
// Entity @ServerTick methods run first, so onTick sees the stepped world.
|
|
295
|
+
.then(() => contextStorage.run(tickCtx, () => { world.tick(dt); return tick.onTick(dt); }))
|
|
296
|
+
.catch(err => { console.error('[replicast] tick error:', err); })
|
|
297
|
+
.finally(() => { running = false; });
|
|
298
|
+
}, 1000 / tick.hz);
|
|
299
|
+
}
|
|
300
|
+
// Replication runs on its own clock so snapshots can be slower than the sim (e.g. 30/15).
|
|
301
|
+
// Entities and stores share this one cadence — BaseStore no longer self-schedules via
|
|
302
|
+
// process.nextTick() (see BaseStore.flush()); the server drives every registered store's
|
|
303
|
+
// flush() here, once per tick, right alongside the entity world's flush().
|
|
304
|
+
let replicationTimer;
|
|
305
|
+
if (entities.length > 0 || stores.length > 0) {
|
|
306
|
+
const replicationCtx = {
|
|
307
|
+
playerId: '',
|
|
308
|
+
get players() { return [...connections.keys()]; },
|
|
309
|
+
get serverTime() { return Date.now(); },
|
|
310
|
+
sendToClient(targetId, method, ...args) { pushToClient(targetId, method, args); },
|
|
311
|
+
};
|
|
312
|
+
replicationTimer = setInterval(() => {
|
|
313
|
+
contextStorage.run(replicationCtx, () => {
|
|
314
|
+
if (entities.length > 0) {
|
|
315
|
+
try {
|
|
316
|
+
world.flush();
|
|
317
|
+
}
|
|
318
|
+
catch (err) {
|
|
319
|
+
console.error('[replicast] replication flush error:', err);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
for (const { instance } of stores) {
|
|
323
|
+
try {
|
|
324
|
+
instance.flush();
|
|
325
|
+
}
|
|
326
|
+
catch (err) {
|
|
327
|
+
console.error('[replicast] store replication flush error:', err);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
}, 1000 / (replication?.hz ?? REPLICATION_HZ));
|
|
332
|
+
}
|
|
175
333
|
let closed = false;
|
|
176
334
|
return {
|
|
177
335
|
ready,
|
|
336
|
+
world,
|
|
178
337
|
get port() { return actualPort; },
|
|
179
338
|
close: () => {
|
|
180
339
|
if (closed)
|
|
181
340
|
return Promise.resolve();
|
|
182
341
|
closed = true;
|
|
183
342
|
clearInterval(keepaliveTimer);
|
|
343
|
+
if (tickTimer)
|
|
344
|
+
clearInterval(tickTimer);
|
|
345
|
+
if (replicationTimer)
|
|
346
|
+
clearInterval(replicationTimer);
|
|
184
347
|
// Fix 4: null out store replication callbacks
|
|
185
348
|
for (const { instance } of stores) {
|
|
186
349
|
instance._onReplication = undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/transport/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/transport/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ export default class BrowserWebSocket {
|
|
|
10
10
|
private _emit;
|
|
11
11
|
on(event: string, handler: (...args: unknown[]) => void): this;
|
|
12
12
|
once(event: string, handler: (...args: unknown[]) => void): this;
|
|
13
|
-
send(data: string): void;
|
|
13
|
+
send(data: string | Uint8Array): void;
|
|
14
14
|
close(): void;
|
|
15
15
|
}
|
|
16
16
|
//# sourceMappingURL=ws-browser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-browser.d.ts","sourceRoot":"","sources":["../../src/transport/ws-browser.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACnC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,CAAC,CAAS;IACjC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAG,CAAC,CAAS;IAEnC,QAAQ,CAAC,IAAI,EAAG,CAAC,CAAS;IAC1B,QAAQ,CAAC,MAAM,EAAG,CAAC,CAAS;IAE5B,OAAO,CAAC,GAAG,CAAW;IACtB,OAAO,CAAC,SAAS,CAA2D;IAE5E,IAAI,UAAU,WAEb;gBAEW,GAAG,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"ws-browser.d.ts","sourceRoot":"","sources":["../../src/transport/ws-browser.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACnC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,CAAC,CAAS;IACjC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAG,CAAC,CAAS;IAEnC,QAAQ,CAAC,IAAI,EAAG,CAAC,CAAS;IAC1B,QAAQ,CAAC,MAAM,EAAG,CAAC,CAAS;IAE5B,OAAO,CAAC,GAAG,CAAW;IACtB,OAAO,CAAC,SAAS,CAA2D;IAE5E,IAAI,UAAU,WAEb;gBAEW,GAAG,EAAE,MAAM;IASvB,OAAO,CAAC,KAAK;IAOb,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI;IAM9D,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI;IAYhE,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAIrC,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -13,6 +13,7 @@ export default class BrowserWebSocket {
|
|
|
13
13
|
}
|
|
14
14
|
constructor(url) {
|
|
15
15
|
this._ws = new WebSocket(url);
|
|
16
|
+
this._ws.binaryType = 'arraybuffer';
|
|
16
17
|
this._ws.addEventListener('open', () => this._emit('open'));
|
|
17
18
|
this._ws.addEventListener('message', (e) => this._emit('message', e.data));
|
|
18
19
|
this._ws.addEventListener('close', () => this._emit('close'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-browser.js","sourceRoot":"","sources":["../../src/transport/ws-browser.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAE3B,2DAA2D;AAC3D,8EAA8E;AAC9E,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACnC,MAAM,CAAU,IAAI,GAAG,CAAU,CAAA;IACjC,MAAM,CAAU,MAAM,GAAG,CAAU,CAAA;IAE1B,IAAI,GAAG,CAAU,CAAA;IACjB,MAAM,GAAG,CAAU,CAAA;IAEpB,GAAG,CAAW;IACd,SAAS,GAAkD,IAAI,GAAG,EAAE,CAAA;IAE5E,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAA;IAC5B,CAAC;IAED,YAAY,GAAW;QACrB,IAAI,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAA;QAC7B,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;QAC3D,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QAC1E,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;QAC7D,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;IACnE,CAAC;IAEO,KAAK,CAAC,KAAa,EAAE,GAAG,IAAe;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAC1C,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;gBAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC;IAED,EAAE,CAAC,KAAa,EAAE,OAAqC;QACrD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QAC7D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACxC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC,KAAa,EAAE,OAAqC;QACvD,MAAM,OAAO,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACtC,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;gBACjC,IAAI,GAAG,KAAK,CAAC,CAAC;oBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;YACrC,CAAC;YACD,OAAO,CAAC,GAAG,IAAI,CAAC,CAAA;QAClB,CAAC,CAAA;QACD,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IAChC,CAAC;IAED,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"ws-browser.js","sourceRoot":"","sources":["../../src/transport/ws-browser.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAE3B,2DAA2D;AAC3D,8EAA8E;AAC9E,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACnC,MAAM,CAAU,IAAI,GAAG,CAAU,CAAA;IACjC,MAAM,CAAU,MAAM,GAAG,CAAU,CAAA;IAE1B,IAAI,GAAG,CAAU,CAAA;IACjB,MAAM,GAAG,CAAU,CAAA;IAEpB,GAAG,CAAW;IACd,SAAS,GAAkD,IAAI,GAAG,EAAE,CAAA;IAE5E,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAA;IAC5B,CAAC;IAED,YAAY,GAAW;QACrB,IAAI,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAA;QAC7B,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,aAAa,CAAA;QACnC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;QAC3D,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QAC1E,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;QAC7D,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;IACnE,CAAC;IAEO,KAAK,CAAC,KAAa,EAAE,GAAG,IAAe;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAC1C,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;gBAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC;IAED,EAAE,CAAC,KAAa,EAAE,OAAqC;QACrD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QAC7D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACxC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC,KAAa,EAAE,OAAqC;QACvD,MAAM,OAAO,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACtC,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;gBACjC,IAAI,GAAG,KAAK,CAAC,CAAC;oBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;YACrC,CAAC;YACD,OAAO,CAAC,GAAG,IAAI,CAAC,CAAA;QAClB,CAAC,CAAA;QACD,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IAChC,CAAC;IAED,IAAI,CAAC,IAAyB;QAC5B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACrB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAA;IAClB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,21 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@replicast/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0-rc.10",
|
|
4
4
|
"description": "TypeScript RPC and state-replication framework for multiplayer games",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./dist/index.js",
|
|
8
8
|
"types": "./dist/index.d.ts",
|
|
9
|
-
"files": [
|
|
9
|
+
"files": [
|
|
10
|
+
"dist"
|
|
11
|
+
],
|
|
12
|
+
"publishConfig": {
|
|
13
|
+
"access": "public"
|
|
14
|
+
},
|
|
10
15
|
"browser": {
|
|
11
|
-
"./dist/transport/ws-node.js": "./dist/transport/ws-browser.js"
|
|
16
|
+
"./dist/transport/ws-node.js": "./dist/transport/ws-browser.js",
|
|
17
|
+
"./dist/transport/context.js": "./dist/transport/context-browser.js"
|
|
12
18
|
},
|
|
13
19
|
"scripts": {
|
|
14
20
|
"build": "tsc -p tsconfig.build.json",
|
|
15
21
|
"test": "vitest run"
|
|
16
22
|
},
|
|
17
23
|
"dependencies": {
|
|
18
|
-
"
|
|
24
|
+
"msgpackr": "^2.0.4",
|
|
19
25
|
"uuid": "^10.0.0",
|
|
20
26
|
"ws": "^8.18.0"
|
|
21
27
|
},
|