@shipload/sdk 1.0.0-next.42 → 1.0.0-next.44
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/lib/shipload.d.ts +222 -172
- package/lib/shipload.js +658 -421
- package/lib/shipload.js.map +1 -1
- package/lib/shipload.m.js +644 -423
- package/lib/shipload.m.js.map +1 -1
- package/lib/testing.d.ts +50 -67
- package/lib/testing.js +168 -208
- package/lib/testing.js.map +1 -1
- package/lib/testing.m.js +169 -209
- package/lib/testing.m.js.map +1 -1
- package/package.json +1 -1
- package/src/contracts/server.ts +126 -214
- package/src/data/capabilities.ts +22 -14
- package/src/data/capability-formulas.ts +7 -7
- package/src/data/entities.json +4 -0
- package/src/data/item-ids.ts +1 -0
- package/src/data/items.json +6 -0
- package/src/data/kind-registry.json +18 -6
- package/src/data/kind-registry.ts +7 -0
- package/src/data/metadata.ts +22 -15
- package/src/data/recipes.json +147 -138
- package/src/derivation/build-methods.test.ts +13 -0
- package/src/derivation/build-methods.ts +5 -2
- package/src/derivation/capabilities.ts +8 -8
- package/src/derivation/capability-mappings.ts +49 -4
- package/src/index-module.ts +21 -1
- package/src/managers/actions.ts +42 -8
- package/src/managers/cluster.test.ts +39 -0
- package/src/managers/cluster.ts +53 -0
- package/src/managers/context.ts +9 -0
- package/src/managers/index.ts +2 -0
- package/src/nft/buildImmutableData.ts +15 -17
- package/src/nft/description.ts +8 -8
- package/src/resolution/describe-module.ts +6 -6
- package/src/resolution/resolve-item.ts +3 -3
- package/src/scheduling/unwrap.test.ts +60 -0
- package/src/scheduling/unwrap.ts +187 -0
- package/src/shipload.ts +5 -0
- package/src/subscriptions/manager.cluster.test.ts +46 -0
- package/src/subscriptions/manager.ts +22 -0
- package/src/subscriptions/types.ts +16 -0
- package/src/types.ts +7 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import {afterEach, describe, expect, test} from 'bun:test'
|
|
2
|
+
import {SubscriptionsManager} from './manager'
|
|
3
|
+
import type {ServerMessage} from './types'
|
|
4
|
+
|
|
5
|
+
function createManager(): SubscriptionsManager {
|
|
6
|
+
return new SubscriptionsManager({url: 'ws://localhost:0'})
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function deliver(mgr: SubscriptionsManager, msg: ServerMessage) {
|
|
10
|
+
;(mgr as unknown as {onMessage(m: ServerMessage): void}).onMessage(msg)
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
describe('cluster delta routing', () => {
|
|
14
|
+
let mgr: SubscriptionsManager | undefined
|
|
15
|
+
|
|
16
|
+
afterEach(() => {
|
|
17
|
+
mgr?.close()
|
|
18
|
+
mgr = undefined
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
test('routes a cluster frame to the matching entity subscription onCluster', () => {
|
|
22
|
+
mgr = createManager()
|
|
23
|
+
const received: unknown[] = []
|
|
24
|
+
const handle = mgr.subscribeEntity(42, {
|
|
25
|
+
onCluster: (p) => received.push(p),
|
|
26
|
+
})
|
|
27
|
+
deliver(mgr, {
|
|
28
|
+
type: 'cluster',
|
|
29
|
+
sub_id: handle.subId,
|
|
30
|
+
hub_id: 42,
|
|
31
|
+
seq: 7,
|
|
32
|
+
cells: [{gx: 0, gy: 1, entity: 99}],
|
|
33
|
+
})
|
|
34
|
+
expect(received).toEqual([
|
|
35
|
+
{hubId: 42, seq: 7, cells: [{gx: 0, gy: 1, entity: 99}], erased: false},
|
|
36
|
+
])
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
test('an erased cluster frame yields cells:null, erased:true', () => {
|
|
40
|
+
mgr = createManager()
|
|
41
|
+
const received: unknown[] = []
|
|
42
|
+
const handle = mgr.subscribeEntity(42, {onCluster: (p) => received.push(p)})
|
|
43
|
+
deliver(mgr, {type: 'cluster', sub_id: handle.subId, hub_id: 42, seq: 8, erased: true})
|
|
44
|
+
expect(received).toEqual([{hubId: 42, seq: 8, cells: null, erased: true}])
|
|
45
|
+
})
|
|
46
|
+
})
|
|
@@ -3,6 +3,8 @@ import type {
|
|
|
3
3
|
BoundingBox,
|
|
4
4
|
BoundsDeltaMessage,
|
|
5
5
|
ClientMessage,
|
|
6
|
+
ClusterCellWire,
|
|
7
|
+
ClusterDeltaMessage,
|
|
6
8
|
EntityDeletedMessage,
|
|
7
9
|
ServerMessage,
|
|
8
10
|
SnapshotMessage,
|
|
@@ -57,6 +59,12 @@ export interface EntitySubscriptionHandlers {
|
|
|
57
59
|
) => void
|
|
58
60
|
onDeleted?: (id: string, meta: EntitySubscriptionMeta) => void
|
|
59
61
|
onError?: (error: Error) => void
|
|
62
|
+
onCluster?: (payload: {
|
|
63
|
+
hubId: number
|
|
64
|
+
seq: number
|
|
65
|
+
cells: ClusterCellWire[] | null
|
|
66
|
+
erased: boolean
|
|
67
|
+
}) => void
|
|
60
68
|
}
|
|
61
69
|
|
|
62
70
|
export interface EntitiesSubscriptionHandle {
|
|
@@ -306,6 +314,9 @@ export class SubscriptionsManager {
|
|
|
306
314
|
case 'entity_deleted':
|
|
307
315
|
this.handleEntityDeleted(msg)
|
|
308
316
|
break
|
|
317
|
+
case 'cluster':
|
|
318
|
+
this.handleCluster(msg)
|
|
319
|
+
break
|
|
309
320
|
case 'error':
|
|
310
321
|
this.handleError(msg)
|
|
311
322
|
break
|
|
@@ -367,4 +378,15 @@ export class SubscriptionsManager {
|
|
|
367
378
|
}
|
|
368
379
|
sub.handlers.onDeleted?.(String(msg.entity_id), {seq: msg.seq})
|
|
369
380
|
}
|
|
381
|
+
|
|
382
|
+
private handleCluster(msg: ClusterDeltaMessage) {
|
|
383
|
+
const sub = this.entitySubs.get(msg.sub_id)
|
|
384
|
+
if (!sub) return
|
|
385
|
+
sub.handlers.onCluster?.({
|
|
386
|
+
hubId: msg.hub_id,
|
|
387
|
+
seq: msg.seq,
|
|
388
|
+
cells: msg.erased ? null : (msg.cells ?? []),
|
|
389
|
+
erased: msg.erased === true,
|
|
390
|
+
})
|
|
391
|
+
}
|
|
370
392
|
}
|
|
@@ -139,6 +139,21 @@ export type ErrorMessage = {
|
|
|
139
139
|
sub_id?: string
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
+
export interface ClusterCellWire {
|
|
143
|
+
gx: number
|
|
144
|
+
gy: number
|
|
145
|
+
entity: number
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
export type ClusterDeltaMessage = {
|
|
149
|
+
type: 'cluster'
|
|
150
|
+
sub_id: string
|
|
151
|
+
hub_id: number
|
|
152
|
+
seq: number
|
|
153
|
+
cells?: ClusterCellWire[]
|
|
154
|
+
erased?: boolean
|
|
155
|
+
}
|
|
156
|
+
|
|
142
157
|
export type ServerMessage =
|
|
143
158
|
| AckMessage
|
|
144
159
|
| SnapshotMessage
|
|
@@ -149,3 +164,4 @@ export type ServerMessage =
|
|
|
149
164
|
| EventCatchupCompleteMessage
|
|
150
165
|
| PongMessage
|
|
151
166
|
| ErrorMessage
|
|
167
|
+
| ClusterDeltaMessage
|
package/src/types.ts
CHANGED
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
type UInt32,
|
|
6
6
|
type UInt32Type,
|
|
7
7
|
UInt64,
|
|
8
|
+
type UInt64Type,
|
|
8
9
|
} from '@wharfkit/antelope'
|
|
9
10
|
import {ServerContract} from './contracts'
|
|
10
11
|
|
|
@@ -25,6 +26,12 @@ export const BASE_ORBITAL_MASS = 100000
|
|
|
25
26
|
export const MIN_TRANSFER_DISTANCE_PLANETARY_STRUCTURE = 100
|
|
26
27
|
export const MIN_TRANSFER_DISTANCE_ORBITAL_VESSEL = 200
|
|
27
28
|
|
|
29
|
+
export interface ClusterSlotType {
|
|
30
|
+
hub: UInt64Type
|
|
31
|
+
gx: number
|
|
32
|
+
gy: number
|
|
33
|
+
}
|
|
34
|
+
|
|
28
35
|
export interface ShipLike {
|
|
29
36
|
coordinates: ServerContract.Types.coordinates
|
|
30
37
|
hullmass?: UInt32
|