@dcl/sdk 7.4.4 → 7.4.5-8055633679.commit-2c5f6a7
Sign up to get free protection for your applications and to get access to all the features.
- package/composite-provider.js +3 -1
- package/ecs.d.ts +15 -0
- package/ecs.js +16 -1
- package/ethereum-provider/index.d.ts +19 -0
- package/ethereum-provider/index.js +20 -1
- package/ethereum-provider/text-encoder.js +2 -1
- package/index.js +9 -1
- package/internal/Observable.d.ts +157 -1
- package/internal/Observable.js +140 -2
- package/internal/provider.js +2 -1
- package/internal/transports/rendererTransport.js +7 -2
- package/math.d.ts +12 -0
- package/math.js +13 -1
- package/message-bus.d.ts +4 -0
- package/message-bus.js +6 -1
- package/network/entities.js +29 -1
- package/network/filter.js +5 -1
- package/network/index.js +2 -1
- package/network/message-bus-sync.js +18 -1
- package/network/state.js +2 -1
- package/network/utils.d.ts +15 -0
- package/network/utils.js +49 -1
- package/observables.d.ts +205 -0
- package/observables.js +68 -1
- package/package.json +6 -6
- package/players/index.d.ts +3 -0
- package/players/index.js +6 -1
- package/react-ecs.d.ts +18 -0
- package/react-ecs.js +19 -1
- package/src/ethereum-provider/index.ts +4 -0
- package/src/internal/Observable.ts +3 -0
- package/testing/assert.js +21 -1
- package/testing/index.d.ts +5 -0
- package/testing/index.js +9 -3
- package/testing/runtime.d.ts +3 -0
- package/testing/runtime.js +30 -1
- package/testing/types.d.ts +5 -0
- package/tsconfig.json +2 -1
package/network/entities.js
CHANGED
@@ -4,23 +4,38 @@ export function entityUtils(engine, profile) {
|
|
4
4
|
const NetworkParent = engine.getComponent(_NetworkParent.componentId);
|
5
5
|
const Transform = engine.getComponent(_Transform.componentId);
|
6
6
|
const SyncComponents = engine.getComponent(_SyncComponents.componentId);
|
7
|
+
/**
|
8
|
+
* Create a network entity (sync) through comms, and sync the received components
|
9
|
+
*/
|
7
10
|
function syncEntity(entityId, componentIds, entityEnumId) {
|
11
|
+
// Profile not initialized
|
8
12
|
if (!profile?.networkId) {
|
9
13
|
throw new Error('Profile not initialized. Called syncEntity inside the main() function.');
|
10
14
|
}
|
15
|
+
// We use the networkId generated by the user address to identify this entity through the network
|
11
16
|
const networkValue = { entityId, networkId: profile.networkId };
|
17
|
+
// If there is an entityEnumId, it means is the same entity for all the clients created on the main funciton.
|
18
|
+
// So the networkId should be the same in all the clients to avoid re-creating this entity.
|
19
|
+
// For this case we use networkId = 0.
|
12
20
|
if (entityEnumId !== undefined) {
|
13
21
|
networkValue.networkId = 0;
|
14
22
|
networkValue.entityId = entityEnumId;
|
23
|
+
// Check if this enum is already used
|
15
24
|
for (const [_, network] of engine.getEntitiesWith(NetworkEntity)) {
|
16
25
|
if (network.networkId === networkValue.networkId && network.entityId === networkValue.entityId) {
|
17
26
|
throw new Error('syncEntity failed because the id provided is already in use');
|
18
27
|
}
|
19
28
|
}
|
20
29
|
}
|
30
|
+
// If is not defined, then is a entity created in runtime (what we called dynamic/runtime entities).
|
21
31
|
NetworkEntity.createOrReplace(entityId, networkValue);
|
22
32
|
SyncComponents.createOrReplace(entityId, { componentIds });
|
23
33
|
}
|
34
|
+
/**
|
35
|
+
* Returns an iterable of all the childrens of the given entity.
|
36
|
+
* for (const children of getChildren(parent)) { console.log(children) }
|
37
|
+
* or just => const childrens: Entity[] = Array.from(getChildren(parent))
|
38
|
+
*/
|
24
39
|
function* getChildren(parent) {
|
25
40
|
const network = NetworkEntity.getOrNull(parent);
|
26
41
|
if (network) {
|
@@ -34,6 +49,9 @@ export function entityUtils(engine, profile) {
|
|
34
49
|
function getFirstChild(entity) {
|
35
50
|
return Array.from(getChildren(entity))[0];
|
36
51
|
}
|
52
|
+
/**
|
53
|
+
* Returns the parent entity of the given entity.
|
54
|
+
*/
|
37
55
|
function getParent(child) {
|
38
56
|
const parent = NetworkParent.getOrNull(child);
|
39
57
|
if (!parent)
|
@@ -45,19 +63,29 @@ export function entityUtils(engine, profile) {
|
|
45
63
|
}
|
46
64
|
return undefined;
|
47
65
|
}
|
66
|
+
/**
|
67
|
+
* Adds the network parenting to sync entities.
|
68
|
+
* Equivalent to Transform.parent for local entities
|
69
|
+
*/
|
48
70
|
function parentEntity(entity, parent) {
|
49
71
|
const network = NetworkEntity.getOrNull(parent);
|
50
72
|
if (!network) {
|
51
73
|
throw new Error('Entity is not sync. Call syncEntity on the parent.');
|
52
74
|
}
|
75
|
+
// Create network parent component
|
53
76
|
NetworkParent.createOrReplace(entity, network);
|
77
|
+
// If we dont have a transform for this entity, create an empty one to send it to the renderer
|
54
78
|
if (!Transform.getOrNull(entity)) {
|
55
79
|
Transform.create(entity);
|
56
80
|
}
|
57
81
|
else {
|
82
|
+
// We force to send a tick update of the transform so we can send the NEW parent to the renderer
|
58
83
|
Transform.getMutable(entity);
|
59
84
|
}
|
60
85
|
}
|
86
|
+
/**
|
87
|
+
* Removes the network parenting from an entity
|
88
|
+
*/
|
61
89
|
function removeParent(entity) {
|
62
90
|
const network = NetworkEntity.getOrNull(entity);
|
63
91
|
if (!network) {
|
@@ -74,4 +102,4 @@ export function entityUtils(engine, profile) {
|
|
74
102
|
getFirstChild
|
75
103
|
};
|
76
104
|
}
|
77
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXRpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbmV0d29yay9lbnRpdGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsYUFBYSxJQUFJLGNBQWMsRUFFL0IsYUFBYSxJQUFJLGNBQWMsRUFDL0IsU0FBUyxJQUFJLFVBQVUsRUFDdkIsY0FBYyxJQUFJLGVBQWUsRUFJbEMsTUFBTSxVQUFVLENBQUE7QUFLakIsTUFBTSxVQUFVLFdBQVcsQ0FBQyxNQUFlLEVBQUUsT0FBaUI7SUFDNUQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFtQixDQUFBO0lBQ3ZGLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBbUIsQ0FBQTtJQUN2RixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQXVCLENBQUE7SUFDbkYsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFvQixDQUFBO0lBSzFGLFNBQVMsVUFBVSxDQUFDLFFBQWdCLEVBQUUsWUFBc0IsRUFBRSxZQUFxQjtRQUVqRixJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRTtZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLHdFQUF3RSxDQUFDLENBQUE7U0FDMUY7UUFHRCxNQUFNLFlBQVksR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFBO1FBSy9ELElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRTtZQUM5QixZQUFZLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQTtZQUMxQixZQUFZLENBQUMsUUFBUSxHQUFHLFlBQXNCLENBQUE7WUFHOUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FB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e1xuICBFbnRpdHksXG4gIElFbmdpbmUsXG4gIE5ldHdvcmtFbnRpdHkgYXMgX05ldHdvcmtFbnRpdHksXG4gIElOZXRvd3JrRW50aXR5LFxuICBOZXR3b3JrUGFyZW50IGFzIF9OZXR3b3JrUGFyZW50LFxuICBUcmFuc2Zvcm0gYXMgX1RyYW5zZm9ybSxcbiAgU3luY0NvbXBvbmVudHMgYXMgX1N5bmNDb21wb25lbnRzLFxuICBJTmV0b3dya1BhcmVudCxcbiAgVHJhbnNmb3JtQ29tcG9uZW50LFxuICBJU3luY0NvbXBvbmVudHNcbn0gZnJvbSAnQGRjbC9lY3MnXG5pbXBvcnQgeyBJUHJvZmlsZSB9IGZyb20gJy4vbWVzc2FnZS1idXMtc3luYydcblxuZXhwb3J0IHR5cGUgU3luY0VudGl0eSA9IChlbnRpdHlJZDogRW50aXR5LCBjb21wb25lbnRJZHM6IG51bWJlcltdLCBlbnRpdHlFbnVtSWQ/OiBudW1iZXIpID0+IHZvaWRcblxuZXhwb3J0IGZ1bmN0aW9uIGVudGl0eVV0aWxzKGVuZ2luZTogSUVuZ2luZSwgcHJvZmlsZTogSVByb2ZpbGUpIHtcbiAgY29uc3QgTmV0d29ya0VudGl0eSA9IGVuZ2luZS5nZXRDb21wb25lbnQoX05ldHdvcmtFbnRpdHkuY29tcG9uZW50SWQpIGFzIElOZXRvd3JrRW50aXR5XG4gIGNvbnN0IE5ldHdvcmtQYXJlbnQgPSBlbmdpbmUuZ2V0Q29tcG9uZW50KF9OZXR3b3JrUGFyZW50LmNvbXBvbmVudElkKSBhcyBJTmV0b3dya1BhcmVudFxuICBjb25zdCBUcmFuc2Zvcm0gPSBlbmdpbmUuZ2V0Q29tcG9uZW50KF9UcmFuc2Zvcm0uY29tcG9uZW50SWQpIGFzIFRyYW5zZm9ybUNvbXBvbmVudFxuICBjb25zdCBTeW5jQ29tcG9uZW50cyA9IGVuZ2luZS5nZXRDb21wb25lbnQoX1N5bmNDb21wb25lbnRzLmNvbXBvbmVudElkKSBhcyBJU3luY0NvbXBvbmVudHNcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV0d29yayBlbnRpdHkgKHN5bmMpIHRocm91Z2ggY29tbXMsIGFuZCBzeW5jIHRoZSByZWNlaXZlZCBjb21wb25lbnRzXG4gICAqL1xuICBmdW5jdGlvbiBzeW5jRW50aXR5KGVudGl0eUlkOiBFbnRpdHksIGNvbXBvbmVudElkczogbnVtYmVyW10sIGVudGl0eUVudW1JZD86IG51bWJlcikge1xuICAgIC8vIFByb2ZpbGUgbm90IGluaXRpYWxpemVkXG4gICAgaWYgKCFwcm9maWxlPy5uZXR3b3JrSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUHJvZmlsZSBub3QgaW5pdGlhbGl6ZWQuIENhbGxlZCBzeW5jRW50aXR5IGluc2lkZSB0aGUgbWFpbigpIGZ1bmN0aW9uLicpXG4gICAgfVxuXG4gICAgLy8gV2UgdXNlIHRoZSBuZXR3b3JrSWQgZ2VuZXJhdGVkIGJ5IHRoZSB1c2VyIGFkZHJlc3MgdG8gaWRlbnRpZnkgdGhpcyBlbnRpdHkgdGhyb3VnaCB0aGUgbmV0d29ya1xuICAgIGNvbnN0IG5ldHdvcmtWYWx1ZSA9IHsgZW50aXR5SWQsIG5ldHdvcmtJZDogcHJvZmlsZS5uZXR3b3JrSWQgfVxuXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gZW50aXR5RW51bUlkLCBpdCBtZWFucyBpcyB0aGUgc2FtZSBlbnRpdHkgZm9yIGFsbCB0aGUgY2xpZW50cyBjcmVhdGVkIG9uIHRoZSBtYWluIGZ1bmNpdG9uLlxuICAgIC8vIFNvIHRoZSBuZXR3b3JrSWQgc2hvdWxkIGJlIHRoZSBzYW1lIGluIGFsbCB0aGUgY2xpZW50cyB0byBhdm9pZCByZS1jcmVhdGluZyB0aGlzIGVudGl0eS5cbiAgICAvLyBGb3IgdGhpcyBjYXNlIHdlIHVzZSBuZXR3b3JrSWQgPSAwLlxuICAgIGlmIChlbnRpdHlFbnVtSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbmV0d29ya1ZhbHVlLm5ldHdvcmtJZCA9IDBcbiAgICAgIG5ldHdvcmtWYWx1ZS5lbnRpdHlJZCA9IGVudGl0eUVudW1JZCBhcyBFbnRpdHlcblxuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBlbnVtIGlzIGFscmVhZHkgdXNlZFxuICAgICAgZm9yIChjb25zdCBbXywgbmV0d29ya10gb2YgZW5naW5lLmdldEVudGl0aWVzV2l0aChOZXR3b3JrRW50aXR5KSkge1xuICAgICAgICBpZiAobmV0d29yay5uZXR3b3JrSWQgPT09IG5ldHdvcmtWYWx1ZS5uZXR3b3JrSWQgJiYgbmV0d29yay5lbnRpdHlJZCA9PT0gbmV0d29ya1ZhbHVlLmVudGl0eUlkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzeW5jRW50aXR5IGZhaWxlZCBiZWNhdXNlIHRoZSBpZCBwcm92aWRlZCBpcyBhbHJlYWR5IGluIHVzZScpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiBpcyBub3QgZGVmaW5lZCwgdGhlbiBpcyBhIGVudGl0eSBjcmVhdGVkIGluIHJ1bnRpbWUgKHdoYXQgd2UgY2FsbGVkIGR5bmFtaWMvcnVudGltZSBlbnRpdGllcykuXG4gICAgTmV0d29ya0VudGl0eS5jcmVhdGVPclJlcGxhY2UoZW50aXR5SWQsIG5ldHdvcmtWYWx1ZSlcbiAgICBTeW5jQ29tcG9uZW50cy5jcmVhdGVPclJlcGxhY2UoZW50aXR5SWQsIHsgY29tcG9uZW50SWRzIH0pXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBpdGVyYWJsZSBvZiBhbGwgdGhlIGNoaWxkcmVucyBvZiB0aGUgZ2l2ZW4gZW50aXR5LlxuICAgKiBmb3IgKGNvbnN0IGNoaWxkcmVuIG9mIGdldENoaWxkcmVuKHBhcmVudCkpIHsgY29uc29sZS5sb2coY2hpbGRyZW4pIH1cbiAgICogb3IganVzdCA9PiBjb25zdCBjaGlsZHJlbnM6IEVudGl0eVtdID0gQXJyYXkuZnJvbShnZXRDaGlsZHJlbihwYXJlbnQpKVxuICAgKi9cbiAgZnVuY3Rpb24qIGdldENoaWxkcmVuKHBhcmVudDogRW50aXR5KTogSXRlcmFibGU8RW50aXR5PiB7XG4gICAgY29uc3QgbmV0d29yayA9IE5ldHdvcmtFbnRpdHkuZ2V0T3JOdWxsKHBhcmVudClcbiAgICBpZiAobmV0d29yaykge1xuICAgICAgZm9yIChjb25zdCBbZW50aXR5LCBwYXJlbnRdIG9mIGVuZ2luZS5nZXRFbnRpdGllc1dpdGgoTmV0d29ya1BhcmVudCkpIHtcbiAgICAgICAgaWYgKHBhcmVudC5lbnRpdHlJZCA9PT0gbmV0d29yay5lbnRpdHlJZCAmJiBwYXJlbnQubmV0d29ya0lkID09PSBuZXR3b3JrLm5ldHdvcmtJZCkge1xuICAgICAgICAgIHlpZWxkIGVudGl0eVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Rmlyc3RDaGlsZChlbnRpdHk6IEVudGl0eSkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKGdldENoaWxkcmVuKGVudGl0eSkpWzBdXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcGFyZW50IGVudGl0eSBvZiB0aGUgZ2l2ZW4gZW50aXR5LlxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0UGFyZW50KGNoaWxkOiBFbnRpdHkpOiBFbnRpdHkgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHBhcmVudCA9IE5ldHdvcmtQYXJlbnQuZ2V0T3JOdWxsKGNoaWxkKVxuICAgIGlmICghcGFyZW50KSByZXR1cm4gdW5kZWZpbmVkXG4gICAgZm9yIChjb25zdCBbZW50aXR5LCBuZXR3b3JrXSBvZiBlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKE5ldHdvcmtFbnRpdHkpKSB7XG4gICAgICBpZiAocGFyZW50Lm5ldHdvcmtJZCA9PT0gbmV0d29yay5uZXR3b3JrSWQgJiYgcGFyZW50LmVudGl0eUlkID09PSBuZXR3b3JrLmVudGl0eUlkKSB7XG4gICAgICAgIHJldHVybiBlbnRpdHlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgdGhlIG5ldHdvcmsgcGFyZW50aW5nIHRvIHN5bmMgZW50aXRpZXMuXG4gICAqIEVxdWl2YWxlbnQgdG8gVHJhbnNmb3JtLnBhcmVudCBmb3IgbG9jYWwgZW50aXRpZXNcbiAgICovXG4gIGZ1bmN0aW9uIHBhcmVudEVudGl0eShlbnRpdHk6IEVudGl0eSwgcGFyZW50OiBFbnRpdHkpIHtcbiAgICBjb25zdCBuZXR3b3JrID0gTmV0d29ya0VudGl0eS5nZXRPck51bGwocGFyZW50KVxuICAgIGlmICghbmV0d29yaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbnRpdHkgaXMgbm90IHN5bmMuIENhbGwgc3luY0VudGl0eSBvbiB0aGUgcGFyZW50LicpXG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIG5ldHdvcmsgcGFyZW50IGNvbXBvbmVudFxuICAgIE5ldHdvcmtQYXJlbnQuY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwgbmV0d29yaylcblxuICAgIC8vIElmIHdlIGRvbnQgaGF2ZSBhIHRyYW5zZm9ybSBmb3IgdGhpcyBlbnRpdHksIGNyZWF0ZSBhbiBlbXB0eSBvbmUgdG8gc2VuZCBpdCB0byB0aGUgcmVuZGVyZXJcbiAgICBpZiAoIVRyYW5zZm9ybS5nZXRPck51bGwoZW50aXR5KSkge1xuICAgICAgVHJhbnNmb3JtLmNyZWF0ZShlbnRpdHkpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFdlIGZvcmNlIHRvIHNlbmQgYSB0aWNrIHVwZGF0ZSBvZiB0aGUgdHJhbnNmb3JtIHNvIHdlIGNhbiBzZW5kIHRoZSBORVcgcGFyZW50IHRvIHRoZSByZW5kZXJlclxuICAgICAgVHJhbnNmb3JtLmdldE11dGFibGUoZW50aXR5KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBuZXR3b3JrIHBhcmVudGluZyBmcm9tIGFuIGVudGl0eVxuICAgKi9cbiAgZnVuY3Rpb24gcmVtb3ZlUGFyZW50KGVudGl0eTogRW50aXR5KSB7XG4gICAgY29uc3QgbmV0d29yayA9IE5ldHdvcmtFbnRpdHkuZ2V0T3JOdWxsKGVudGl0eSlcblxuICAgIGlmICghbmV0d29yaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbnRpdHkgaXMgbm90IHN5bmMnKVxuICAgIH1cblxuICAgIE5ldHdvcmtQYXJlbnQuZGVsZXRlRnJvbShlbnRpdHkpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN5bmNFbnRpdHksXG4gICAgZ2V0Q2hpbGRyZW4sXG4gICAgZ2V0UGFyZW50LFxuICAgIHBhcmVudEVudGl0eSxcbiAgICByZW1vdmVQYXJlbnQsXG4gICAgZ2V0Rmlyc3RDaGlsZFxuICB9XG59XG4iXX0=
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXRpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbmV0d29yay9lbnRpdGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsYUFBYSxJQUFJLGNBQWMsRUFFL0IsYUFBYSxJQUFJLGNBQWMsRUFDL0IsU0FBUyxJQUFJLFVBQVUsRUFDdkIsY0FBYyxJQUFJLGVBQWUsRUFJbEMsTUFBTSxVQUFVLENBQUE7QUFLakIsTUFBTSxVQUFVLFdBQVcsQ0FBQyxNQUFlLEVBQUUsT0FBaUI7SUFDNUQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFtQixDQUFBO0lBQ3ZGLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBbUIsQ0FBQTtJQUN2RixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQXVCLENBQUE7SUFDbkYsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFvQixDQUFBO0lBRTFGOztPQUVHO0lBQ0gsU0FBUyxVQUFVLENBQUMsUUFBZ0IsRUFBRSxZQUFzQixFQUFFLFlBQXFCO1FBQ2pGLDBCQUEwQjtRQUMxQixJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRTtZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLHdFQUF3RSxDQUFDLENBQUE7U0FDMUY7UUFFRCxpR0FBaUc7UUFDakcsTUFBTSxZQUFZLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUUvRCw2R0FBNkc7UUFDN0csMkZBQTJGO1FBQzNGLHNDQUFzQztRQUN0QyxJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUU7WUFDOUIsWUFBWSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUE7WUFDMUIsWUFBWSxDQUFD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QW9CLENBQUMsQ0FBQTtTQUN0QztRQUVELGFBQWEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVELE9BQU87UUFDTCxVQUFVO1FBQ1YsV0FBVztRQUNYLFNBQVM7UUFDVCxZQUFZO1FBQ1osWUFBWTtRQUNaLGFBQWE7S0FDZCxDQUFBO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEVudGl0eSxcbiAgSUVuZ2luZSxcbiAgTmV0d29ya0VudGl0eSBhcyBfTmV0d29ya0VudGl0eSxcbiAgSU5ldG93cmtFbnRpdHksXG4gIE5ldHdvcmtQYXJlbnQgYXMgX05ldHdvcmtQYXJlbnQsXG4gIFRyYW5zZm9ybSBhcyBfVHJhbnNmb3JtLFxuICBTeW5jQ29tcG9uZW50cyBhcyBfU3luY0NvbXBvbmVudHMsXG4gIElOZXRvd3JrUGFyZW50LFxuICBUcmFuc2Zvcm1Db21wb25lbnQsXG4gIElTeW5jQ29tcG9uZW50c1xufSBmcm9tICdAZGNsL2VjcydcbmltcG9ydCB7IElQcm9maWxlIH0gZnJvbSAnLi9tZXNzYWdlLWJ1cy1zeW5jJ1xuXG5leHBvcnQgdHlwZSBTeW5jRW50aXR5ID0gKGVudGl0eUlkOiBFbnRpdHksIGNvbXBvbmVudElkczogbnVtYmVyW10sIGVudGl0eUVudW1JZD86IG51bWJlcikgPT4gdm9pZFxuXG5leHBvcnQgZnVuY3Rpb24gZW50aXR5VXRpbHMoZW5naW5lOiBJRW5naW5lLCBwcm9maWxlOiBJUHJvZmlsZSkge1xuICBjb25zdCBOZXR3b3JrRW50aXR5ID0gZW5naW5lLmdldENvbXBvbmVudChfTmV0d29ya0VudGl0eS5jb21wb25lbnRJZCkgYXMgSU5ldG93cmtFbnRpdHlcbiAgY29uc3QgTmV0d29ya1BhcmVudCA9IGVuZ2luZS5nZXRDb21wb25lbnQoX05ldHdvcmtQYXJlbnQuY29tcG9uZW50SWQpIGFzIElOZXRvd3JrUGFyZW50XG4gIGNvbnN0IFRyYW5zZm9ybSA9IGVuZ2luZS5nZXRDb21wb25lbnQoX1RyYW5zZm9ybS5jb21wb25lbnRJZCkgYXMgVHJhbnNmb3JtQ29tcG9uZW50XG4gIGNvbnN0IFN5bmNDb21wb25lbnRzID0gZW5naW5lLmdldENvbXBvbmVudChfU3luY0NvbXBvbmVudHMuY29tcG9uZW50SWQpIGFzIElTeW5jQ29tcG9uZW50c1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXR3b3JrIGVudGl0eSAoc3luYykgdGhyb3VnaCBjb21tcywgYW5kIHN5bmMgdGhlIHJlY2VpdmVkIGNvbXBvbmVudHNcbiAgICovXG4gIGZ1bmN0aW9uIHN5bmNFbnRpdHkoZW50aXR5SWQ6IEVudGl0eSwgY29tcG9uZW50SWRzOiBudW1iZXJbXSwgZW50aXR5RW51bUlkPzogbnVtYmVyKSB7XG4gICAgLy8gUHJvZmlsZSBub3QgaW5pdGlhbGl6ZWRcbiAgICBpZiAoIXByb2ZpbGU/Lm5ldHdvcmtJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9maWxlIG5vdCBpbml0aWFsaXplZC4gQ2FsbGVkIHN5bmNFbnRpdHkgaW5zaWRlIHRoZSBtYWluKCkgZnVuY3Rpb24uJylcbiAgICB9XG5cbiAgICAvLyBXZSB1c2UgdGhlIG5ldHdvcmtJZCBnZW5lcmF0ZWQgYnkgdGhlIHVzZXIgYWRkcmVzcyB0byBpZGVudGlmeSB0aGlzIGVudGl0eSB0aHJvdWdoIHRoZSBuZXR3b3JrXG4gICAgY29uc3QgbmV0d29ya1ZhbHVlID0geyBlbnRpdHlJZCwgbmV0d29ya0lkOiBwcm9maWxlLm5ldHdvcmtJZCB9XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBlbnRpdHlFbnVtSWQsIGl0IG1lYW5zIGlzIHRoZSBzYW1lIGVudGl0eSBmb3IgYWxsIHRoZSBjbGllbnRzIGNyZWF0ZWQgb24gdGhlIG1haW4gZnVuY2l0b24uXG4gICAgLy8gU28gdGhlIG5ldHdvcmtJZCBzaG91bGQgYmUgdGhlIHNhbWUgaW4gYWxsIHRoZSBjbGllbnRzIHRvIGF2b2lkIHJlLWNyZWF0aW5nIHRoaXMgZW50aXR5LlxuICAgIC8vIEZvciB0aGlzIGNhc2Ugd2UgdXNlIG5ldHdvcmtJZCA9IDAuXG4gICAgaWYgKGVudGl0eUVudW1JZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXR3b3JrVmFsdWUubmV0d29ya0lkID0gMFxuICAgICAgbmV0d29ya1ZhbHVlLmVudGl0eUlkID0gZW50aXR5RW51bUlkIGFzIEVudGl0eVxuXG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGVudW0gaXMgYWxyZWFkeSB1c2VkXG4gICAgICBmb3IgKGNvbnN0IFtfLCBuZXR3b3JrXSBvZiBlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKE5ldHdvcmtFbnRpdHkpKSB7XG4gICAgICAgIGlmIChuZXR3b3JrLm5ldHdvcmtJZCA9PT0gbmV0d29ya1ZhbHVlLm5ldHdvcmtJZCAmJiBuZXR3b3JrLmVudGl0eUlkID09PSBuZXR3b3JrVmFsdWUuZW50aXR5SWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N5bmNFbnRpdHkgZmFpbGVkIGJlY2F1c2UgdGhlIGlkIHByb3ZpZGVkIGlzIGFscmVhZHkgaW4gdXNlJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIGlzIG5vdCBkZWZpbmVkLCB0aGVuIGlzIGEgZW50aXR5IGNyZWF0ZWQgaW4gcnVudGltZSAod2hhdCB3ZSBjYWxsZWQgZHluYW1pYy9ydW50aW1lIGVudGl0aWVzKS5cbiAgICBOZXR3b3JrRW50aXR5LmNyZWF0ZU9yUmVwbGFjZShlbnRpdHlJZCwgbmV0d29ya1ZhbHVlKVxuICAgIFN5bmNDb21wb25lbnRzLmNyZWF0ZU9yUmVwbGFjZShlbnRpdHlJZCwgeyBjb21wb25lbnRJZHMgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGl0ZXJhYmxlIG9mIGFsbCB0aGUgY2hpbGRyZW5zIG9mIHRoZSBnaXZlbiBlbnRpdHkuXG4gICAqIGZvciAoY29uc3QgY2hpbGRyZW4gb2YgZ2V0Q2hpbGRyZW4ocGFyZW50KSkgeyBjb25zb2xlLmxvZyhjaGlsZHJlbikgfVxuICAgKiBvciBqdXN0ID0+IGNvbnN0IGNoaWxkcmVuczogRW50aXR5W10gPSBBcnJheS5mcm9tKGdldENoaWxkcmVuKHBhcmVudCkpXG4gICAqL1xuICBmdW5jdGlvbiogZ2V0Q2hpbGRyZW4ocGFyZW50OiBFbnRpdHkpOiBJdGVyYWJsZTxFbnRpdHk+IHtcbiAgICBjb25zdCBuZXR3b3JrID0gTmV0d29ya0VudGl0eS5nZXRPck51bGwocGFyZW50KVxuICAgIGlmIChuZXR3b3JrKSB7XG4gICAgICBmb3IgKGNvbnN0IFtlbnRpdHksIHBhcmVudF0gb2YgZW5naW5lLmdldEVudGl0aWVzV2l0aChOZXR3b3JrUGFyZW50KSkge1xuICAgICAgICBpZiAocGFyZW50LmVudGl0eUlkID09PSBuZXR3b3JrLmVudGl0eUlkICYmIHBhcmVudC5uZXR3b3JrSWQgPT09IG5ldHdvcmsubmV0d29ya0lkKSB7XG4gICAgICAgICAgeWllbGQgZW50aXR5XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRGaXJzdENoaWxkKGVudGl0eTogRW50aXR5KSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oZ2V0Q2hpbGRyZW4oZW50aXR5KSlbMF1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwYXJlbnQgZW50aXR5IG9mIHRoZSBnaXZlbiBlbnRpdHkuXG4gICAqL1xuICBmdW5jdGlvbiBnZXRQYXJlbnQoY2hpbGQ6IEVudGl0eSk6IEVudGl0eSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcGFyZW50ID0gTmV0d29ya1BhcmVudC5nZXRPck51bGwoY2hpbGQpXG4gICAgaWYgKCFwYXJlbnQpIHJldHVybiB1bmRlZmluZWRcbiAgICBmb3IgKGNvbnN0IFtlbnRpdHksIG5ldHdvcmtdIG9mIGVuZ2luZS5nZXRFbnRpdGllc1dpdGgoTmV0d29ya0VudGl0eSkpIHtcbiAgICAgIGlmIChwYXJlbnQubmV0d29ya0lkID09PSBuZXR3b3JrLm5ldHdvcmtJZCAmJiBwYXJlbnQuZW50aXR5SWQgPT09IG5ldHdvcmsuZW50aXR5SWQpIHtcbiAgICAgICAgcmV0dXJuIGVudGl0eVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogQWRkcyB0aGUgbmV0d29yayBwYXJlbnRpbmcgdG8gc3luYyBlbnRpdGllcy5cbiAgICogRXF1aXZhbGVudCB0byBUcmFuc2Zvcm0ucGFyZW50IGZvciBsb2NhbCBlbnRpdGllc1xuICAgKi9cbiAgZnVuY3Rpb24gcGFyZW50RW50aXR5KGVudGl0eTogRW50aXR5LCBwYXJlbnQ6IEVudGl0eSkge1xuICAgIGNvbnN0IG5ldHdvcmsgPSBOZXR3b3JrRW50aXR5LmdldE9yTnVsbChwYXJlbnQpXG4gICAgaWYgKCFuZXR3b3JrKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VudGl0eSBpcyBub3Qgc3luYy4gQ2FsbCBzeW5jRW50aXR5IG9uIHRoZSBwYXJlbnQuJylcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgbmV0d29yayBwYXJlbnQgY29tcG9uZW50XG4gICAgTmV0d29ya1BhcmVudC5jcmVhdGVPclJlcGxhY2UoZW50aXR5LCBuZXR3b3JrKVxuXG4gICAgLy8gSWYgd2UgZG9udCBoYXZlIGEgdHJhbnNmb3JtIGZvciB0aGlzIGVudGl0eSwgY3JlYXRlIGFuIGVtcHR5IG9uZSB0byBzZW5kIGl0IHRvIHRoZSByZW5kZXJlclxuICAgIGlmICghVHJhbnNmb3JtLmdldE9yTnVsbChlbnRpdHkpKSB7XG4gICAgICBUcmFuc2Zvcm0uY3JlYXRlKGVudGl0eSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2UgZm9yY2UgdG8gc2VuZCBhIHRpY2sgdXBkYXRlIG9mIHRoZSB0cmFuc2Zvcm0gc28gd2UgY2FuIHNlbmQgdGhlIE5FVyBwYXJlbnQgdG8gdGhlIHJlbmRlcmVyXG4gICAgICBUcmFuc2Zvcm0uZ2V0TXV0YWJsZShlbnRpdHkpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIG5ldHdvcmsgcGFyZW50aW5nIGZyb20gYW4gZW50aXR5XG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmVQYXJlbnQoZW50aXR5OiBFbnRpdHkpIHtcbiAgICBjb25zdCBuZXR3b3JrID0gTmV0d29ya0VudGl0eS5nZXRPck51bGwoZW50aXR5KVxuXG4gICAgaWYgKCFuZXR3b3JrKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VudGl0eSBpcyBub3Qgc3luYycpXG4gICAgfVxuXG4gICAgTmV0d29ya1BhcmVudC5kZWxldGVGcm9tKGVudGl0eSlcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3luY0VudGl0eSxcbiAgICBnZXRDaGlsZHJlbixcbiAgICBnZXRQYXJlbnQsXG4gICAgcGFyZW50RW50aXR5LFxuICAgIHJlbW92ZVBhcmVudCxcbiAgICBnZXRGaXJzdENoaWxkXG4gIH1cbn1cbiJdfQ==
|
package/network/filter.js
CHANGED
@@ -8,10 +8,12 @@ export function syncFilter(engine) {
|
|
8
8
|
return false;
|
9
9
|
}
|
10
10
|
const [entityId] = EntityUtils.fromEntityId(message.entityId);
|
11
|
+
// filter messages from reserved entities.
|
11
12
|
if (entityId < RESERVED_STATIC_ENTITIES) {
|
12
13
|
return false;
|
13
14
|
}
|
14
15
|
const network = NetworkEntity.getOrNull(message.entityId);
|
16
|
+
// Delete Network Entity Always
|
15
17
|
if (message.type === CrdtMessageType.DELETE_ENTITY_NETWORK ||
|
16
18
|
(network && message.type === CrdtMessageType.DELETE_ENTITY)) {
|
17
19
|
return true;
|
@@ -19,12 +21,14 @@ export function syncFilter(engine) {
|
|
19
21
|
const sync = SyncComponents.getOrNull(message.entityId);
|
20
22
|
if (!sync)
|
21
23
|
return false;
|
24
|
+
// First component
|
22
25
|
if (message.timestamp <= 1) {
|
23
26
|
return true;
|
24
27
|
}
|
25
28
|
if (componentId === NetworkEntity.componentId) {
|
26
29
|
return false;
|
27
30
|
}
|
31
|
+
// If there is a change in the network parent or syncComponents we should always sync
|
28
32
|
if (componentId === _NetworkParent.componentId || componentId === SyncComponents.componentId) {
|
29
33
|
return true;
|
30
34
|
}
|
@@ -34,4 +38,4 @@ export function syncFilter(engine) {
|
|
34
38
|
return false;
|
35
39
|
};
|
36
40
|
}
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25ldHdvcmsvZmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxtQkFBbUIsRUFDbkIseUJBQXlCLEVBQ3pCLFdBQVcsRUFDWCx3QkFBd0IsRUFDeEIsZUFBZSxFQUNmLGNBQWMsSUFBSSxlQUFlLEVBQ2pDLGFBQWEsSUFBSSxjQUFjLEVBQy9CLGFBQWEsSUFBSSxjQUFjLEVBRWhDLE1BQU0sVUFBVSxDQUFBO0FBRWpCLE1BQU0sVUFBVSxVQUFVLENBQUMsTUFBZTtJQUN4QyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQTBCLENBQUE7SUFDOUYsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUEyQixDQUFBO0lBRWpHLE9BQU8sVUFBVSxPQUFnRDtRQUMvRCxNQUFNLFdBQVcsR0FBSSxPQUFlLENBQUMsV0FBVyxDQUFBO1FBRWhELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUseUJBQXlCLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ2xHLE9BQU8sS0FBSyxDQUFBO1NBQ2I7UUFFRCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFN0QsMENBQTBDO1FBQzFDLElBQUksUUFBUSxHQUFHLHdCQUF3QixFQUFFO1lBQ3ZDLE9BQU8sS0FBSyxDQUFBO1NBQ2I7UUFFRCxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN6RCwrQkFBK0I7UUFDL0IsSUFDRSxPQUFPLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxxQkFBcUI7WUFDdEQsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsYUFBYSxDQUFDLEVBQzNEO1lBQ0EsT0FBTyxJQUFJLENBQUE7U0FDWjtRQUVELE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3ZELElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxLQUFLLENBQUE7UUFFdkIsa0JBQWtCO1FBQ2xCLElBQUssT0FBZSxDQUFDLFNBQVMsSUFBSSxDQUFDLEVBQUU7WUFDbkMsT0FBTyxJQUFJLENBQUE7U0FDWjtRQUVELElBQUksV0FBVyxLQUFLLGFBQWEsQ0FBQyxXQUFXLEVBQUU7WUFDN0MsT0FBTyxLQUFLLENBQUE7U0FDYjtRQUVELHFGQUFxRjtRQUNyRixJQUFJLFdBQVcsS0FBSyxjQUFjLENBQUMsV0FBVyxJQUFJLFdBQVcsS0FBSyxjQUFjLENBQUMsV0FBVyxFQUFFO1lBQzVGLE9BQU8sSUFBSSxDQUFBO1NBQ1o7UUFFRCxJQUFJLFdBQVcsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUMxRCxPQUFPLElBQUksQ0FBQTtTQUNaO1FBRUQsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgVHJhbnNwb3J0TWVzc2FnZSxcbiAgUG9pbnRlckV2ZW50c1Jlc3VsdCxcbiAgR2x0ZkNvbnRhaW5lckxvYWRpbmdTdGF0ZSxcbiAgRW50aXR5VXRpbHMsXG4gIFJFU0VSVkVEX1NUQVRJQ19FTlRJVElFUyxcbiAgQ3JkdE1lc3NhZ2VUeXBlLFxuICBTeW5jQ29tcG9uZW50cyBhcyBfU3luY0NvbXBvbmVudHMsXG4gIE5ldHdvcmtFbnRpdHkgYXMgX05ldHdvcmtFbnRpdHksXG4gIE5ldHdvcmtQYXJlbnQgYXMgX05ldHdvcmtQYXJlbnQsXG4gIElFbmdpbmVcbn0gZnJvbSAnQGRjbC9lY3MnXG5cbmV4cG9ydCBmdW5jdGlvbiBzeW5jRmlsdGVyKGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCBOZXR3b3JrRW50aXR5ID0gZW5naW5lLmdldENvbXBvbmVudChfTmV0d29ya0VudGl0eS5jb21wb25lbnRJZCkgYXMgdHlwZW9mIF9OZXR3b3JrRW50aXR5XG4gIGNvbnN0IFN5bmNDb21wb25lbnRzID0gZW5naW5lLmdldENvbXBvbmVudChfU3luY0NvbXBvbmVudHMuY29tcG9uZW50SWQpIGFzIHR5cGVvZiBfU3luY0NvbXBvbmVudHNcblxuICByZXR1cm4gZnVuY3Rpb24gKG1lc3NhZ2U6IE9taXQ8VHJhbnNwb3J0TWVzc2FnZSwgJ21lc3NhZ2VCdWZmZXInPikge1xuICAgIGNvbnN0IGNvbXBvbmVudElkID0gKG1lc3NhZ2UgYXMgYW55KS5jb21wb25lbnRJZFxuXG4gICAgaWYgKFtQb2ludGVyRXZlbnRzUmVzdWx0LmNvbXBvbmVudElkLCBHbHRmQ29udGFpbmVyTG9hZGluZ1N0YXRlLmNvbXBvbmVudElkXS5pbmNsdWRlcyhjb21wb25lbnRJZCkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IFtlbnRpdHlJZF0gPSBFbnRpdHlVdGlscy5mcm9tRW50aXR5SWQobWVzc2FnZS5lbnRpdHlJZClcblxuICAgIC8vIGZpbHRlciBtZXNzYWdlcyBmcm9tIHJlc2VydmVkIGVudGl0aWVzLlxuICAgIGlmIChlbnRpdHlJZCA8IFJFU0VSVkVEX1NUQVRJQ19FTlRJVElFUykge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3QgbmV0d29yayA9IE5ldHdvcmtFbnRpdHkuZ2V0T3JOdWxsKG1lc3NhZ2UuZW50aXR5SWQpXG4gICAgLy8gRGVsZXRlIE5ldHdvcmsgRW50aXR5IEFsd2F5c1xuICAgIGlmIChcbiAgICAgIG1lc3NhZ2UudHlwZSA9PT0gQ3JkdE1lc3NhZ2VUeXBlLkRFTEVURV9FTlRJVFlfTkVUV09SSyB8fFxuICAgICAgKG5ldHdvcmsgJiYgbWVzc2FnZS50eXBlID09PSBDcmR0TWVzc2FnZVR5cGUuREVMRVRFX0VOVElUWSlcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3Qgc3luYyA9IFN5bmNDb21wb25lbnRzLmdldE9yTnVsbChtZXNzYWdlLmVudGl0eUlkKVxuICAgIGlmICghc3luYykgcmV0dXJuIGZhbHNlXG5cbiAgICAvLyBGaXJzdCBjb21wb25lbnRcbiAgICBpZiAoKG1lc3NhZ2UgYXMgYW55KS50aW1lc3RhbXAgPD0gMSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBpZiAoY29tcG9uZW50SWQgPT09IE5ldHdvcmtFbnRpdHkuY29tcG9uZW50SWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIElmIHRoZXJlIGlzIGEgY2hhbmdlIGluIHRoZSBuZXR3b3JrIHBhcmVudCBvciBzeW5jQ29tcG9uZW50cyB3ZSBzaG91bGQgYWx3YXlzIHN5bmNcbiAgICBpZiAoY29tcG9uZW50SWQgPT09IF9OZXR3b3JrUGFyZW50LmNvbXBvbmVudElkIHx8IGNvbXBvbmVudElkID09PSBTeW5jQ29tcG9uZW50cy5jb21wb25lbnRJZCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBpZiAoY29tcG9uZW50SWQgJiYgc3luYy5jb21wb25lbnRJZHMuaW5jbHVkZXMoY29tcG9uZW50SWQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iXX0=
|
package/network/index.js
CHANGED
@@ -2,6 +2,7 @@ import { sendBinary } from '~system/CommunicationsController';
|
|
2
2
|
import { engine } from '@dcl/ecs';
|
3
3
|
import { addSyncTransport } from './message-bus-sync';
|
4
4
|
import { getUserData } from '~system/UserIdentity';
|
5
|
+
// initialize sync transport for sdk engine
|
5
6
|
const { getChildren, syncEntity, parentEntity, getParent, myProfile, removeParent, getFirstChild } = addSyncTransport(engine, sendBinary, getUserData);
|
6
7
|
export { getFirstChild, getChildren, syncEntity, parentEntity, getParent, myProfile, removeParent };
|
7
|
-
//# sourceMappingURL=data:application/json;base64,
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbmV0d29yay9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0NBQWtDLENBQUE7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFbEQsMkNBQTJDO0FBQzNDLE1BQU0sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsR0FBRyxnQkFBZ0IsQ0FDbkgsTUFBTSxFQUNOLFVBQVUsRUFDVixXQUFXLENBQ1osQ0FBQTtBQUVELE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNlbmRCaW5hcnkgfSBmcm9tICd+c3lzdGVtL0NvbW11bmljYXRpb25zQ29udHJvbGxlcidcbmltcG9ydCB7IGVuZ2luZSB9IGZyb20gJ0BkY2wvZWNzJ1xuaW1wb3J0IHsgYWRkU3luY1RyYW5zcG9ydCB9IGZyb20gJy4vbWVzc2FnZS1idXMtc3luYydcbmltcG9ydCB7IGdldFVzZXJEYXRhIH0gZnJvbSAnfnN5c3RlbS9Vc2VySWRlbnRpdHknXG5cbi8vIGluaXRpYWxpemUgc3luYyB0cmFuc3BvcnQgZm9yIHNkayBlbmdpbmVcbmNvbnN0IHsgZ2V0Q2hpbGRyZW4sIHN5bmNFbnRpdHksIHBhcmVudEVudGl0eSwgZ2V0UGFyZW50LCBteVByb2ZpbGUsIHJlbW92ZVBhcmVudCwgZ2V0Rmlyc3RDaGlsZCB9ID0gYWRkU3luY1RyYW5zcG9ydChcbiAgZW5naW5lLFxuICBzZW5kQmluYXJ5LFxuICBnZXRVc2VyRGF0YVxuKVxuXG5leHBvcnQgeyBnZXRGaXJzdENoaWxkLCBnZXRDaGlsZHJlbiwgc3luY0VudGl0eSwgcGFyZW50RW50aXR5LCBnZXRQYXJlbnQsIG15UHJvZmlsZSwgcmVtb3ZlUGFyZW50IH1cbiJdfQ==
|
@@ -3,11 +3,15 @@ import { engineToCrdt } from './state';
|
|
3
3
|
import { BinaryMessageBus, CommsMessage } from './binary-message-bus';
|
4
4
|
import { definePlayersInScene, fetchProfile, setInitialized, stateInitialized, stateInitializedChecker, syncTransportIsReady } from './utils';
|
5
5
|
import { entityUtils } from './entities';
|
6
|
+
// user that we asked for the inital crdt state
|
6
7
|
export function addSyncTransport(engine, sendBinary, getUserData) {
|
7
8
|
definePlayersInScene(engine);
|
9
|
+
// Profile Info
|
8
10
|
const myProfile = {};
|
9
11
|
fetchProfile(myProfile, getUserData);
|
12
|
+
// Entity utils
|
10
13
|
const entityDefinitions = entityUtils(engine, myProfile);
|
14
|
+
// List of MessageBuss messsages to be sent on every frame to comms
|
11
15
|
const pendingMessageBusMessagesToSend = [];
|
12
16
|
const binaryMessageBus = BinaryMessageBus((message) => pendingMessageBusMessagesToSend.push(message));
|
13
17
|
function getMessagesToSend() {
|
@@ -15,10 +19,12 @@ export function addSyncTransport(engine, sendBinary, getUserData) {
|
|
15
19
|
pendingMessageBusMessagesToSend.length = 0;
|
16
20
|
return messages;
|
17
21
|
}
|
22
|
+
// Add Sync Transport
|
18
23
|
const transport = {
|
19
24
|
filter: syncFilter(engine),
|
20
25
|
send: async (message) => {
|
21
26
|
if (syncTransportIsReady(engine) && message.byteLength) {
|
27
|
+
// console.log(Array.from(serializeCrdtMessages('[send CRDT]: ', message, engine)))
|
22
28
|
binaryMessageBus.emit(CommsMessage.CRDT, message);
|
23
29
|
}
|
24
30
|
const messages = getMessagesToSend();
|
@@ -28,20 +34,31 @@ export function addSyncTransport(engine, sendBinary, getUserData) {
|
|
28
34
|
type: 'network'
|
29
35
|
};
|
30
36
|
engine.addTransport(transport);
|
37
|
+
// End add sync transport
|
38
|
+
// Add state intialized checker
|
31
39
|
engine.addSystem(() => stateInitializedChecker(engine, myProfile, entityDefinitions.syncEntity));
|
40
|
+
// Request initial state
|
32
41
|
binaryMessageBus.emit(CommsMessage.REQ_CRDT_STATE, new Uint8Array());
|
42
|
+
// If we dont have any state initialized, and recieve a state message.
|
33
43
|
binaryMessageBus.on(CommsMessage.RES_CRDT_STATE, (value) => {
|
44
|
+
// console.log(Array.from(serializeCrdtMessages('[binaryMessageBus]: ', value, engine)))
|
34
45
|
if (!stateInitialized) {
|
35
46
|
setInitialized();
|
36
47
|
transport.onmessage(value);
|
37
48
|
}
|
38
49
|
});
|
50
|
+
// If we are the oldest user and we recieve a req of a state we send it.
|
39
51
|
binaryMessageBus.on(CommsMessage.REQ_CRDT_STATE, () => {
|
52
|
+
// TODO: oldest not working because connectedPlayers returns players that are not in the scene.
|
53
|
+
// Not working :sadcat:
|
54
|
+
// const oldest = oldestUser(engine, myProfile, entityDefinitions.syncEntity)
|
40
55
|
if (stateInitialized) {
|
41
56
|
binaryMessageBus.emit(CommsMessage.RES_CRDT_STATE, engineToCrdt(engine));
|
42
57
|
}
|
43
58
|
});
|
59
|
+
// Process CRDT messages here
|
44
60
|
binaryMessageBus.on(CommsMessage.CRDT, (value) => {
|
61
|
+
// console.log(Array.from(serializeCrdtMessages('[CRDT on]: ', value, engine)))
|
45
62
|
transport.onmessage(value);
|
46
63
|
});
|
47
64
|
return {
|
@@ -49,4 +66,4 @@ export function addSyncTransport(engine, sendBinary, getUserData) {
|
|
49
66
|
myProfile
|
50
67
|
};
|
51
68
|
}
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1idXMtc3luYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9uZXR3b3JrL21lc3NhZ2UtYnVzLXN5bmMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUNyQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3RDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUNyRSxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLFlBQVksRUFFWixjQUFjLEVBQ2QsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixvQkFBb0IsRUFDckIsTUFBTSxTQUFTLENBQUE7QUFDaEIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUl4QywrQ0FBK0M7QUFDL0MsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixNQUFlLEVBQ2YsVUFBbUUsRUFDbkUsV0FBd0U7SUFFeEUsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDNUIsZUFBZTtJQUNmLE1BQU0sU0FBUyxHQUFhLEVBQWMsQ0FBQTtJQUMxQyxZQUFZLENBQUMsU0FBVSxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBRXJDLGVBQWU7SUFDZixNQUFNLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFFeEQsbUVBQW1FO0lBQ25FLE1BQU0sK0JBQStCLEdBQWlCLEVBQUUsQ0FBQTtJQUN4RCxNQUFNLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtJQUNyRyxTQUFTLGlCQUFpQjtRQUN4QixNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsK0JBQStCLENBQUMsQ0FBQTtRQUNyRCwrQkFBK0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO1FBQzFDLE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7SUFFRCxxQkFBcUI7SUFDckIsTUFBTSxTQUFTLEdBQWM7UUFDM0IsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDMUIsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFtQixFQUFFLEVBQUU7WUFDbEMsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFO2dCQUN0RCxtRkFBbUY7Z0JBQ25GLGdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFBO2FBQ2xEO1lBQ0QsTUFBTSxRQUFRLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQTtZQUNwQyxNQUFNLFFBQVEsR0FBRyxNQUFNLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFBO1lBQ3JELGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNuRCxDQUFDO1FBQ0QsSUFBSSxFQUFFLFNBQVM7S0FDaEIsQ0FBQTtJQUNELE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDOUIseUJBQXlCO0lBRXpCLCtCQUErQjtJQUMvQixNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtJQUVoRyx3QkFBd0I7SUFDeEIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsSUFBSSxVQUFVLEVBQUUsQ0FBQyxDQUFBO0lBRXBFLHNFQUFzRTtJQUN0RSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ3pELHdGQUF3RjtRQUN4RixJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDckIsY0FBYyxFQUFFLENBQUE7WUFDaEIsU0FBUyxDQUFDLFNBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtTQUM1QjtJQUNILENBQUMsQ0FBQyxDQUFBO0lBRUYsd0VBQXdFO0lBQ3hFLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRTtRQUNwRCwrRkFBK0Y7UUFDL0YsdUJBQXVCO1FBQ3ZCLDZFQUE2RTtRQUM3RSxJQUFJLGdCQUFnQixFQUFFO1lBQ3BCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO1NBQ3pFO0lBQ0gsQ0FBQyxDQUFDLENBQUE7SUFFRiw2QkFBNkI7SUFDN0IsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUMvQywrRUFBK0U7UUFFL0UsU0FBUyxDQUFDLFNBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM3QixDQUFDLENBQUMsQ0FBQTtJQUVGLE9BQU87UUFDTCxHQUFHLGlCQUFpQjtRQUNwQixTQUFTO0tBQ1YsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRW5naW5lLCBUcmFuc3BvcnQgfSBmcm9tICdAZGNsL2VjcydcbmltcG9ydCB0eXBlIHsgU2VuZEJpbmFyeVJlcXVlc3QsIFNlbmRCaW5hcnlSZXNwb25zZSB9IGZyb20gJ35zeXN0ZW0vQ29tbXVuaWNhdGlvbnNDb250cm9sbGVyJ1xuXG5pbXBvcnQgeyBzeW5jRmlsdGVyIH0gZnJvbSAnLi9maWx0ZXInXG5pbXBvcnQgeyBlbmdpbmVUb0NyZHQgfSBmcm9tICcuL3N0YXRlJ1xuaW1wb3J0IHsgQmluYXJ5TWVzc2FnZUJ1cywgQ29tbXNNZXNzYWdlIH0gZnJvbSAnLi9iaW5hcnktbWVzc2FnZS1idXMnXG5pbXBvcnQge1xuICBkZWZpbmVQbGF5ZXJzSW5TY2VuZSxcbiAgZmV0Y2hQcm9maWxlLFxuICBvbGRlc3RVc2VyIGFzIF9vbGRlc3RVc2VyLFxuICBzZXRJbml0aWFsaXplZCxcbiAgc3RhdGVJbml0aWFsaXplZCxcbiAgc3RhdGVJbml0aWFsaXplZENoZWNrZXIsXG4gIHN5bmNUcmFuc3BvcnRJc1JlYWR5XG59IGZyb20gJy4vdXRpbHMnXG5pbXBvcnQgeyBlbnRpdHlVdGlscyB9IGZyb20gJy4vZW50aXRpZXMnXG5pbXBvcnQgeyBHZXRVc2VyRGF0YVJlcXVlc3QsIEdldFVzZXJEYXRhUmVzcG9uc2UgfSBmcm9tICd+c3lzdGVtL1VzZXJJZGVudGl0eSdcblxuZXhwb3J0IHR5cGUgSVByb2ZpbGUgPSB7IG5ldHdvcmtJZDogbnVtYmVyOyB1c2VySWQ6IHN0cmluZyB9XG4vLyB1c2VyIHRoYXQgd2UgYXNrZWQgZm9yIHRoZSBpbml0YWwgY3JkdCBzdGF0ZVxuZXhwb3J0IGZ1bmN0aW9uIGFkZFN5bmNUcmFuc3BvcnQoXG4gIGVuZ2luZTogSUVuZ2luZSxcbiAgc2VuZEJpbmFyeTogKG1zZzogU2VuZEJpbmFyeVJlcXVlc3QpID0+IFByb21pc2U8U2VuZEJpbmFyeVJlc3BvbnNlPixcbiAgZ2V0VXNlckRhdGE6ICh2YWx1ZTogR2V0VXNlckRhdGFSZXF1ZXN0KSA9PiBQcm9taXNlPEdldFVzZXJEYXRhUmVzcG9uc2U+XG4pIHtcbiAgZGVmaW5lUGxheWVyc0luU2NlbmUoZW5naW5lKVxuICAvLyBQcm9maWxlIEluZm9cbiAgY29uc3QgbXlQcm9maWxlOiBJUHJvZmlsZSA9IHt9IGFzIElQcm9maWxlXG4gIGZldGNoUHJvZmlsZShteVByb2ZpbGUhLCBnZXRVc2VyRGF0YSlcblxuICAvLyBFbnRpdHkgdXRpbHNcbiAgY29uc3QgZW50aXR5RGVmaW5pdGlvbnMgPSBlbnRpdHlVdGlscyhlbmdpbmUsIG15UHJvZmlsZSlcblxuICAvLyBMaXN0IG9mIE1lc3NhZ2VCdXNzIG1lc3NzYWdlcyB0byBiZSBzZW50IG9uIGV2ZXJ5IGZyYW1lIHRvIGNvbW1zXG4gIGNvbnN0IHBlbmRpbmdNZXNzYWdlQnVzTWVzc2FnZXNUb1NlbmQ6IFVpbnQ4QXJyYXlbXSA9IFtdXG4gIGNvbnN0IGJpbmFyeU1lc3NhZ2VCdXMgPSBCaW5hcnlNZXNzYWdlQnVzKChtZXNzYWdlKSA9PiBwZW5kaW5nTWVzc2FnZUJ1c01lc3NhZ2VzVG9TZW5kLnB1c2gobWVzc2FnZSkpXG4gIGZ1bmN0aW9uIGdldE1lc3NhZ2VzVG9TZW5kKCkge1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gWy4uLnBlbmRpbmdNZXNzYWdlQnVzTWVzc2FnZXNUb1NlbmRdXG4gICAgcGVuZGluZ01lc3NhZ2VCdXNNZXNzYWdlc1RvU2VuZC5sZW5ndGggPSAwXG4gICAgcmV0dXJuIG1lc3NhZ2VzXG4gIH1cblxuICAvLyBBZGQgU3luYyBUcmFuc3BvcnRcbiAgY29uc3QgdHJhbnNwb3J0OiBUcmFuc3BvcnQgPSB7XG4gICAgZmlsdGVyOiBzeW5jRmlsdGVyKGVuZ2luZSksXG4gICAgc2VuZDogYXN5bmMgKG1lc3NhZ2U6IFVpbnQ4QXJyYXkpID0+IHtcbiAgICAgIGlmIChzeW5jVHJhbnNwb3J0SXNSZWFkeShlbmdpbmUpICYmIG1lc3NhZ2UuYnl0ZUxlbmd0aCkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhBcnJheS5mcm9tKHNlcmlhbGl6ZUNyZHRNZXNzYWdlcygnW3NlbmQgQ1JEVF06ICcsIG1lc3NhZ2UsIGVuZ2luZSkpKVxuICAgICAgICBiaW5hcnlNZXNzYWdlQnVzLmVtaXQoQ29tbXNNZXNzYWdlLkNSRFQsIG1lc3NhZ2UpXG4gICAgICB9XG4gICAgICBjb25zdCBtZXNzYWdlcyA9IGdldE1lc3NhZ2VzVG9TZW5kKClcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgc2VuZEJpbmFyeSh7IGRhdGE6IG1lc3NhZ2VzIH0pXG4gICAgICBiaW5hcnlNZXNzYWdlQnVzLl9fcHJvY2Vzc01lc3NhZ2VzKHJlc3BvbnNlLmRhdGEpXG4gICAgfSxcbiAgICB0eXBlOiAnbmV0d29yaydcbiAgfVxuICBlbmdpbmUuYWRkVHJhbnNwb3J0KHRyYW5zcG9ydClcbiAgLy8gRW5kIGFkZCBzeW5jIHRyYW5zcG9ydFxuXG4gIC8vIEFkZCBzdGF0ZSBpbnRpYWxpemVkIGNoZWNrZXJcbiAgZW5naW5lLmFkZFN5c3RlbSgoKSA9PiBzdGF0ZUluaXRpYWxpemVkQ2hlY2tlcihlbmdpbmUsIG15UHJvZmlsZSwgZW50aXR5RGVmaW5pdGlvbnMuc3luY0VudGl0eSkpXG5cbiAgLy8gUmVxdWVzdCBpbml0aWFsIHN0YXRlXG4gIGJpbmFyeU1lc3NhZ2VCdXMuZW1pdChDb21tc01lc3NhZ2UuUkVRX0NSRFRfU1RBVEUsIG5ldyBVaW50OEFycmF5KCkpXG5cbiAgLy8gSWYgd2UgZG9udCBoYXZlIGFueSBzdGF0ZSBpbml0aWFsaXplZCwgYW5kIHJlY2lldmUgYSBzdGF0ZSBtZXNzYWdlLlxuICBiaW5hcnlNZXNzYWdlQnVzLm9uKENvbW1zTWVzc2FnZS5SRVNfQ1JEVF9TVEFURSwgKHZhbHVlKSA9PiB7XG4gICAgLy8gY29uc29sZS5sb2coQXJyYXkuZnJvbShzZXJpYWxpemVDcmR0TWVzc2FnZXMoJ1tiaW5hcnlNZXNzYWdlQnVzXTogJywgdmFsdWUsIGVuZ2luZSkpKVxuICAgIGlmICghc3RhdGVJbml0aWFsaXplZCkge1xuICAgICAgc2V0SW5pdGlhbGl6ZWQoKVxuICAgICAgdHJhbnNwb3J0Lm9ubWVzc2FnZSEodmFsdWUpXG4gICAgfVxuICB9KVxuXG4gIC8vIElmIHdlIGFyZSB0aGUgb2xkZXN0IHVzZXIgYW5kIHdlIHJlY2lldmUgYSByZXEgb2YgYSBzdGF0ZSB3ZSBzZW5kIGl0LlxuICBiaW5hcnlNZXNzYWdlQnVzLm9uKENvbW1zTWVzc2FnZS5SRVFfQ1JEVF9TVEFURSwgKCkgPT4ge1xuICAgIC8vIFRPRE86IG9sZGVzdCBub3Qgd29ya2luZyBiZWNhdXNlIGNvbm5lY3RlZFBsYXllcnMgcmV0dXJucyBwbGF5ZXJzIHRoYXQgYXJlIG5vdCBpbiB0aGUgc2NlbmUuXG4gICAgLy8gTm90IHdvcmtpbmcgOnNhZGNhdDpcbiAgICAvLyBjb25zdCBvbGRlc3QgPSBvbGRlc3RVc2VyKGVuZ2luZSwgbXlQcm9maWxlLCBlbnRpdHlEZWZpbml0aW9ucy5zeW5jRW50aXR5KVxuICAgIGlmIChzdGF0ZUluaXRpYWxpemVkKSB7XG4gICAgICBiaW5hcnlNZXNzYWdlQnVzLmVtaXQoQ29tbXNNZXNzYWdlLlJFU19DUkRUX1NUQVRFLCBlbmdpbmVUb0NyZHQoZW5naW5lKSlcbiAgICB9XG4gIH0pXG5cbiAgLy8gUHJvY2VzcyBDUkRUIG1lc3NhZ2VzIGhlcmVcbiAgYmluYXJ5TWVzc2FnZUJ1cy5vbihDb21tc01lc3NhZ2UuQ1JEVCwgKHZhbHVlKSA9PiB7XG4gICAgLy8gY29uc29sZS5sb2coQXJyYXkuZnJvbShzZXJpYWxpemVDcmR0TWVzc2FnZXMoJ1tDUkRUIG9uXTogJywgdmFsdWUsIGVuZ2luZSkpKVxuXG4gICAgdHJhbnNwb3J0Lm9ubWVzc2FnZSEodmFsdWUpXG4gIH0pXG5cbiAgcmV0dXJuIHtcbiAgICAuLi5lbnRpdHlEZWZpbml0aW9ucyxcbiAgICBteVByb2ZpbGVcbiAgfVxufVxuIl19
|
package/network/state.js
CHANGED
@@ -15,6 +15,7 @@ export function engineToCrdt(engine) {
|
|
15
15
|
if (isDynamicEntity) {
|
16
16
|
return true;
|
17
17
|
}
|
18
|
+
// For the static entities we only send the updates of the SyncComponents
|
18
19
|
return SyncComponents.get(entity).componentIds.includes(itComponentDefinition.componentId);
|
19
20
|
});
|
20
21
|
}
|
@@ -36,4 +37,4 @@ export function engineToCrdt(engine) {
|
|
36
37
|
}
|
37
38
|
return networkBuffer.toBinary();
|
38
39
|
}
|
39
|
-
//# sourceMappingURL=data:application/json;base64,
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbmV0d29yay9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQTtBQUM1RSxPQUFPLEVBRUwsbUJBQW1CLEVBQ25CLGVBQWUsRUFFZixxQkFBcUIsRUFDckIsNEJBQTRCLEVBQzVCLGNBQWMsSUFBSSxlQUFlLEVBQ2pDLGFBQWEsSUFBSSxjQUFjLEVBR2hDLE1BQU0sVUFBVSxDQUFBO0FBRWpCLE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBZTtJQUMxQyxNQUFNLFVBQVUsR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUE7SUFDNUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxtQkFBbUIsRUFBRSxDQUFBO0lBQy9DLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBb0IsQ0FBQTtJQUMxRixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQW1CLENBQUE7SUFFdkYsS0FBSyxNQUFNLHFCQUFxQixJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsRUFBRTtRQUMzRCxxQkFBcUIsQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNqRSxNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ2pELElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ3BCLE9BQU8sS0FBSyxDQUFBO2FBQ2I7WUFDRCxNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQTtZQUMzRCxJQUFJLGVBQWUsRUFBRTtnQkFDbkIsT0FBTyxJQUFJLENBQUE7YUFDWjtZQUNELHlFQUF5RTtZQUN6RSxPQUFPLGNBQWMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUM1RixDQUFDLENBQUMsQ0FBQTtLQUNIO0lBRUQsSUFBSSxNQUFnQyxDQUFBO0lBQ3BDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsbUJBQW1CLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUU7UUFDM0QsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxhQUFhLEVBQUU7WUFDakQsTUFBTSxPQUFPLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBRSxDQUFBO1lBQ3ZELE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQy9ELElBQUksYUFBYSxFQUFFO2dCQUNqQiw0QkFBNEIsQ0FBQyxLQUFLLENBQ2hDLGFBQWEsQ0FBQyxRQUFRLEVBQ3RCLE9BQU8sQ0FBQyxTQUFTLEVBQ2pCLE9BQU8sQ0FBQyxXQUFXLEVBQ25CLGFBQWEsQ0FBQyxTQUFTLEVBQ3ZCLE9BQU8sQ0FBQyxJQUFJLEVBQ1osYUFBYSxDQUNkLENBQUE7YUFDRjtpQkFBTTtnQkFDTCxxQkFBcUIsQ0FBQyxLQUFLLENBQ3pCLE9BQU8sQ0FBQyxRQUFRLEVBQ2hCLE9BQU8sQ0FBQyxTQUFTLEVBQ2pCLE9BQU8sQ0FBQyxXQUFXLEVBQ25CLE9BQU8sQ0FBQyxJQUFJLEVBQ1osYUFBYSxDQUNkLENBQUE7YUFDRjtTQUNGO2FBQU07WUFDTCxVQUFVLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1NBQzlDO0tBQ0Y7SUFFRCxPQUFPLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtBQUNqQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVhZFdyaXRlQnl0ZUJ1ZmZlciB9IGZyb20gJ0BkY2wvZWNzL2Rpc3Qvc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHtcbiAgQ3JkdE1lc3NhZ2VIZWFkZXIsXG4gIENyZHRNZXNzYWdlUHJvdG9jb2wsXG4gIENyZHRNZXNzYWdlVHlwZSxcbiAgSUVuZ2luZSxcbiAgUHV0Q29tcG9uZW50T3BlcmF0aW9uLFxuICBQdXROZXR3b3JrQ29tcG9uZW50T3BlcmF0aW9uLFxuICBTeW5jQ29tcG9uZW50cyBhcyBfU3luY0NvbXBvbmVudHMsXG4gIE5ldHdvcmtFbnRpdHkgYXMgX05ldHdvcmtFbnRpdHksXG4gIElTeW5jQ29tcG9uZW50cyxcbiAgSU5ldG93cmtFbnRpdHlcbn0gZnJvbSAnQGRjbC9lY3MnXG5cbmV4cG9ydCBmdW5jdGlvbiBlbmdpbmVUb0NyZHQoZW5naW5lOiBJRW5naW5lKTogVWludDhBcnJheSB7XG4gIGNvbnN0IGNyZHRCdWZmZXIgPSBuZXcgUmVhZFdyaXRlQnl0ZUJ1ZmZlcigpXG4gIGNvbnN0IG5ldHdvcmtCdWZmZXIgPSBuZXcgUmVhZFdyaXRlQnl0ZUJ1ZmZlcigpXG4gIGNvbnN0IFN5bmNDb21wb25lbnRzID0gZW5naW5lLmdldENvbXBvbmVudChfU3luY0NvbXBvbmVudHMuY29tcG9uZW50SWQpIGFzIElTeW5jQ29tcG9uZW50c1xuICBjb25zdCBOZXR3b3JrRW50aXR5ID0gZW5naW5lLmdldENvbXBvbmVudChfTmV0d29ya0VudGl0eS5jb21wb25lbnRJZCkgYXMgSU5ldG93cmtFbnRpdHlcblxuICBmb3IgKGNvbnN0IGl0Q29tcG9uZW50RGVmaW5pdGlvbiBvZiBlbmdpbmUuY29tcG9uZW50c0l0ZXIoKSkge1xuICAgIGl0Q29tcG9uZW50RGVmaW5pdGlvbi5kdW1wQ3JkdFN0YXRlVG9CdWZmZXIoY3JkdEJ1ZmZlciwgKGVudGl0eSkgPT4ge1xuICAgICAgY29uc3QgaXNOZXR3b3JrRW50aXR5ID0gTmV0d29ya0VudGl0eS5oYXMoZW50aXR5KVxuICAgICAgaWYgKCFpc05ldHdvcmtFbnRpdHkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICBjb25zdCBpc0R5bmFtaWNFbnRpdHkgPSBOZXR3b3JrRW50aXR5LmdldChlbnRpdHkpLm5ldHdvcmtJZFxuICAgICAgaWYgKGlzRHluYW1pY0VudGl0eSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgLy8gRm9yIHRoZSBzdGF0aWMgZW50aXRpZXMgd2Ugb25seSBzZW5kIHRoZSB1cGRhdGVzIG9mIHRoZSBTeW5jQ29tcG9uZW50c1xuICAgICAgcmV0dXJuIFN5bmNDb21wb25lbnRzLmdldChlbnRpdHkpLmNvbXBvbmVudElkcy5pbmNsdWRlcyhpdENvbXBvbmVudERlZmluaXRpb24uY29tcG9uZW50SWQpXG4gICAgfSlcbiAgfVxuXG4gIGxldCBoZWFkZXI6IENyZHRNZXNzYWdlSGVhZGVyIHwgbnVsbFxuICB3aGlsZSAoKGhlYWRlciA9IENyZHRNZXNzYWdlUHJvdG9jb2wuZ2V0SGVhZGVyKGNyZHRCdWZmZXIpKSkge1xuICAgIGlmIChoZWFkZXIudHlwZSA9PT0gQ3JkdE1lc3NhZ2VUeXBlLlBVVF9DT01QT05FTlQpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBQdXRDb21wb25lbnRPcGVyYXRpb24ucmVhZChjcmR0QnVmZmVyKSFcbiAgICAgIGNvbnN0IG5ldHdvcmtFbnRpdHkgPSBOZXR3b3JrRW50aXR5LmdldE9yTnVsbChtZXNzYWdlLmVudGl0eUlkKVxuICAgICAgaWYgKG5ldHdvcmtFbnRpdHkpIHtcbiAgICAgICAgUHV0TmV0d29ya0NvbXBvbmVudE9wZXJhdGlvbi53cml0ZShcbiAgICAgICAgICBuZXR3b3JrRW50aXR5LmVudGl0eUlkLFxuICAgICAgICAgIG1lc3NhZ2UudGltZXN0YW1wLFxuICAgICAgICAgIG1lc3NhZ2UuY29tcG9uZW50SWQsXG4gICAgICAgICAgbmV0d29ya0VudGl0eS5uZXR3b3JrSWQsXG4gICAgICAgICAgbWVzc2FnZS5kYXRhLFxuICAgICAgICAgIG5ldHdvcmtCdWZmZXJcbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgUHV0Q29tcG9uZW50T3BlcmF0aW9uLndyaXRlKFxuICAgICAgICAgIG1lc3NhZ2UuZW50aXR5SWQsXG4gICAgICAgICAgbWVzc2FnZS50aW1lc3RhbXAsXG4gICAgICAgICAgbWVzc2FnZS5jb21wb25lbnRJZCxcbiAgICAgICAgICBtZXNzYWdlLmRhdGEsXG4gICAgICAgICAgbmV0d29ya0J1ZmZlclxuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNyZHRCdWZmZXIuaW5jcmVtZW50UmVhZE9mZnNldChoZWFkZXIubGVuZ3RoKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXR3b3JrQnVmZmVyLnRvQmluYXJ5KClcbn1cbiJdfQ==
|
package/network/utils.d.ts
CHANGED
@@ -12,7 +12,22 @@ export declare let playerSceneEntity: Entity;
|
|
12
12
|
export declare function setInitialized(): void;
|
13
13
|
export declare let INITIAL_CRDT_RENDERER_MESSAGES_SENT: boolean;
|
14
14
|
export declare function fetchProfile(myProfile: IProfile, getUserData: (value: GetUserDataRequest) => Promise<GetUserDataResponse>): void;
|
15
|
+
/**
|
16
|
+
* Add's the user information about when he joined the scene.
|
17
|
+
* It's used to check who is the oldest one, to sync the state
|
18
|
+
*/
|
15
19
|
export declare function createPlayerTimestampData(engine: IEngine, profile: IProfile, syncEntity: SyncEntity): Entity | undefined;
|
20
|
+
/**
|
21
|
+
* Check if I'm the older user to send the initial state
|
22
|
+
*/
|
16
23
|
export declare function oldestUser(engine: IEngine, profile: IProfile, syncEntity: SyncEntity): boolean;
|
24
|
+
/**
|
25
|
+
* Ignore CRDT's initial messages from the renderer.
|
26
|
+
*/
|
17
27
|
export declare function syncTransportIsReady(engine: IEngine): boolean;
|
28
|
+
/**
|
29
|
+
* Check if we are already initialized
|
30
|
+
* Add the playerSceneData component and syncronize it till we receive the state.
|
31
|
+
* This fn should be added as a system so it runs on every tick
|
32
|
+
*/
|
18
33
|
export declare function stateInitializedChecker(engine: IEngine, _profile: IProfile, _syncEntity: SyncEntity): void;
|
package/network/utils.js
CHANGED
@@ -1,15 +1,22 @@
|
|
1
1
|
import { EngineInfo as _EngineInfo, Schemas } from '@dcl/ecs';
|
2
2
|
import { componentNumberFromName } from '@dcl/ecs/dist/components/component-number';
|
3
|
+
// Component to track all the players and when they enter to the scene.
|
4
|
+
// Know who is in charge of sending the initial state (oldest one)
|
3
5
|
export const definePlayersInScene = (engine) => engine.defineComponent('players-scene', {
|
4
6
|
timestamp: Schemas.Number,
|
5
7
|
userId: Schemas.String
|
6
8
|
});
|
9
|
+
// Already initialized my state. Ignore new states messages.
|
7
10
|
export let stateInitialized = false;
|
11
|
+
// My player entity to check if I'm the oldest player in the scend
|
8
12
|
export let playerSceneEntity;
|
9
13
|
export function setInitialized() {
|
10
14
|
stateInitialized = true;
|
11
15
|
}
|
16
|
+
// Flag to avoid sending over the wire all the initial messages that the engine add's to the rendererTransport
|
17
|
+
// INITIAL_CRDT_MESSAGES that are being processed on the onStart loop, before the onUpdate.
|
12
18
|
export let INITIAL_CRDT_RENDERER_MESSAGES_SENT = false;
|
19
|
+
// Retrieve userId to start sending this info as the networkId
|
13
20
|
export function fetchProfile(myProfile, getUserData) {
|
14
21
|
void getUserData({}).then(({ data }) => {
|
15
22
|
if (data?.userId) {
|
@@ -23,6 +30,10 @@ export function fetchProfile(myProfile, getUserData) {
|
|
23
30
|
}
|
24
31
|
});
|
25
32
|
}
|
33
|
+
/**
|
34
|
+
* Add's the user information about when he joined the scene.
|
35
|
+
* It's used to check who is the oldest one, to sync the state
|
36
|
+
*/
|
26
37
|
export function createPlayerTimestampData(engine, profile, syncEntity) {
|
27
38
|
if (!profile?.userId)
|
28
39
|
return undefined;
|
@@ -33,8 +44,12 @@ export function createPlayerTimestampData(engine, profile, syncEntity) {
|
|
33
44
|
playerSceneEntity = entity;
|
34
45
|
return playerSceneEntity;
|
35
46
|
}
|
47
|
+
/**
|
48
|
+
* Check if I'm the older user to send the initial state
|
49
|
+
*/
|
36
50
|
export function oldestUser(engine, profile, syncEntity) {
|
37
51
|
const PlayersInScene = definePlayersInScene(engine);
|
52
|
+
// When the user leaves the scene but it's still connected.
|
38
53
|
if (!PlayersInScene.has(playerSceneEntity)) {
|
39
54
|
createPlayerTimestampData(engine, profile, syncEntity);
|
40
55
|
return oldestUser(engine, profile, syncEntity);
|
@@ -46,6 +61,9 @@ export function oldestUser(engine, profile, syncEntity) {
|
|
46
61
|
}
|
47
62
|
return true;
|
48
63
|
}
|
64
|
+
/**
|
65
|
+
* Ignore CRDT's initial messages from the renderer.
|
66
|
+
*/
|
49
67
|
export function syncTransportIsReady(engine) {
|
50
68
|
const EngineInfo = engine.getComponent(_EngineInfo.componentId);
|
51
69
|
if (!INITIAL_CRDT_RENDERER_MESSAGES_SENT) {
|
@@ -56,14 +74,44 @@ export function syncTransportIsReady(engine) {
|
|
56
74
|
}
|
57
75
|
return INITIAL_CRDT_RENDERER_MESSAGES_SENT;
|
58
76
|
}
|
77
|
+
/**
|
78
|
+
* Check if we are already initialized
|
79
|
+
* Add the playerSceneData component and syncronize it till we receive the state.
|
80
|
+
* This fn should be added as a system so it runs on every tick
|
81
|
+
*/
|
82
|
+
// TODO: Had to comment all the logic because getConnectedPlayers was not working as expected
|
83
|
+
// A lot of raise conditions. For now we will go with the approach that every client that it's initialized will send his crdt state.
|
59
84
|
export function stateInitializedChecker(engine, _profile, _syncEntity) {
|
85
|
+
// const PlayersInScene = definePlayersInScene(engine)
|
60
86
|
const EngineInfo = engine.getComponent(_EngineInfo.componentId);
|
87
|
+
// const NetworkEntity = engine.getComponent(_NetworkEntity.componentId) as INetowrkEntity
|
61
88
|
async function enterScene() {
|
89
|
+
// if (!playerSceneEntity) {
|
90
|
+
// createPlayerTimestampData(engine, profile, syncEntity)
|
91
|
+
// }
|
92
|
+
/**
|
93
|
+
* Keeps PlayersInScene up-to-date with the current players.
|
94
|
+
*/
|
95
|
+
// const connectedPlayers = await getConnectedPlayers({})
|
96
|
+
// for (const [entity, player] of engine.getEntitiesWith(PlayersInScene)) {
|
97
|
+
// if (!connectedPlayers.players.find(($) => $.userId === player.userId)) {
|
98
|
+
// PlayersInScene.deleteFrom(entity)
|
99
|
+
// }
|
100
|
+
// }
|
101
|
+
// Wait for comms to be ready ?? ~3000ms
|
62
102
|
if ((EngineInfo.getOrNull(engine.RootEntity)?.tickNumber ?? 0) > 100) {
|
63
103
|
setInitialized();
|
64
104
|
return;
|
65
105
|
}
|
106
|
+
// If we already have data from players, dont send the heartbeat messages
|
107
|
+
// if (connectedPlayers.players.length) return
|
108
|
+
// if (!stateInitialized && playerSceneEntity) {
|
109
|
+
// // Send this data to all the players connected (new and old)
|
110
|
+
// // So everyone can decide if it's the oldest one or no.
|
111
|
+
// // It's for the case that multiple users enters ~ at the same time.
|
112
|
+
// PlayersInScene.getMutable(playerSceneEntity)
|
113
|
+
// }
|
66
114
|
}
|
67
115
|
void enterScene();
|
68
116
|
}
|
69
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbmV0d29yay91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxJQUFJLFdBQVcsRUFJekIsT0FBTyxFQUdSLE1BQU0sVUFBVSxDQUFBO0FBQ2pCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFBO0FBUW5GLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsTUFBZSxFQUFFLEVBQUUsQ0FDdEQsTUFBTSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEVBQUU7SUFDdEMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxNQUFNO0lBQ3pCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtDQUN2QixDQUFDLENBQUE7QUFHSixNQUFNLENBQUMsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUE7QUFHbkMsTUFBTSxDQUFDLElBQUksaUJBQXlCLENBQUE7QUFFcEMsTUFBTSxVQUFVLGNBQWM7SUFDNUIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFBO0FBQ3pCLENBQUM7QUFJRCxNQUFNLENBQUMsSUFBSSxtQ0FBbUMsR0FBRyxLQUFLLENBQUE7QUFHdEQsTUFBTSxVQUFVLFlBQVksQ0FDMUIsU0FBbUIsRUFDbkIsV0FBd0U7SUFFeEUsS0FBSyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO1FBQ3JDLElBQUksSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUNoQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFBO1lBQzFCLE1BQU0sU0FBUyxHQUFHLHVCQUF1QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUN0RCxTQUFTLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQTtZQUMvQixTQUFTLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtTQUMxQjthQUFNO1lBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFBO1NBQy9DO0lBQ0gsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDO0FBTUQsTUFBTSxVQUFVLHlCQUF5QixDQUFDLE1BQWUsRUFBRSxPQUFpQixFQUFFLFVBQXNCO0lBQ2xHLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTTtRQUFFLE9BQU8sU0FBUyxDQUFBO0lBQ3RDLE1BQU0sY0FBYyxHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ25ELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUNqQyxjQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFBO0lBQ2hGLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQTtJQUNoRCxpQkFBaUIsR0FBRyxNQUFNLENBQUE7SUFDMUIsT0FBTyxpQkFBaUIsQ0FBQTtBQUMxQixDQUFDO0FBS0QsTUFBTSxVQUFVLFVBQVUsQ0FBQyxNQUFlLEVBQUUsT0FBaUIsRUFBRSxVQUFzQjtJQUNuRixNQUFNLGNBQWMsR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUVuRCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1FBQzFDLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUE7UUFDdEQsT0FBTyxVQUFVLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQTtLQUMvQztJQUNELE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUE7SUFDM0QsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLEVBQUU7UUFDaEUsSUFBSSxNQUFNLENBQUMsU0FBUyxHQUFHLFNBQVM7WUFBRSxPQUFPLEtBQUssQ0FBQTtLQUMvQztJQUNELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUtELE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxNQUFlO0lBQ2xELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQ3BDLFdBQVcsQ0FBQyxXQUFXLENBQ21DLENBQUE7SUFDNUQsSUFBSSxDQUFDLG1DQUFtQyxFQUFFO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQzFELElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFO1lBQzNDLG1DQUFtQyxHQUFHLElBQUksQ0FBQTtTQUMzQztLQUNGO0lBQ0QsT0FBTyxtQ0FBbUMsQ0FBQTtBQUM1QyxDQUFDO0FBU0QsTUFBTSxVQUFVLHVCQUF1QixDQUFDLE1BQWUsRUFBRSxRQUFrQixFQUFFLFdBQXVCO0lBRWxHLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBdUIsQ0FBQTtJQUVyRixLQUFLLFVBQVUsVUFBVTtRQWdCdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFVBQVUsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUU7WUFDcEUsY0FBYyxFQUFFLENBQUE7WUFDaEIsT0FBTTtTQUNQO0lBV0gsQ0FBQztJQUNELEtBQUssVUFBVSxFQUFFLENBQUE7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEVuZ2luZUluZm8gYXMgX0VuZ2luZUluZm8sXG4gIEVudGl0eSxcbiAgSUVuZ2luZSxcbiAgTmV0d29ya0VudGl0eSBhcyBfTmV0d29ya0VudGl0eSxcbiAgU2NoZW1hcyxcbiAgTGFzdFdyaXRlV2luRWxlbWVudFNldENvbXBvbmVudERlZmluaXRpb24sXG4gIFBCRW5naW5lSW5mb1xufSBmcm9tICdAZGNsL2VjcydcbmltcG9ydCB7IGNvbXBvbmVudE51bWJlckZyb21OYW1lIH0gZnJvbSAnQGRjbC9lY3MvZGlzdC9jb21wb25lbnRzL2NvbXBvbmVudC1udW1iZXInXG5cbmltcG9ydCB0eXBlIHsgR2V0VXNlckRhdGFSZXF1ZXN0LCBHZXRVc2VyRGF0YVJlc3BvbnNlIH0gZnJvbSAnfnN5c3RlbS9Vc2VySWRlbnRpdHknXG5pbXBvcnQgeyBTeW5jRW50aXR5IH0gZnJvbSAnLi9lbnRpdGllcydcbmltcG9ydCB7IElQcm9maWxlIH0gZnJvbSAnLi9tZXNzYWdlLWJ1cy1zeW5jJ1xuXG4vLyBDb21wb25lbnQgdG8gdHJhY2sgYWxsIHRoZSBwbGF5ZXJzIGFuZCB3aGVuIHRoZXkgZW50ZXIgdG8gdGhlIHNjZW5lLlxuLy8gS25vdyB3aG8gaXMgaW4gY2hhcmdlIG9mIHNlbmRpbmcgdGhlIGluaXRpYWwgc3RhdGUgKG9sZGVzdCBvbmUpXG5leHBvcnQgY29uc3QgZGVmaW5lUGxheWVyc0luU2NlbmUgPSAoZW5naW5lOiBJRW5naW5lKSA9PlxuICBlbmdpbmUuZGVmaW5lQ29tcG9uZW50KCdwbGF5ZXJzLXNjZW5lJywge1xuICAgIHRpbWVzdGFtcDogU2NoZW1hcy5OdW1iZXIsXG4gICAgdXNlcklkOiBTY2hlbWFzLlN0cmluZ1xuICB9KVxuXG4vLyBBbHJlYWR5IGluaXRpYWxpemVkIG15IHN0YXRlLiBJZ25vcmUgbmV3IHN0YXRlcyBtZXNzYWdlcy5cbmV4cG9ydCBsZXQgc3RhdGVJbml0aWFsaXplZCA9IGZhbHNlXG5cbi8vIE15IHBsYXllciBlbnRpdHkgdG8gY2hlY2sgaWYgSSdtIHRoZSBvbGRlc3QgcGxheWVyIGluIHRoZSBzY2VuZFxuZXhwb3J0IGxldCBwbGF5ZXJTY2VuZUVudGl0eTogRW50aXR5XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbml0aWFsaXplZCgpIHtcbiAgc3RhdGVJbml0aWFsaXplZCA9IHRydWVcbn1cblxuLy8gRmxhZyB0byBhdm9pZCBzZW5kaW5nIG92ZXIgdGhlIHdpcmUgYWxsIHRoZSBpbml0aWFsIG1lc3NhZ2VzIHRoYXQgdGhlIGVuZ2luZSBhZGQncyB0byB0aGUgcmVuZGVyZXJUcmFuc3BvcnRcbi8vIElOSVRJQUxfQ1JEVF9NRVNTQUdFUyB0aGF0IGFyZSBiZWluZyBwcm9jZXNzZWQgb24gdGhlIG9uU3RhcnQgbG9vcCwgYmVmb3JlIHRoZSBvblVwZGF0ZS5cbmV4cG9ydCBsZXQgSU5JVElBTF9DUkRUX1JFTkRFUkVSX01FU1NBR0VTX1NFTlQgPSBmYWxzZVxuXG4vLyBSZXRyaWV2ZSB1c2VySWQgdG8gc3RhcnQgc2VuZGluZyB0aGlzIGluZm8gYXMgdGhlIG5ldHdvcmtJZFxuZXhwb3J0IGZ1bmN0aW9uIGZldGNoUHJvZmlsZShcbiAgbXlQcm9maWxlOiBJUHJvZmlsZSxcbiAgZ2V0VXNlckRhdGE6ICh2YWx1ZTogR2V0VXNlckRhdGFSZXF1ZXN0KSA9PiBQcm9taXNlPEdldFVzZXJEYXRhUmVzcG9uc2U+XG4pIHtcbiAgdm9pZCBnZXRVc2VyRGF0YSh7fSkudGhlbigoeyBkYXRhIH0pID0+IHtcbiAgICBpZiAoZGF0YT8udXNlcklkKSB7XG4gICAgICBjb25zdCB1c2VySWQgPSBkYXRhLnVzZXJJZFxuICAgICAgY29uc3QgbmV0d29ya0lkID0gY29tcG9uZW50TnVtYmVyRnJvbU5hbWUoZGF0YS51c2VySWQpXG4gICAgICBteVByb2ZpbGUubmV0d29ya0lkID0gbmV0d29ya0lkXG4gICAgICBteVByb2ZpbGUudXNlcklkID0gdXNlcklkXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmV0Y2ggcHJvZmlsZSBkYXRhYClcbiAgICB9XG4gIH0pXG59XG5cbi8qKlxuICogQWRkJ3MgdGhlIHVzZXIgaW5mb3JtYXRpb24gYWJvdXQgd2hlbiBoZSBqb2luZWQgdGhlIHNjZW5lLlxuICogSXQncyB1c2VkIHRvIGNoZWNrIHdobyBpcyB0aGUgb2xkZXN0IG9uZSwgdG8gc3luYyB0aGUgc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBsYXllclRpbWVzdGFtcERhdGEoZW5naW5lOiBJRW5naW5lLCBwcm9maWxlOiBJUHJvZmlsZSwgc3luY0VudGl0eTogU3luY0VudGl0eSkge1xuICBpZiAoIXByb2ZpbGU/LnVzZXJJZCkgcmV0dXJuIHVuZGVmaW5lZFxuICBjb25zdCBQbGF5ZXJzSW5TY2VuZSA9IGRlZmluZVBsYXllcnNJblNjZW5lKGVuZ2luZSlcbiAgY29uc3QgZW50aXR5ID0gZW5naW5lLmFkZEVudGl0eSgpXG4gIFBsYXllcnNJblNjZW5lLmNyZWF0ZShlbnRpdHksIHsgdGltZXN0YW1wOiBEYXRlLm5vdygpLCB1c2VySWQ6IHByb2ZpbGUudXNlcklkIH0pXG4gIHN5bmNFbnRpdHkoZW50aXR5LCBbUGxheWVyc0luU2NlbmUuY29tcG9uZW50SWRdKVxuICBwbGF5ZXJTY2VuZUVudGl0eSA9IGVudGl0eVxuICByZXR1cm4gcGxheWVyU2NlbmVFbnRpdHlcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBJJ20gdGhlIG9sZGVyIHVzZXIgdG8gc2VuZCB0aGUgaW5pdGlhbCBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gb2xkZXN0VXNlcihlbmdpbmU6IElFbmdpbmUsIHByb2ZpbGU6IElQcm9maWxlLCBzeW5jRW50aXR5OiBTeW5jRW50aXR5KTogYm9vbGVhbiB7XG4gIGNvbnN0IFBsYXllcnNJblNjZW5lID0gZGVmaW5lUGxheWVyc0luU2NlbmUoZW5naW5lKVxuICAvLyBXaGVuIHRoZSB1c2VyIGxlYXZlcyB0aGUgc2NlbmUgYnV0IGl0J3Mgc3RpbGwgY29ubmVjdGVkLlxuICBpZiAoIVBsYXllcnNJblNjZW5lLmhhcyhwbGF5ZXJTY2VuZUVudGl0eSkpIHtcbiAgICBjcmVhdGVQbGF5ZXJUaW1lc3RhbXBEYXRhKGVuZ2luZSwgcHJvZmlsZSwgc3luY0VudGl0eSlcbiAgICByZXR1cm4gb2xkZXN0VXNlcihlbmdpbmUsIHByb2ZpbGUsIHN5bmNFbnRpdHkpXG4gIH1cbiAgY29uc3QgeyB0aW1lc3RhbXAgfSA9IFBsYXllcnNJblNjZW5lLmdldChwbGF5ZXJTY2VuZUVudGl0eSlcbiAgZm9yIChjb25zdCBbXywgcGxheWVyXSBvZiBlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKFBsYXllcnNJblNjZW5lKSkge1xuICAgIGlmIChwbGF5ZXIudGltZXN0YW1wIDwgdGltZXN0YW1wKSByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIElnbm9yZSBDUkRUJ3MgaW5pdGlhbCBtZXNzYWdlcyBmcm9tIHRoZSByZW5kZXJlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNUcmFuc3BvcnRJc1JlYWR5KGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCBFbmdpbmVJbmZvID0gZW5naW5lLmdldENvbXBvbmVudChcbiAgICBfRW5naW5lSW5mby5jb21wb25lbnRJZFxuICApIGFzIExhc3RXcml0ZVdpbkVsZW1lbnRTZXRDb21wb25lbnREZWZpbml0aW9uPFBCRW5naW5lSW5mbz5cbiAgaWYgKCFJTklUSUFMX0NSRFRfUkVOREVSRVJfTUVTU0FHRVNfU0VOVCkge1xuICAgIGNvbnN0IGVuZ2luZUluZm8gPSBFbmdpbmVJbmZvLmdldE9yTnVsbChlbmdpbmUuUm9vdEVudGl0eSlcbiAgICBpZiAoZW5naW5lSW5mbyAmJiBlbmdpbmVJbmZvLnRpY2tOdW1iZXIgPiAyKSB7XG4gICAgICBJTklUSUFMX0NSRFRfUkVOREVSRVJfTUVTU0FHRVNfU0VOVCA9IHRydWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIElOSVRJQUxfQ1JEVF9SRU5ERVJFUl9NRVNTQUdFU19TRU5UXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgd2UgYXJlIGFscmVhZHkgaW5pdGlhbGl6ZWRcbiAqIEFkZCB0aGUgcGxheWVyU2NlbmVEYXRhIGNvbXBvbmVudCBhbmQgc3luY3Jvbml6ZSBpdCB0aWxsIHdlIHJlY2VpdmUgdGhlIHN0YXRlLlxuICogVGhpcyBmbiBzaG91bGQgYmUgYWRkZWQgYXMgYSBzeXN0ZW0gc28gaXQgcnVucyBvbiBldmVyeSB0aWNrXG4gKi9cbi8vIFRPRE86IEhhZCB0byBjb21tZW50IGFsbCB0aGUgbG9naWMgYmVjYXVzZSBnZXRDb25uZWN0ZWRQbGF5ZXJzIHdhcyBub3Qgd29ya2luZyBhcyBleHBlY3RlZFxuLy8gQSBsb3Qgb2YgcmFpc2UgY29uZGl0aW9ucy4gRm9yIG5vdyB3ZSB3aWxsIGdvIHdpdGggdGhlIGFwcHJvYWNoIHRoYXQgZXZlcnkgY2xpZW50IHRoYXQgaXQncyBpbml0aWFsaXplZCB3aWxsIHNlbmQgaGlzIGNyZHQgc3RhdGUuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVJbml0aWFsaXplZENoZWNrZXIoZW5naW5lOiBJRW5naW5lLCBfcHJvZmlsZTogSVByb2ZpbGUsIF9zeW5jRW50aXR5OiBTeW5jRW50aXR5KSB7XG4gIC8vIGNvbnN0IFBsYXllcnNJblNjZW5lID0gZGVmaW5lUGxheWVyc0luU2NlbmUoZW5naW5lKVxuICBjb25zdCBFbmdpbmVJbmZvID0gZW5naW5lLmdldENvbXBvbmVudChfRW5naW5lSW5mby5jb21wb25lbnRJZCkgYXMgdHlwZW9mIF9FbmdpbmVJbmZvXG4gIC8vIGNvbnN0IE5ldHdvcmtFbnRpdHkgPSBlbmdpbmUuZ2V0Q29tcG9uZW50KF9OZXR3b3JrRW50aXR5LmNvbXBvbmVudElkKSBhcyBJTmV0b3dya0VudGl0eVxuICBhc3luYyBmdW5jdGlvbiBlbnRlclNjZW5lKCkge1xuICAgIC8vIGlmICghcGxheWVyU2NlbmVFbnRpdHkpIHtcbiAgICAvLyAgIGNyZWF0ZVBsYXllclRpbWVzdGFtcERhdGEoZW5naW5lLCBwcm9maWxlLCBzeW5jRW50aXR5KVxuICAgIC8vIH1cblxuICAgIC8qKlxuICAgICAqIEtlZXBzIFBsYXllcnNJblNjZW5lIHVwLXRvLWRhdGUgd2l0aCB0aGUgY3VycmVudCBwbGF5ZXJzLlxuICAgICAqL1xuICAgIC8vIGNvbnN0IGNvbm5lY3RlZFBsYXllcnMgPSBhd2FpdCBnZXRDb25uZWN0ZWRQbGF5ZXJzKHt9KVxuICAgIC8vIGZvciAoY29uc3QgW2VudGl0eSwgcGxheWVyXSBvZiBlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKFBsYXllcnNJblNjZW5lKSkge1xuICAgIC8vICAgaWYgKCFjb25uZWN0ZWRQbGF5ZXJzLnBsYXllcnMuZmluZCgoJCkgPT4gJC51c2VySWQgPT09IHBsYXllci51c2VySWQpKSB7XG4gICAgLy8gICAgIFBsYXllcnNJblNjZW5lLmRlbGV0ZUZyb20oZW50aXR5KVxuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIC8vIFdhaXQgZm9yIGNvbW1zIHRvIGJlIHJlYWR5ID8/IH4zMDAwbXNcbiAgICBpZiAoKEVuZ2luZUluZm8uZ2V0T3JOdWxsKGVuZ2luZS5Sb290RW50aXR5KT8udGlja051bWJlciA/PyAwKSA+IDEwMCkge1xuICAgICAgc2V0SW5pdGlhbGl6ZWQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIGRhdGEgZnJvbSBwbGF5ZXJzLCBkb250IHNlbmQgdGhlIGhlYXJ0YmVhdCBtZXNzYWdlc1xuICAgIC8vIGlmIChjb25uZWN0ZWRQbGF5ZXJzLnBsYXllcnMubGVuZ3RoKSByZXR1cm5cblxuICAgIC8vIGlmICghc3RhdGVJbml0aWFsaXplZCAmJiBwbGF5ZXJTY2VuZUVudGl0eSkge1xuICAgIC8vICAgLy8gU2VuZCB0aGlzIGRhdGEgdG8gYWxsIHRoZSBwbGF5ZXJzIGNvbm5lY3RlZCAobmV3IGFuZCBvbGQpXG4gICAgLy8gICAvLyBTbyBldmVyeW9uZSBjYW4gZGVjaWRlIGlmIGl0J3MgdGhlIG9sZGVzdCBvbmUgb3Igbm8uXG4gICAgLy8gICAvLyBJdCdzIGZvciB0aGUgY2FzZSB0aGF0IG11bHRpcGxlIHVzZXJzIGVudGVycyB+IGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgLy8gICBQbGF5ZXJzSW5TY2VuZS5nZXRNdXRhYmxlKHBsYXllclNjZW5lRW50aXR5KVxuICAgIC8vIH1cbiAgfVxuICB2b2lkIGVudGVyU2NlbmUoKVxufVxuIl19
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbmV0d29yay91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxJQUFJLFdBQVcsRUFJekIsT0FBTyxFQUdSLE1BQU0sVUFBVSxDQUFBO0FBQ2pCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFBO0FBTW5GLHVFQUF1RTtBQUN2RSxrRUFBa0U7QUFDbEUsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxNQUFlLEVBQUUsRUFBRSxDQUN0RCxNQUFNLENBQUMsZUFBZSxDQUFDLGVBQWUsRUFBRTtJQUN0QyxTQUFTLEVBQUUsT0FBTyxDQUFDLE1BQU07SUFDekIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0NBQ3ZCLENBQUMsQ0FBQTtBQUVKLDREQUE0RDtBQUM1RCxNQUFNLENBQUMsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUE7QUFFbkMsa0VBQWtFO0FBQ2xFLE1BQU0sQ0FBQyxJQUFJLGlCQUF5QixDQUFBO0FBRXBDLE1BQU0sVUFBVSxjQUFjO0lBQzVCLGdCQUFnQixHQUFHLElBQUksQ0FBQTtBQUN6QixDQUFDO0FBRUQsOEdBQThHO0FBQzlHLDJGQUEyRjtBQUMzRixNQUFNLENBQUMsSUFBSSxtQ0FBbUMsR0FBRyxLQUFLLENBQUE7QUFFdEQsOERBQThEO0FBQzlELE1BQU0sVUFBVSxZQUFZLENBQzFCLFNBQW1CLEVBQ25CLFdBQXdFO0lBRXhFLEtBQUssV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTtRQUNyQyxJQUFJLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDaEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQTtZQUMxQixNQUFNLFNBQVMsR0FBRyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7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RUosd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxVQUFVLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFO1lBQ3BFLGNBQWMsRUFBRSxDQUFBO1lBQ2hCLE9BQU07U0FDUDtRQUVELHlFQUF5RTtRQUN6RSw4Q0FBOEM7UUFFOUMsZ0RBQWdEO1FBQ2hELGlFQUFpRTtRQUNqRSw0REFBNEQ7UUFDNUQsd0VBQXdFO1FBQ3hFLGlEQUFpRDtRQUNqRCxJQUFJO0lBQ04sQ0FBQztJQUNELEtBQUssVUFBVSxFQUFFLENBQUE7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEVuZ2luZUluZm8gYXMgX0VuZ2luZUluZm8sXG4gIEVudGl0eSxcbiAgSUVuZ2luZSxcbiAgTmV0d29ya0VudGl0eSBhcyBfTmV0d29ya0VudGl0eSxcbiAgU2NoZW1hcyxcbiAgTGFzdFdyaXRlV2luRWxlbWVudFNldENvbXBvbmVudERlZmluaXRpb24sXG4gIFBCRW5naW5lSW5mb1xufSBmcm9tICdAZGNsL2VjcydcbmltcG9ydCB7IGNvbXBvbmVudE51bWJlckZyb21OYW1lIH0gZnJvbSAnQGRjbC9lY3MvZGlzdC9jb21wb25lbnRzL2NvbXBvbmVudC1udW1iZXInXG5cbmltcG9ydCB0eXBlIHsgR2V0VXNlckRhdGFSZXF1ZXN0LCBHZXRVc2VyRGF0YVJlc3BvbnNlIH0gZnJvbSAnfnN5c3RlbS9Vc2VySWRlbnRpdHknXG5pbXBvcnQgeyBTeW5jRW50aXR5IH0gZnJvbSAnLi9lbnRpdGllcydcbmltcG9ydCB7IElQcm9maWxlIH0gZnJvbSAnLi9tZXNzYWdlLWJ1cy1zeW5jJ1xuXG4vLyBDb21wb25lbnQgdG8gdHJhY2sgYWxsIHRoZSBwbGF5ZXJzIGFuZCB3aGVuIHRoZXkgZW50ZXIgdG8gdGhlIHNjZW5lLlxuLy8gS25vdyB3aG8gaXMgaW4gY2hhcmdlIG9mIHNlbmRpbmcgdGhlIGluaXRpYWwgc3RhdGUgKG9sZGVzdCBvbmUpXG5leHBvcnQgY29uc3QgZGVmaW5lUGxheWVyc0luU2NlbmUgPSAoZW5naW5lOiBJRW5naW5lKSA9PlxuICBlbmdpbmUuZGVmaW5lQ29tcG9uZW50KCdwbGF5ZXJzLXNjZW5lJywge1xuICAgIHRpbWVzdGFtcDogU2NoZW1hcy5OdW1iZXIsXG4gICAgdXNlcklkOiBTY2hlbWFzLlN0cmluZ1xuICB9KVxuXG4vLyBBbHJlYWR5IGluaXRpYWxpemVkIG15IHN0YXRlLiBJZ25vcmUgbmV3IHN0YXRlcyBtZXNzYWdlcy5cbmV4cG9ydCBsZXQgc3RhdGVJbml0aWFsaXplZCA9IGZhbHNlXG5cbi8vIE15IHBsYXllciBlbnRpdHkgdG8gY2hlY2sgaWYgSSdtIHRoZSBvbGRlc3QgcGxheWVyIGluIHRoZSBzY2VuZFxuZXhwb3J0IGxldCBwbGF5ZXJTY2VuZUVudGl0eTogRW50aXR5XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbml0aWFsaXplZCgpIHtcbiAgc3RhdGVJbml0aWFsaXplZCA9IHRydWVcbn1cblxuLy8gRmxhZyB0byBhdm9pZCBzZW5kaW5nIG92ZXIgdGhlIHdpcmUgYWxsIHRoZSBpbml0aWFsIG1lc3NhZ2VzIHRoYXQgdGhlIGVuZ2luZSBhZGQncyB0byB0aGUgcmVuZGVyZXJUcmFuc3BvcnRcbi8vIElOSVRJQUxfQ1JEVF9NRVNTQUdFUyB0aGF0IGFyZSBiZWluZyBwcm9jZXNzZWQgb24gdGhlIG9uU3RhcnQgbG9vcCwgYmVmb3JlIHRoZSBvblVwZGF0ZS5cbmV4cG9ydCBsZXQgSU5JVElBTF9DUkRUX1JFTkRFUkVSX01FU1NBR0VTX1NFTlQgPSBmYWxzZVxuXG4vLyBSZXRyaWV2ZSB1c2VySWQgdG8gc3RhcnQgc2VuZGluZyB0aGlzIGluZm8gYXMgdGhlIG5ldHdvcmtJZFxuZXhwb3J0IGZ1bmN0aW9uIGZldGNoUHJvZmlsZShcbiAgbXlQcm9maWxlOiBJUHJvZmlsZSxcbiAgZ2V0VXNlckRhdGE6ICh2YWx1ZTogR2V0VXNlckRhdGFSZXF1ZXN0KSA9PiBQcm9taXNlPEdldFVzZXJEYXRhUmVzcG9uc2U+XG4pIHtcbiAgdm9pZCBnZXRVc2VyRGF0YSh7fSkudGhlbigoeyBkYXRhIH0pID0+IHtcbiAgICBpZiAoZGF0YT8udXNlcklkKSB7XG4gICAgICBjb25zdCB1c2VySWQgPSBkYXRhLnVzZXJJZFxuICAgICAgY29uc3QgbmV0d29ya0lkID0gY29tcG9uZW50TnVtYmVyRnJvbU5hbWUoZGF0YS51c2VySWQpXG4gICAgICBteVByb2ZpbGUubmV0d29ya0lkID0gbmV0d29ya0lkXG4gICAgICBteVByb2ZpbGUudXNlcklkID0gdXNlcklkXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmV0Y2ggcHJvZmlsZSBkYXRhYClcbiAgICB9XG4gIH0pXG59XG5cbi8qKlxuICogQWRkJ3MgdGhlIHVzZXIgaW5mb3JtYXRpb24gYWJvdXQgd2hlbiBoZSBqb2luZWQgdGhlIHNjZW5lLlxuICogSXQncyB1c2VkIHRvIGNoZWNrIHdobyBpcyB0aGUgb2xkZXN0IG9uZSwgdG8gc3luYyB0aGUgc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBsYXllclRpbWVzdGFtcERhdGEoZW5naW5lOiBJRW5naW5lLCBwcm9maWxlOiBJUHJvZmlsZSwgc3luY0VudGl0eTogU3luY0VudGl0eSkge1xuICBpZiAoIXByb2ZpbGU/LnVzZXJJZCkgcmV0dXJuIHVuZGVmaW5lZFxuICBjb25zdCBQbGF5ZXJzSW5TY2VuZSA9IGRlZmluZVBsYXllcnNJblNjZW5lKGVuZ2luZSlcbiAgY29uc3QgZW50aXR5ID0gZW5naW5lLmFkZEVudGl0eSgpXG4gIFBsYXllcnNJblNjZW5lLmNyZWF0ZShlbnRpdHksIHsgdGltZXN0YW1wOiBEYXRlLm5vdygpLCB1c2VySWQ6IHByb2ZpbGUudXNlcklkIH0pXG4gIHN5bmNFbnRpdHkoZW50aXR5LCBbUGxheWVyc0luU2NlbmUuY29tcG9uZW50SWRdKVxuICBwbGF5ZXJTY2VuZUVudGl0eSA9IGVudGl0eVxuICByZXR1cm4gcGxheWVyU2NlbmVFbnRpdHlcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBJJ20gdGhlIG9sZGVyIHVzZXIgdG8gc2VuZCB0aGUgaW5pdGlhbCBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gb2xkZXN0VXNlcihlbmdpbmU6IElFbmdpbmUsIHByb2ZpbGU6IElQcm9maWxlLCBzeW5jRW50aXR5OiBTeW5jRW50aXR5KTogYm9vbGVhbiB7XG4gIGNvbnN0IFBsYXllcnNJblNjZW5lID0gZGVmaW5lUGxheWVyc0luU2NlbmUoZW5naW5lKVxuICAvLyBXaGVuIHRoZSB1c2VyIGxlYXZlcyB0aGUgc2NlbmUgYnV0IGl0J3Mgc3RpbGwgY29ubmVjdGVkLlxuICBpZiAoIVBsYXllcnNJblNjZW5lLmhhcyhwbGF5ZXJTY2VuZUVudGl0eSkpIHtcbiAgICBjcmVhdGVQbGF5ZXJUaW1lc3RhbXBEYXRhKGVuZ2luZSwgcHJvZmlsZSwgc3luY0VudGl0eSlcbiAgICByZXR1cm4gb2xkZXN0VXNlcihlbmdpbmUsIHByb2ZpbGUsIHN5bmNFbnRpdHkpXG4gIH1cbiAgY29uc3QgeyB0aW1lc3RhbXAgfSA9IFBsYXllcnNJblNjZW5lLmdldChwbGF5ZXJTY2VuZUVudGl0eSlcbiAgZm9yIChjb25zdCBbXywgcGxheWVyXSBvZiBlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKFBsYXllcnNJblNjZW5lKSkge1xuICAgIGlmIChwbGF5ZXIudGltZXN0YW1wIDwgdGltZXN0YW1wKSByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIElnbm9yZSBDUkRUJ3MgaW5pdGlhbCBtZXNzYWdlcyBmcm9tIHRoZSByZW5kZXJlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNUcmFuc3BvcnRJc1JlYWR5KGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCBFbmdpbmVJbmZvID0gZW5naW5lLmdldENvbXBvbmVudChcbiAgICBfRW5naW5lSW5mby5jb21wb25lbnRJZFxuICApIGFzIExhc3RXcml0ZVdpbkVsZW1lbnRTZXRDb21wb25lbnREZWZpbml0aW9uPFBCRW5naW5lSW5mbz5cbiAgaWYgKCFJTklUSUFMX0NSRFRfUkVOREVSRVJfTUVTU0FHRVNfU0VOVCkge1xuICAgIGNvbnN0IGVuZ2luZUluZm8gPSBFbmdpbmVJbmZvLmdldE9yTnVsbChlbmdpbmUuUm9vdEVudGl0eSlcbiAgICBpZiAoZW5naW5lSW5mbyAmJiBlbmdpbmVJbmZvLnRpY2tOdW1iZXIgPiAyKSB7XG4gICAgICBJTklUSUFMX0NSRFRfUkVOREVSRVJfTUVTU0FHRVNfU0VOVCA9IHRydWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIElOSVRJQUxfQ1JEVF9SRU5ERVJFUl9NRVNTQUdFU19TRU5UXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgd2UgYXJlIGFscmVhZHkgaW5pdGlhbGl6ZWRcbiAqIEFkZCB0aGUgcGxheWVyU2NlbmVEYXRhIGNvbXBvbmVudCBhbmQgc3luY3Jvbml6ZSBpdCB0aWxsIHdlIHJlY2VpdmUgdGhlIHN0YXRlLlxuICogVGhpcyBmbiBzaG91bGQgYmUgYWRkZWQgYXMgYSBzeXN0ZW0gc28gaXQgcnVucyBvbiBldmVyeSB0aWNrXG4gKi9cbi8vIFRPRE86IEhhZCB0byBjb21tZW50IGFsbCB0aGUgbG9naWMgYmVjYXVzZSBnZXRDb25uZWN0ZWRQbGF5ZXJzIHdhcyBub3Qgd29ya2luZyBhcyBleHBlY3RlZFxuLy8gQSBsb3Qgb2YgcmFpc2UgY29uZGl0aW9ucy4gRm9yIG5vdyB3ZSB3aWxsIGdvIHdpdGggdGhlIGFwcHJvYWNoIHRoYXQgZXZlcnkgY2xpZW50IHRoYXQgaXQncyBpbml0aWFsaXplZCB3aWxsIHNlbmQgaGlzIGNyZHQgc3RhdGUuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVJbml0aWFsaXplZENoZWNrZXIoZW5naW5lOiBJRW5naW5lLCBfcHJvZmlsZTogSVByb2ZpbGUsIF9zeW5jRW50aXR5OiBTeW5jRW50aXR5KSB7XG4gIC8vIGNvbnN0IFBsYXllcnNJblNjZW5lID0gZGVmaW5lUGxheWVyc0luU2NlbmUoZW5naW5lKVxuICBjb25zdCBFbmdpbmVJbmZvID0gZW5naW5lLmdldENvbXBvbmVudChfRW5naW5lSW5mby5jb21wb25lbnRJZCkgYXMgdHlwZW9mIF9FbmdpbmVJbmZvXG4gIC8vIGNvbnN0IE5ldHdvcmtFbnRpdHkgPSBlbmdpbmUuZ2V0Q29tcG9uZW50KF9OZXR3b3JrRW50aXR5LmNvbXBvbmVudElkKSBhcyBJTmV0b3dya0VudGl0eVxuICBhc3luYyBmdW5jdGlvbiBlbnRlclNjZW5lKCkge1xuICAgIC8vIGlmICghcGxheWVyU2NlbmVFbnRpdHkpIHtcbiAgICAvLyAgIGNyZWF0ZVBsYXllclRpbWVzdGFtcERhdGEoZW5naW5lLCBwcm9maWxlLCBzeW5jRW50aXR5KVxuICAgIC8vIH1cblxuICAgIC8qKlxuICAgICAqIEtlZXBzIFBsYXllcnNJblNjZW5lIHVwLXRvLWRhdGUgd2l0aCB0aGUgY3VycmVudCBwbGF5ZXJzLlxuICAgICAqL1xuICAgIC8vIGNvbnN0IGNvbm5lY3RlZFBsYXllcnMgPSBhd2FpdCBnZXRDb25uZWN0ZWRQbGF5ZXJzKHt9KVxuICAgIC8vIGZvciAoY29uc3QgW2VudGl0eSwgcGxheWVyXSBvZiBlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKFBsYXllcnNJblNjZW5lKSkge1xuICAgIC8vICAgaWYgKCFjb25uZWN0ZWRQbGF5ZXJzLnBsYXllcnMuZmluZCgoJCkgPT4gJC51c2VySWQgPT09IHBsYXllci51c2VySWQpKSB7XG4gICAgLy8gICAgIFBsYXllcnNJblNjZW5lLmRlbGV0ZUZyb20oZW50aXR5KVxuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIC8vIFdhaXQgZm9yIGNvbW1zIHRvIGJlIHJlYWR5ID8/IH4zMDAwbXNcbiAgICBpZiAoKEVuZ2luZUluZm8uZ2V0T3JOdWxsKGVuZ2luZS5Sb290RW50aXR5KT8udGlja051bWJlciA/PyAwKSA+IDEwMCkge1xuICAgICAgc2V0SW5pdGlhbGl6ZWQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIGRhdGEgZnJvbSBwbGF5ZXJzLCBkb250IHNlbmQgdGhlIGhlYXJ0YmVhdCBtZXNzYWdlc1xuICAgIC8vIGlmIChjb25uZWN0ZWRQbGF5ZXJzLnBsYXllcnMubGVuZ3RoKSByZXR1cm5cblxuICAgIC8vIGlmICghc3RhdGVJbml0aWFsaXplZCAmJiBwbGF5ZXJTY2VuZUVudGl0eSkge1xuICAgIC8vICAgLy8gU2VuZCB0aGlzIGRhdGEgdG8gYWxsIHRoZSBwbGF5ZXJzIGNvbm5lY3RlZCAobmV3IGFuZCBvbGQpXG4gICAgLy8gICAvLyBTbyBldmVyeW9uZSBjYW4gZGVjaWRlIGlmIGl0J3MgdGhlIG9sZGVzdCBvbmUgb3Igbm8uXG4gICAgLy8gICAvLyBJdCdzIGZvciB0aGUgY2FzZSB0aGF0IG11bHRpcGxlIHVzZXJzIGVudGVycyB+IGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgLy8gICBQbGF5ZXJzSW5TY2VuZS5nZXRNdXRhYmxlKHBsYXllclNjZW5lRW50aXR5KVxuICAgIC8vIH1cbiAgfVxuICB2b2lkIGVudGVyU2NlbmUoKVxufVxuIl19
|