+4
-4
| { | ||
| "name": "mustate", | ||
| "version": "0.1.3", | ||
| "version": "0.2.0", | ||
| "description": "State replication for mudb", | ||
@@ -21,6 +21,6 @@ "main": "index.js", | ||
| "dependencies": { | ||
| "mudb": "0.2.2", | ||
| "muschema": "0.1.4", | ||
| "mustreams": "0.1.3" | ||
| "mudb": "0.2.3", | ||
| "muschema": "0.1.5", | ||
| "mustreams": "0.1.4" | ||
| } | ||
| } |
+3
-0
@@ -11,2 +11,3 @@ import { MuServer, MuRemoteClient } from 'mudb/server'; | ||
| constructor(client: MuRemoteClient<typeof MuDefaultStateSchema['client']>, schema: Schema, windowSize: number); | ||
| close(): void; | ||
| } | ||
@@ -21,2 +22,3 @@ export declare class MuServerState<Schema extends MuStateSchema<MuAnySchema, MuAnySchema>> implements MuStateReplica<Schema['server']> { | ||
| windowSize: number; | ||
| maxHistorySize: number; | ||
| private _protocol; | ||
@@ -28,2 +30,3 @@ private _observedStates; | ||
| windowSize?: number; | ||
| maxHistorySize?: number; | ||
| }); | ||
@@ -30,0 +33,0 @@ configure(spec?: { |
+18
-6
@@ -13,2 +13,5 @@ "use strict"; | ||
| } | ||
| MuRemoteClientState.prototype.close = function () { | ||
| this._client.close(); | ||
| }; | ||
| return MuRemoteClientState; | ||
@@ -34,2 +37,3 @@ }()); | ||
| this.windowSize = Infinity; | ||
| this.maxHistorySize = Infinity; | ||
| this._observedStates = []; | ||
@@ -41,2 +45,5 @@ this.server = spec.server; | ||
| } | ||
| if (typeof spec.maxHistorySize === 'number') { | ||
| this.maxHistorySize = spec.maxHistorySize; | ||
| } | ||
| this.state = this.schema.server.clone(this.schema.server.identity); | ||
@@ -82,2 +89,3 @@ this.history = new state_1.MuStateSet(this.schema.server.identity); | ||
| } | ||
| state_1.publishState(_this.schema.server, _this._observedStates, _this, client_.sendRaw, true); | ||
| }, | ||
@@ -98,14 +106,18 @@ disconnect: function (client_) { | ||
| var observedStates = this._observedStates; | ||
| var baseTick = state_1.publishState(this.schema.server, observedStates, this, this._protocol.broadcastRaw, !!reliable); | ||
| var mostRecentCommonTick = state_1.publishState(this.schema.server, observedStates, this, this._protocol.broadcastRaw, !!reliable); | ||
| for (var i = 0; i < observedStates.length; ++i) { | ||
| var observations = observedStates[i]; | ||
| var ticks = observedStates[i]; | ||
| if (this.tick - ticks[ticks.length - 1] >= this.maxHistorySize) { | ||
| this.clients[i].close(); | ||
| continue; | ||
| } | ||
| var ptr = 1; | ||
| while (ptr < observations.length && observations[ptr] < baseTick) { | ||
| while (ptr < ticks.length && ticks[ptr] < mostRecentCommonTick) { | ||
| ++ptr; | ||
| } | ||
| var optr = 1; | ||
| while (ptr < observations.length) { | ||
| observations[optr++] = observations[ptr++]; | ||
| while (ptr < ticks.length) { | ||
| ticks[optr++] = ticks[ptr++]; | ||
| } | ||
| observations.length = optr; | ||
| ticks.length = optr; | ||
| } | ||
@@ -112,0 +124,0 @@ }; |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"server.js","sourceRoot":"","sources":["src/server.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"server.js","sourceRoot":"","sources":["src/server.ts"],"names":[],"mappings":"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"} |
+36
-10
@@ -33,2 +33,6 @@ import { MuServer, MuServerProtocol, MuRemoteClient } from 'mudb/server'; | ||
| } | ||
| public close () { | ||
| this._client.close(); | ||
| } | ||
| } | ||
@@ -56,6 +60,7 @@ | ||
| // replica stuff | ||
| public tick:number = 0; | ||
| public tick = 0; | ||
| public state:Schema['server']['identity']; | ||
| public history:MuStateSet<Schema['server']['identity']>; | ||
| public windowSize:number = Infinity; | ||
| public windowSize = Infinity; | ||
| public maxHistorySize = Infinity; | ||
@@ -69,2 +74,3 @@ private _protocol:MuServerProtocol<typeof MuDefaultStateSchema>; | ||
| windowSize?:number, | ||
| maxHistorySize?:number, | ||
| }) { | ||
@@ -76,2 +82,5 @@ this.server = spec.server; | ||
| } | ||
| if (typeof spec.maxHistorySize === 'number') { | ||
| this.maxHistorySize = spec.maxHistorySize; | ||
| } | ||
| this.state = this.schema.server.clone(this.schema.server.identity); | ||
@@ -119,6 +128,14 @@ this.history = new MuStateSet(this.schema.server.identity); | ||
| this._observedStates.push([0]); | ||
| if (spec && spec.connect) { | ||
| spec.connect(client); | ||
| } | ||
| // TODO send initial state packet to client | ||
| publishState( | ||
| this.schema.server, | ||
| this._observedStates, | ||
| this, | ||
| client_.sendRaw, | ||
| true, | ||
| ); | ||
| }, | ||
@@ -140,3 +157,3 @@ disconnect: (client_) => { | ||
| const observedStates = this._observedStates; | ||
| const baseTick = publishState( | ||
| const mostRecentCommonTick = publishState( | ||
| this.schema.server, | ||
@@ -146,17 +163,26 @@ observedStates, | ||
| this._protocol.broadcastRaw, | ||
| !!reliable); | ||
| !!reliable, | ||
| ); | ||
| for (let i = 0; i < observedStates.length; ++i) { | ||
| const observations = observedStates[i]; | ||
| const ticks = observedStates[i]; | ||
| // kick client if the latest acked state is stale | ||
| if (this.tick - ticks[ticks.length - 1] >= this.maxHistorySize) { | ||
| this.clients[i].close(); | ||
| continue; | ||
| } | ||
| // remove ticks smaller than mostRecentCommonTick | ||
| let ptr = 1; | ||
| while (ptr < observations.length && observations[ptr] < baseTick) { | ||
| while (ptr < ticks.length && ticks[ptr] < mostRecentCommonTick) { | ||
| ++ptr; | ||
| } | ||
| let optr = 1; | ||
| while (ptr < observations.length) { | ||
| observations[optr++] = observations[ptr++]; | ||
| while (ptr < ticks.length) { | ||
| ticks[optr++] = ticks[ptr++]; | ||
| } | ||
| observations.length = optr; | ||
| ticks.length = optr; | ||
| } | ||
| } | ||
| } |
+12
-19
@@ -34,4 +34,2 @@ import { MuSchema } from 'muschema/schema'; | ||
| // search backwards for the index of the first tick that is | ||
| // less than or equal to `tick` | ||
| public at (tick:number) : number { | ||
@@ -55,4 +53,3 @@ // FIXME: replace with binary search | ||
| // store tick and state in history whill keeping all ticks in | ||
| // increasing order | ||
| // update history while keeping all ticks in increasing order | ||
| function pushState<State> (stateSet:MuStateSet<State>, tick:number, state:State) { | ||
@@ -74,3 +71,2 @@ const {ticks, states} = stateSet; | ||
| // pool and remove states from history | ||
| export function garbageCollectStates<State> (schema:MuSchema<State>, stateSet:MuStateSet<State>, horizon:number) : boolean { | ||
@@ -97,3 +93,2 @@ const { ticks, states } = stateSet; | ||
| const _heads:number[] = []; | ||
| // find the largest common tick of the tick sets | ||
| function mostRecentCommonState (tickSets:number[][]) : number { | ||
@@ -138,2 +133,3 @@ _pointers.length = tickSets.length; | ||
| } else { | ||
| ticks.splice(i + 1, 1); | ||
| break; | ||
@@ -144,3 +140,3 @@ } | ||
| // remove ticks that are below horizon, except the first one | ||
| // remove ticks that are below horizon while always keeping the 0-tick | ||
| export function forgetObservation (ticks:number[], horizon:number) { | ||
@@ -157,7 +153,6 @@ let pointer = 1; | ||
| // Returns false if | ||
| // 1. `nextTick` already in history | ||
| // 2. `baseTick` not in history | ||
| // 3. `nextTick` is less than the current tick | ||
| // Otherwise udpate current tick and state, then returns true. | ||
| // return false if | ||
| // `nextTick` already in history | ||
| // `baseTick` not in history | ||
| // `nextTick` is less than the current tick | ||
| export function parseState<Schema extends MuAnySchema> ( | ||
@@ -211,7 +206,2 @@ packet:Uint8Array, | ||
| // 1. find the largest common tick and use it as base tick | ||
| // 2. increment replica.tick | ||
| // 3. store new tick and state in history | ||
| // 4. send new tick, base tick, and patch to new state | ||
| // 5. pool and remove states from history | ||
| export function publishState<Schema extends MuAnySchema> ( | ||
@@ -240,9 +230,12 @@ schema:Schema, | ||
| stream.writeUint32(baseTick); | ||
| schema.diff(baseState, state, stream); | ||
| const contentBytes = stream.bytes(); | ||
| raw(contentBytes, !reliable); | ||
| stream.destroy(); | ||
| if (reliable) { | ||
| // ack state immediately | ||
| observations[observations.length - 1].push(nextTick); | ||
| } | ||
| const horizon = baseTick - windowSize - 1; | ||
@@ -249,0 +242,0 @@ garbageCollectStates(schema, history, horizon); |
+4
-0
@@ -106,2 +106,3 @@ "use strict"; | ||
| else { | ||
| ticks.splice(i + 1, 1); | ||
| break; | ||
@@ -175,2 +176,5 @@ } | ||
| stream.destroy(); | ||
| if (reliable) { | ||
| observations[observations.length - 1].push(nextTick); | ||
| } | ||
| var horizon = baseTick - windowSize - 1; | ||
@@ -177,0 +181,0 @@ garbageCollectStates(schema, history, horizon); |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"state.js","sourceRoot":"","sources":["src/state.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"state.js","sourceRoot":"","sources":["src/state.ts"],"names":[],"mappings":"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"} |
64190
2.66%1280
2.73%+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
Updated
Updated
Updated