@streamr/trackerless-network 103.1.2 → 103.2.0-experiment.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/exports.cjs +4489 -0
- package/dist/exports.cjs.map +1 -0
- package/dist/exports.d.ts +1391 -0
- package/dist/exports.js +4477 -0
- package/dist/exports.js.map +1 -0
- package/package.json +25 -18
- package/dist/generated/google/protobuf/any.d.ts +0 -180
- package/dist/generated/google/protobuf/any.js +0 -155
- package/dist/generated/google/protobuf/any.js.map +0 -1
- package/dist/generated/google/protobuf/empty.d.ts +0 -31
- package/dist/generated/google/protobuf/empty.js +0 -45
- package/dist/generated/google/protobuf/empty.js.map +0 -1
- package/dist/generated/google/protobuf/timestamp.d.ts +0 -156
- package/dist/generated/google/protobuf/timestamp.js +0 -136
- package/dist/generated/google/protobuf/timestamp.js.map +0 -1
- package/dist/generated/packages/dht/protos/DhtRpc.client.d.ts +0 -371
- package/dist/generated/packages/dht/protos/DhtRpc.client.js +0 -292
- package/dist/generated/packages/dht/protos/DhtRpc.client.js.map +0 -1
- package/dist/generated/packages/dht/protos/DhtRpc.d.ts +0 -1031
- package/dist/generated/packages/dht/protos/DhtRpc.js +0 -702
- package/dist/generated/packages/dht/protos/DhtRpc.js.map +0 -1
- package/dist/generated/packages/dht/protos/DhtRpc.server.d.ts +0 -168
- package/dist/generated/packages/dht/protos/DhtRpc.server.js +0 -3
- package/dist/generated/packages/dht/protos/DhtRpc.server.js.map +0 -1
- package/dist/generated/packages/proto-rpc/protos/ProtoRpc.d.ts +0 -87
- package/dist/generated/packages/proto-rpc/protos/ProtoRpc.js +0 -66
- package/dist/generated/packages/proto-rpc/protos/ProtoRpc.js.map +0 -1
- package/dist/generated/packages/trackerless-network/protos/NetworkRpc.client.d.ts +0 -237
- package/dist/generated/packages/trackerless-network/protos/NetworkRpc.client.js +0 -190
- package/dist/generated/packages/trackerless-network/protos/NetworkRpc.client.js.map +0 -1
- package/dist/generated/packages/trackerless-network/protos/NetworkRpc.d.ts +0 -687
- package/dist/generated/packages/trackerless-network/protos/NetworkRpc.js +0 -479
- package/dist/generated/packages/trackerless-network/protos/NetworkRpc.js.map +0 -1
- package/dist/generated/packages/trackerless-network/protos/NetworkRpc.server.d.ts +0 -102
- package/dist/generated/packages/trackerless-network/protos/NetworkRpc.server.js +0 -3
- package/dist/generated/packages/trackerless-network/protos/NetworkRpc.server.js.map +0 -1
- package/dist/package.json +0 -56
- package/dist/src/ContentDeliveryManager.d.ts +0 -82
- package/dist/src/ContentDeliveryManager.js +0 -325
- package/dist/src/ContentDeliveryManager.js.map +0 -1
- package/dist/src/NetworkNode.d.ts +0 -44
- package/dist/src/NetworkNode.js +0 -98
- package/dist/src/NetworkNode.js.map +0 -1
- package/dist/src/NetworkStack.d.ts +0 -36
- package/dist/src/NetworkStack.js +0 -165
- package/dist/src/NetworkStack.js.map +0 -1
- package/dist/src/NodeInfoClient.d.ts +0 -9
- package/dist/src/NodeInfoClient.js +0 -21
- package/dist/src/NodeInfoClient.js.map +0 -1
- package/dist/src/NodeInfoRpcLocal.d.ts +0 -12
- package/dist/src/NodeInfoRpcLocal.js +0 -22
- package/dist/src/NodeInfoRpcLocal.js.map +0 -1
- package/dist/src/NodeInfoRpcRemote.d.ts +0 -6
- package/dist/src/NodeInfoRpcRemote.js +0 -11
- package/dist/src/NodeInfoRpcRemote.js.map +0 -1
- package/dist/src/StreamPartNetworkSplitAvoidance.d.ts +0 -18
- package/dist/src/StreamPartNetworkSplitAvoidance.js +0 -74
- package/dist/src/StreamPartNetworkSplitAvoidance.js.map +0 -1
- package/dist/src/StreamPartReconnect.d.ts +0 -11
- package/dist/src/StreamPartReconnect.js +0 -37
- package/dist/src/StreamPartReconnect.js.map +0 -1
- package/dist/src/content-delivery-layer/ContentDeliveryLayerNode.d.ts +0 -78
- package/dist/src/content-delivery-layer/ContentDeliveryLayerNode.js +0 -240
- package/dist/src/content-delivery-layer/ContentDeliveryLayerNode.js.map +0 -1
- package/dist/src/content-delivery-layer/ContentDeliveryRpcLocal.d.ts +0 -23
- package/dist/src/content-delivery-layer/ContentDeliveryRpcLocal.js +0 -40
- package/dist/src/content-delivery-layer/ContentDeliveryRpcLocal.js.map +0 -1
- package/dist/src/content-delivery-layer/ContentDeliveryRpcRemote.d.ts +0 -11
- package/dist/src/content-delivery-layer/ContentDeliveryRpcRemote.js +0 -38
- package/dist/src/content-delivery-layer/ContentDeliveryRpcRemote.js.map +0 -1
- package/dist/src/content-delivery-layer/DuplicateMessageDetector.d.ts +0 -55
- package/dist/src/content-delivery-layer/DuplicateMessageDetector.js +0 -159
- package/dist/src/content-delivery-layer/DuplicateMessageDetector.js.map +0 -1
- package/dist/src/content-delivery-layer/NodeList.d.ts +0 -26
- package/dist/src/content-delivery-layer/NodeList.js +0 -93
- package/dist/src/content-delivery-layer/NodeList.js.map +0 -1
- package/dist/src/content-delivery-layer/createContentDeliveryLayerNode.d.ts +0 -14
- package/dist/src/content-delivery-layer/createContentDeliveryLayerNode.js +0 -129
- package/dist/src/content-delivery-layer/createContentDeliveryLayerNode.js.map +0 -1
- package/dist/src/content-delivery-layer/formStreamPartDeliveryServiceId.d.ts +0 -3
- package/dist/src/content-delivery-layer/formStreamPartDeliveryServiceId.js +0 -9
- package/dist/src/content-delivery-layer/formStreamPartDeliveryServiceId.js.map +0 -1
- package/dist/src/content-delivery-layer/inspection/InspectSession.d.ts +0 -19
- package/dist/src/content-delivery-layer/inspection/InspectSession.js +0 -43
- package/dist/src/content-delivery-layer/inspection/InspectSession.js.map +0 -1
- package/dist/src/content-delivery-layer/inspection/Inspector.d.ts +0 -30
- package/dist/src/content-delivery-layer/inspection/Inspector.js +0 -75
- package/dist/src/content-delivery-layer/inspection/Inspector.js.map +0 -1
- package/dist/src/content-delivery-layer/neighbor-discovery/HandshakeRpcLocal.d.ts +0 -29
- package/dist/src/content-delivery-layer/neighbor-discovery/HandshakeRpcLocal.js +0 -106
- package/dist/src/content-delivery-layer/neighbor-discovery/HandshakeRpcLocal.js.map +0 -1
- package/dist/src/content-delivery-layer/neighbor-discovery/HandshakeRpcRemote.d.ts +0 -14
- package/dist/src/content-delivery-layer/neighbor-discovery/HandshakeRpcRemote.js +0 -55
- package/dist/src/content-delivery-layer/neighbor-discovery/HandshakeRpcRemote.js.map +0 -1
- package/dist/src/content-delivery-layer/neighbor-discovery/Handshaker.d.ts +0 -32
- package/dist/src/content-delivery-layer/neighbor-discovery/Handshaker.js +0 -149
- package/dist/src/content-delivery-layer/neighbor-discovery/Handshaker.js.map +0 -1
- package/dist/src/content-delivery-layer/neighbor-discovery/NeighborFinder.d.ts +0 -22
- package/dist/src/content-delivery-layer/neighbor-discovery/NeighborFinder.js +0 -64
- package/dist/src/content-delivery-layer/neighbor-discovery/NeighborFinder.js.map +0 -1
- package/dist/src/content-delivery-layer/neighbor-discovery/NeighborUpdateManager.d.ts +0 -27
- package/dist/src/content-delivery-layer/neighbor-discovery/NeighborUpdateManager.js +0 -47
- package/dist/src/content-delivery-layer/neighbor-discovery/NeighborUpdateManager.js.map +0 -1
- package/dist/src/content-delivery-layer/neighbor-discovery/NeighborUpdateRpcLocal.d.ts +0 -25
- package/dist/src/content-delivery-layer/neighbor-discovery/NeighborUpdateRpcLocal.js +0 -52
- package/dist/src/content-delivery-layer/neighbor-discovery/NeighborUpdateRpcLocal.js.map +0 -1
- package/dist/src/content-delivery-layer/neighbor-discovery/NeighborUpdateRpcRemote.d.ts +0 -11
- package/dist/src/content-delivery-layer/neighbor-discovery/NeighborUpdateRpcRemote.js +0 -31
- package/dist/src/content-delivery-layer/neighbor-discovery/NeighborUpdateRpcRemote.js.map +0 -1
- package/dist/src/content-delivery-layer/plumtree/PausedNeighbors.d.ts +0 -12
- package/dist/src/content-delivery-layer/plumtree/PausedNeighbors.js +0 -50
- package/dist/src/content-delivery-layer/plumtree/PausedNeighbors.js.map +0 -1
- package/dist/src/content-delivery-layer/plumtree/PlumtreeManager.d.ts +0 -37
- package/dist/src/content-delivery-layer/plumtree/PlumtreeManager.js +0 -141
- package/dist/src/content-delivery-layer/plumtree/PlumtreeManager.js.map +0 -1
- package/dist/src/content-delivery-layer/plumtree/PlumtreeRpcLocal.d.ts +0 -20
- package/dist/src/content-delivery-layer/plumtree/PlumtreeRpcLocal.js +0 -37
- package/dist/src/content-delivery-layer/plumtree/PlumtreeRpcLocal.js.map +0 -1
- package/dist/src/content-delivery-layer/plumtree/PlumtreeRpcRemote.d.ts +0 -8
- package/dist/src/content-delivery-layer/plumtree/PlumtreeRpcRemote.js +0 -26
- package/dist/src/content-delivery-layer/plumtree/PlumtreeRpcRemote.js.map +0 -1
- package/dist/src/content-delivery-layer/propagation/FifoMapWithTTL.d.ts +0 -29
- package/dist/src/content-delivery-layer/propagation/FifoMapWithTTL.js +0 -93
- package/dist/src/content-delivery-layer/propagation/FifoMapWithTTL.js.map +0 -1
- package/dist/src/content-delivery-layer/propagation/Propagation.d.ts +0 -35
- package/dist/src/content-delivery-layer/propagation/Propagation.js +0 -68
- package/dist/src/content-delivery-layer/propagation/Propagation.js.map +0 -1
- package/dist/src/content-delivery-layer/propagation/PropagationTaskStore.d.ts +0 -22
- package/dist/src/content-delivery-layer/propagation/PropagationTaskStore.js +0 -33
- package/dist/src/content-delivery-layer/propagation/PropagationTaskStore.js.map +0 -1
- package/dist/src/content-delivery-layer/proxy/ProxyClient.d.ts +0 -46
- package/dist/src/content-delivery-layer/proxy/ProxyClient.js +0 -214
- package/dist/src/content-delivery-layer/proxy/ProxyClient.js.map +0 -1
- package/dist/src/content-delivery-layer/proxy/ProxyConnectionRpcLocal.d.ts +0 -34
- package/dist/src/content-delivery-layer/proxy/ProxyConnectionRpcLocal.js +0 -72
- package/dist/src/content-delivery-layer/proxy/ProxyConnectionRpcLocal.js.map +0 -1
- package/dist/src/content-delivery-layer/proxy/ProxyConnectionRpcRemote.d.ts +0 -7
- package/dist/src/content-delivery-layer/proxy/ProxyConnectionRpcRemote.js +0 -27
- package/dist/src/content-delivery-layer/proxy/ProxyConnectionRpcRemote.js.map +0 -1
- package/dist/src/content-delivery-layer/temporary-connection/TemporaryConnectionRpcLocal.d.ts +0 -26
- package/dist/src/content-delivery-layer/temporary-connection/TemporaryConnectionRpcLocal.js +0 -45
- package/dist/src/content-delivery-layer/temporary-connection/TemporaryConnectionRpcLocal.js.map +0 -1
- package/dist/src/content-delivery-layer/temporary-connection/TemporaryConnectionRpcRemote.d.ts +0 -6
- package/dist/src/content-delivery-layer/temporary-connection/TemporaryConnectionRpcRemote.js +0 -31
- package/dist/src/content-delivery-layer/temporary-connection/TemporaryConnectionRpcRemote.js.map +0 -1
- package/dist/src/control-layer/ControlLayerNode.d.ts +0 -16
- package/dist/src/control-layer/ControlLayerNode.js +0 -3
- package/dist/src/control-layer/ControlLayerNode.js.map +0 -1
- package/dist/src/control-layer/ExternalNetworkRpc.d.ts +0 -16
- package/dist/src/control-layer/ExternalNetworkRpc.js +0 -23
- package/dist/src/control-layer/ExternalNetworkRpc.js.map +0 -1
- package/dist/src/control-layer/PeerDescriptorStoreManager.d.ts +0 -28
- package/dist/src/control-layer/PeerDescriptorStoreManager.js +0 -78
- package/dist/src/control-layer/PeerDescriptorStoreManager.js.map +0 -1
- package/dist/src/discovery-layer/DiscoveryLayerNode.d.ts +0 -28
- package/dist/src/discovery-layer/DiscoveryLayerNode.js +0 -3
- package/dist/src/discovery-layer/DiscoveryLayerNode.js.map +0 -1
- package/dist/src/exports.d.ts +0 -6
- package/dist/src/exports.js +0 -24
- package/dist/src/exports.js.map +0 -1
- package/dist/src/types.d.ts +0 -6
- package/dist/src/types.js +0 -3
- package/dist/src/types.js.map +0 -1
- package/dist/src/utils.d.ts +0 -3
- package/dist/src/utils.js +0 -17
- package/dist/src/utils.js.map +0 -1
- package/dist/test/benchmark/first-message.d.ts +0 -1
- package/dist/test/benchmark/first-message.js +0 -139
- package/dist/test/benchmark/first-message.js.map +0 -1
- package/dist/test/utils/utils.d.ts +0 -15
- package/dist/test/utils/utils.js +0 -106
- package/dist/test/utils/utils.js.map +0 -1
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.HandshakeRpcRemote = exports.INTERLEAVE_REQUEST_TIMEOUT = void 0;
|
|
4
|
-
const dht_1 = require("@streamr/dht");
|
|
5
|
-
const utils_1 = require("@streamr/utils");
|
|
6
|
-
const uuid_1 = require("uuid");
|
|
7
|
-
const logger = new utils_1.Logger(module);
|
|
8
|
-
exports.INTERLEAVE_REQUEST_TIMEOUT = 10000;
|
|
9
|
-
class HandshakeRpcRemote extends dht_1.RpcRemote {
|
|
10
|
-
async handshake(streamPartId, neighborNodeIds, concurrentHandshakeNodeId, interleaveNodeId) {
|
|
11
|
-
const request = {
|
|
12
|
-
streamPartId,
|
|
13
|
-
requestId: (0, uuid_1.v4)(),
|
|
14
|
-
neighborNodeIds: neighborNodeIds.map((id) => (0, dht_1.toDhtAddressRaw)(id)),
|
|
15
|
-
concurrentHandshakeNodeId: (concurrentHandshakeNodeId !== undefined) ? (0, dht_1.toDhtAddressRaw)(concurrentHandshakeNodeId) : undefined,
|
|
16
|
-
interleaveNodeId: (interleaveNodeId !== undefined) ? (0, dht_1.toDhtAddressRaw)(interleaveNodeId) : undefined
|
|
17
|
-
};
|
|
18
|
-
try {
|
|
19
|
-
const response = await this.getClient().handshake(request, this.formDhtRpcOptions());
|
|
20
|
-
return {
|
|
21
|
-
accepted: response.accepted,
|
|
22
|
-
interleaveTargetDescriptor: response.interleaveTargetDescriptor
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
catch (err) {
|
|
26
|
-
logger.debug(`handshake to ${(0, dht_1.toNodeId)(this.getPeerDescriptor())} failed`, { err });
|
|
27
|
-
return {
|
|
28
|
-
accepted: false
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
async interleaveRequest(originatorDescriptor) {
|
|
33
|
-
const request = {
|
|
34
|
-
interleaveTargetDescriptor: originatorDescriptor
|
|
35
|
-
};
|
|
36
|
-
const options = this.formDhtRpcOptions({
|
|
37
|
-
connect: false,
|
|
38
|
-
timeout: exports.INTERLEAVE_REQUEST_TIMEOUT
|
|
39
|
-
});
|
|
40
|
-
try {
|
|
41
|
-
const res = await this.getClient().interleaveRequest(request, options);
|
|
42
|
-
return {
|
|
43
|
-
accepted: res.accepted
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
catch (err) {
|
|
47
|
-
logger.debug(`interleaveRequest to ${(0, dht_1.toNodeId)(this.getPeerDescriptor())} failed`, { err });
|
|
48
|
-
return {
|
|
49
|
-
accepted: false
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
exports.HandshakeRpcRemote = HandshakeRpcRemote;
|
|
55
|
-
//# sourceMappingURL=HandshakeRpcRemote.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HandshakeRpcRemote.js","sourceRoot":"","sources":["../../../../src/content-delivery-layer/neighbor-discovery/HandshakeRpcRemote.ts"],"names":[],"mappings":";;;AAAA,sCAA+F;AAC/F,0CAAqD;AACrD,+BAAyB;AAIzB,MAAM,MAAM,GAAG,IAAI,cAAM,CAAC,MAAM,CAAC,CAAA;AAOpB,QAAA,0BAA0B,GAAG,KAAK,CAAA;AAE/C,MAAa,kBAAmB,SAAQ,eAA6B;IAEjE,KAAK,CAAC,SAAS,CACX,YAA0B,EAC1B,eAA6B,EAC7B,yBAAsC,EACtC,gBAA6B;QAE7B,MAAM,OAAO,GAA+B;YACxC,YAAY;YACZ,SAAS,EAAE,IAAA,SAAE,GAAE;YACf,eAAe,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAA,qBAAe,EAAC,EAAE,CAAC,CAAC;YACjE,yBAAyB,EAAE,CAAC,yBAAyB,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,IAAA,qBAAe,EAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,SAAS;YAC7H,gBAAgB,EAAE,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,IAAA,qBAAe,EAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS;SACrG,CAAA;QACD,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAA;YACpF,OAAO;gBACH,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,0BAA0B,EAAE,QAAQ,CAAC,0BAA0B;aAClE,CAAA;QACL,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,gBAAgB,IAAA,cAAQ,EAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,CAAA;YAClF,OAAO;gBACH,QAAQ,EAAE,KAAK;aAClB,CAAA;QACL,CAAC;IACL,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,oBAAoC;QACxD,MAAM,OAAO,GAAsB;YAC/B,0BAA0B,EAAE,oBAAoB;SACnD,CAAA;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC;YACnC,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,kCAA0B;SACtC,CAAC,CAAA;QACF,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YACtE,OAAO;gBACH,QAAQ,EAAE,GAAG,CAAC,QAAQ;aACzB,CAAA;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,CAAC,wBAAwB,IAAA,cAAQ,EAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,CAAA;YAC1F,OAAO;gBACH,QAAQ,EAAE,KAAK;aAClB,CAAA;QACL,CAAC;IAEL,CAAC;CACJ;AAlDD,gDAkDC"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { DhtAddress, ListeningRpcCommunicator, PeerDescriptor } from '@streamr/dht';
|
|
2
|
-
import { StreamPartID } from '@streamr/utils';
|
|
3
|
-
import { NodeList } from '../NodeList';
|
|
4
|
-
interface HandshakerOptions {
|
|
5
|
-
localPeerDescriptor: PeerDescriptor;
|
|
6
|
-
streamPartId: StreamPartID;
|
|
7
|
-
neighbors: NodeList;
|
|
8
|
-
leftNodeView: NodeList;
|
|
9
|
-
rightNodeView: NodeList;
|
|
10
|
-
nearbyNodeView: NodeList;
|
|
11
|
-
randomNodeView: NodeList;
|
|
12
|
-
rpcCommunicator: ListeningRpcCommunicator;
|
|
13
|
-
maxNeighborCount: number;
|
|
14
|
-
ongoingHandshakes: Set<DhtAddress>;
|
|
15
|
-
rpcRequestTimeout?: number;
|
|
16
|
-
}
|
|
17
|
-
export declare class Handshaker {
|
|
18
|
-
private options;
|
|
19
|
-
private readonly rpcLocal;
|
|
20
|
-
constructor(options: HandshakerOptions);
|
|
21
|
-
attemptHandshakesOnContacts(excludedIds: DhtAddress[]): Promise<DhtAddress[]>;
|
|
22
|
-
private selectParallelTargetsAndHandshake;
|
|
23
|
-
private selectParallelTargets;
|
|
24
|
-
private doParallelHandshakes;
|
|
25
|
-
private selectNewTargetAndHandshake;
|
|
26
|
-
private handshakeWithTarget;
|
|
27
|
-
private handshakeWithInterleaving;
|
|
28
|
-
private createRpcRemote;
|
|
29
|
-
private createContentDeliveryRpcRemote;
|
|
30
|
-
getOngoingHandshakes(): Set<DhtAddress>;
|
|
31
|
-
}
|
|
32
|
-
export {};
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Handshaker = void 0;
|
|
4
|
-
const dht_1 = require("@streamr/dht");
|
|
5
|
-
const utils_1 = require("@streamr/utils");
|
|
6
|
-
const NetworkRpc_1 = require("../../../generated/packages/trackerless-network/protos/NetworkRpc");
|
|
7
|
-
const NetworkRpc_client_1 = require("../../../generated/packages/trackerless-network/protos/NetworkRpc.client");
|
|
8
|
-
const ContentDeliveryRpcRemote_1 = require("../ContentDeliveryRpcRemote");
|
|
9
|
-
const HandshakeRpcLocal_1 = require("./HandshakeRpcLocal");
|
|
10
|
-
const HandshakeRpcRemote_1 = require("./HandshakeRpcRemote");
|
|
11
|
-
const logger = new utils_1.Logger(module);
|
|
12
|
-
const PARALLEL_HANDSHAKE_COUNT = 2;
|
|
13
|
-
class Handshaker {
|
|
14
|
-
options;
|
|
15
|
-
rpcLocal;
|
|
16
|
-
constructor(options) {
|
|
17
|
-
this.options = options;
|
|
18
|
-
this.rpcLocal = new HandshakeRpcLocal_1.HandshakeRpcLocal({
|
|
19
|
-
streamPartId: this.options.streamPartId,
|
|
20
|
-
neighbors: this.options.neighbors,
|
|
21
|
-
ongoingHandshakes: this.options.ongoingHandshakes,
|
|
22
|
-
ongoingInterleaves: new Set(),
|
|
23
|
-
maxNeighborCount: this.options.maxNeighborCount,
|
|
24
|
-
handshakeWithInterleaving: (target, remoteNodeId) => this.handshakeWithInterleaving(target, remoteNodeId),
|
|
25
|
-
createRpcRemote: (target) => this.createRpcRemote(target),
|
|
26
|
-
createContentDeliveryRpcRemote: (target) => this.createContentDeliveryRpcRemote(target)
|
|
27
|
-
});
|
|
28
|
-
this.options.rpcCommunicator.registerRpcMethod(NetworkRpc_1.InterleaveRequest, NetworkRpc_1.InterleaveResponse, 'interleaveRequest', (req, context) => this.rpcLocal.interleaveRequest(req, context), { timeout: HandshakeRpcRemote_1.INTERLEAVE_REQUEST_TIMEOUT });
|
|
29
|
-
this.options.rpcCommunicator.registerRpcMethod(NetworkRpc_1.StreamPartHandshakeRequest, NetworkRpc_1.StreamPartHandshakeResponse, 'handshake', (req, context) => this.rpcLocal.handshake(req, context));
|
|
30
|
-
}
|
|
31
|
-
async attemptHandshakesOnContacts(excludedIds) {
|
|
32
|
-
// TODO use options option or named constant? or why the value 2?
|
|
33
|
-
if (this.options.neighbors.size() + this.options.ongoingHandshakes.size < this.options.maxNeighborCount - 2) {
|
|
34
|
-
logger.trace(`Attempting parallel handshakes with ${PARALLEL_HANDSHAKE_COUNT} targets`);
|
|
35
|
-
return this.selectParallelTargetsAndHandshake(excludedIds);
|
|
36
|
-
}
|
|
37
|
-
else if (this.options.neighbors.size() + this.options.ongoingHandshakes.size < this.options.maxNeighborCount) {
|
|
38
|
-
logger.trace(`Attempting handshake with new target`);
|
|
39
|
-
return this.selectNewTargetAndHandshake(excludedIds);
|
|
40
|
-
}
|
|
41
|
-
return excludedIds;
|
|
42
|
-
}
|
|
43
|
-
async selectParallelTargetsAndHandshake(excludedIds) {
|
|
44
|
-
const exclude = excludedIds.concat(this.options.neighbors.getIds());
|
|
45
|
-
const targets = this.selectParallelTargets(exclude);
|
|
46
|
-
targets.forEach((contact) => this.options.ongoingHandshakes.add((0, dht_1.toNodeId)(contact.getPeerDescriptor())));
|
|
47
|
-
return this.doParallelHandshakes(targets, exclude);
|
|
48
|
-
}
|
|
49
|
-
selectParallelTargets(excludedIds) {
|
|
50
|
-
const targets = new Map();
|
|
51
|
-
const getExcludedIds = () => [...excludedIds, ...Array.from(targets.keys())];
|
|
52
|
-
// Step 1: If no neighbors, try to find a WebSocket node first
|
|
53
|
-
if (this.options.neighbors.size() === 0) {
|
|
54
|
-
const wsNode = this.options.nearbyNodeView.getFirst(getExcludedIds(), true);
|
|
55
|
-
if (wsNode) {
|
|
56
|
-
const wsNodeId = (0, dht_1.toNodeId)(wsNode.getPeerDescriptor());
|
|
57
|
-
targets.set(wsNodeId, wsNode);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
// Step 2: Add left and right contacts from the ring
|
|
61
|
-
const left = this.options.leftNodeView.getFirst(getExcludedIds());
|
|
62
|
-
const right = this.options.rightNodeView.getFirst(getExcludedIds());
|
|
63
|
-
if (left) {
|
|
64
|
-
targets.set((0, dht_1.toNodeId)(left.getPeerDescriptor()), left);
|
|
65
|
-
}
|
|
66
|
-
if (right) {
|
|
67
|
-
targets.set((0, dht_1.toNodeId)(right.getPeerDescriptor()), right);
|
|
68
|
-
}
|
|
69
|
-
// Step 3: Add closest contact based on Kademlia metric if needed
|
|
70
|
-
if (targets.size < PARALLEL_HANDSHAKE_COUNT) {
|
|
71
|
-
const closest = this.options.nearbyNodeView.getFirst(getExcludedIds());
|
|
72
|
-
if (closest) {
|
|
73
|
-
targets.set((0, dht_1.toNodeId)(closest.getPeerDescriptor()), closest);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
// Step 4: Fill remaining slots with random contacts
|
|
77
|
-
while (targets.size < PARALLEL_HANDSHAKE_COUNT) {
|
|
78
|
-
const random = this.options.randomNodeView.getRandom(getExcludedIds());
|
|
79
|
-
if (!random) {
|
|
80
|
-
break;
|
|
81
|
-
}
|
|
82
|
-
targets.set((0, dht_1.toNodeId)(random.getPeerDescriptor()), random);
|
|
83
|
-
}
|
|
84
|
-
return Array.from(targets.values()).map((neighbor) => this.createRpcRemote(neighbor.getPeerDescriptor()));
|
|
85
|
-
}
|
|
86
|
-
async doParallelHandshakes(targets, excludedIds) {
|
|
87
|
-
const results = await Promise.allSettled(Array.from(targets.values()).map(async (target, i) => {
|
|
88
|
-
const otherNode = i === 0 ? targets[1] : targets[0];
|
|
89
|
-
// TODO better check (currently this condition is always true)
|
|
90
|
-
const otherNodeId = otherNode ? (0, dht_1.toNodeId)(otherNode.getPeerDescriptor()) : undefined;
|
|
91
|
-
return this.handshakeWithTarget(target, otherNodeId);
|
|
92
|
-
}));
|
|
93
|
-
results.forEach((res, i) => {
|
|
94
|
-
if (res.status !== 'fulfilled' || !res.value) {
|
|
95
|
-
excludedIds.push((0, dht_1.toNodeId)(targets[i].getPeerDescriptor()));
|
|
96
|
-
}
|
|
97
|
-
});
|
|
98
|
-
return excludedIds;
|
|
99
|
-
}
|
|
100
|
-
async selectNewTargetAndHandshake(excludedIds) {
|
|
101
|
-
const exclude = excludedIds.concat(this.options.neighbors.getIds());
|
|
102
|
-
const target = this.options.leftNodeView.getFirst(exclude)
|
|
103
|
-
?? this.options.rightNodeView.getFirst(exclude)
|
|
104
|
-
?? this.options.nearbyNodeView.getFirst(exclude)
|
|
105
|
-
?? this.options.randomNodeView.getRandom(exclude);
|
|
106
|
-
if (target) {
|
|
107
|
-
const accepted = await this.handshakeWithTarget(this.createRpcRemote(target.getPeerDescriptor()));
|
|
108
|
-
if (!accepted) {
|
|
109
|
-
excludedIds.push((0, dht_1.toNodeId)(target.getPeerDescriptor()));
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
return excludedIds;
|
|
113
|
-
}
|
|
114
|
-
async handshakeWithTarget(target, concurrentNodeId) {
|
|
115
|
-
const targetNodeId = (0, dht_1.toNodeId)(target.getPeerDescriptor());
|
|
116
|
-
this.options.ongoingHandshakes.add(targetNodeId);
|
|
117
|
-
const result = await target.handshake(this.options.streamPartId, this.options.neighbors.getIds(), concurrentNodeId);
|
|
118
|
-
if (result.accepted) {
|
|
119
|
-
this.options.neighbors.add(this.createContentDeliveryRpcRemote(target.getPeerDescriptor()));
|
|
120
|
-
}
|
|
121
|
-
if (result.interleaveTargetDescriptor) {
|
|
122
|
-
await this.handshakeWithInterleaving(result.interleaveTargetDescriptor, targetNodeId);
|
|
123
|
-
}
|
|
124
|
-
this.options.ongoingHandshakes.delete(targetNodeId);
|
|
125
|
-
return result.accepted;
|
|
126
|
-
}
|
|
127
|
-
async handshakeWithInterleaving(target, remoteNodeId) {
|
|
128
|
-
const remote = this.createRpcRemote(target);
|
|
129
|
-
const targetNodeId = (0, dht_1.toNodeId)(remote.getPeerDescriptor());
|
|
130
|
-
this.options.ongoingHandshakes.add(targetNodeId);
|
|
131
|
-
const result = await remote.handshake(this.options.streamPartId, this.options.neighbors.getIds(), undefined, remoteNodeId);
|
|
132
|
-
if (result.accepted) {
|
|
133
|
-
this.options.neighbors.add(this.createContentDeliveryRpcRemote(remote.getPeerDescriptor()));
|
|
134
|
-
}
|
|
135
|
-
this.options.ongoingHandshakes.delete(targetNodeId);
|
|
136
|
-
return result.accepted;
|
|
137
|
-
}
|
|
138
|
-
createRpcRemote(targetPeerDescriptor) {
|
|
139
|
-
return new HandshakeRpcRemote_1.HandshakeRpcRemote(this.options.localPeerDescriptor, targetPeerDescriptor, this.options.rpcCommunicator, NetworkRpc_client_1.HandshakeRpcClient, this.options.rpcRequestTimeout);
|
|
140
|
-
}
|
|
141
|
-
createContentDeliveryRpcRemote(targetPeerDescriptor) {
|
|
142
|
-
return new ContentDeliveryRpcRemote_1.ContentDeliveryRpcRemote(this.options.localPeerDescriptor, targetPeerDescriptor, this.options.rpcCommunicator, NetworkRpc_client_1.ContentDeliveryRpcClient, this.options.rpcRequestTimeout);
|
|
143
|
-
}
|
|
144
|
-
getOngoingHandshakes() {
|
|
145
|
-
return this.options.ongoingHandshakes;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
exports.Handshaker = Handshaker;
|
|
149
|
-
//# sourceMappingURL=Handshaker.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Handshaker.js","sourceRoot":"","sources":["../../../../src/content-delivery-layer/neighbor-discovery/Handshaker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { NodeList } from '../NodeList';
|
|
2
|
-
import { DhtAddress } from '@streamr/dht';
|
|
3
|
-
interface FindNeighborsSessionOptions {
|
|
4
|
-
neighbors: NodeList;
|
|
5
|
-
nearbyNodeView: NodeList;
|
|
6
|
-
leftNodeView: NodeList;
|
|
7
|
-
rightNodeView: NodeList;
|
|
8
|
-
randomNodeView: NodeList;
|
|
9
|
-
doFindNeighbors: (excludedNodes: DhtAddress[]) => Promise<DhtAddress[]>;
|
|
10
|
-
minCount: number;
|
|
11
|
-
}
|
|
12
|
-
export declare class NeighborFinder {
|
|
13
|
-
private readonly abortController;
|
|
14
|
-
private readonly options;
|
|
15
|
-
private running;
|
|
16
|
-
constructor(options: FindNeighborsSessionOptions);
|
|
17
|
-
private findNeighbors;
|
|
18
|
-
isRunning(): boolean;
|
|
19
|
-
start(excluded?: DhtAddress[]): void;
|
|
20
|
-
stop(): void;
|
|
21
|
-
}
|
|
22
|
-
export {};
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.NeighborFinder = void 0;
|
|
4
|
-
const utils_1 = require("@streamr/utils");
|
|
5
|
-
const INITIAL_WAIT = 100;
|
|
6
|
-
const INTERVAL = 250;
|
|
7
|
-
const logger = new utils_1.Logger(module);
|
|
8
|
-
class NeighborFinder {
|
|
9
|
-
abortController;
|
|
10
|
-
options;
|
|
11
|
-
running = false;
|
|
12
|
-
constructor(options) {
|
|
13
|
-
this.options = options;
|
|
14
|
-
this.abortController = new AbortController();
|
|
15
|
-
}
|
|
16
|
-
async findNeighbors(excluded) {
|
|
17
|
-
if (!this.running) {
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
const newExcludes = await this.options.doFindNeighbors(excluded);
|
|
21
|
-
const uniqueContactCount = new Set([
|
|
22
|
-
...this.options.nearbyNodeView.getIds(),
|
|
23
|
-
...this.options.leftNodeView.getIds(),
|
|
24
|
-
...this.options.rightNodeView.getIds(),
|
|
25
|
-
...this.options.randomNodeView.getIds()
|
|
26
|
-
]).size;
|
|
27
|
-
if (this.options.neighbors.size() < this.options.minCount && newExcludes.length < uniqueContactCount) {
|
|
28
|
-
// TODO should we catch possible promise rejection?
|
|
29
|
-
(0, utils_1.setAbortableTimeout)(() => this.findNeighbors(newExcludes), INTERVAL, this.abortController.signal);
|
|
30
|
-
}
|
|
31
|
-
else if (this.options.neighbors.size() === 0 && uniqueContactCount > 0) {
|
|
32
|
-
logger.debug('No neighbors found yet contacts are available, restarting handshaking process');
|
|
33
|
-
(0, utils_1.setAbortableTimeout)(() => this.findNeighbors([]), INTERVAL, this.abortController.signal);
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
this.running = false;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
isRunning() {
|
|
40
|
-
return this.running;
|
|
41
|
-
}
|
|
42
|
-
start(excluded = []) {
|
|
43
|
-
if (this.running) {
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
this.running = true;
|
|
47
|
-
// TODO should we catch possible promise rejection?
|
|
48
|
-
(0, utils_1.setAbortableTimeout)(async () => {
|
|
49
|
-
await Promise.all([
|
|
50
|
-
this.findNeighbors(excluded),
|
|
51
|
-
this.findNeighbors(excluded)
|
|
52
|
-
]);
|
|
53
|
-
}, INITIAL_WAIT, this.abortController.signal);
|
|
54
|
-
}
|
|
55
|
-
stop() {
|
|
56
|
-
if (!this.running) {
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
this.running = false;
|
|
60
|
-
this.abortController.abort();
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
exports.NeighborFinder = NeighborFinder;
|
|
64
|
-
//# sourceMappingURL=NeighborFinder.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NeighborFinder.js","sourceRoot":"","sources":["../../../../src/content-delivery-layer/neighbor-discovery/NeighborFinder.ts"],"names":[],"mappings":";;;AAAA,0CAA4D;AAc5D,MAAM,YAAY,GAAG,GAAG,CAAA;AACxB,MAAM,QAAQ,GAAG,GAAG,CAAA;AAEpB,MAAM,MAAM,GAAG,IAAI,cAAM,CAAC,MAAM,CAAC,CAAA;AAEjC,MAAa,cAAc;IACN,eAAe,CAAiB;IAChC,OAAO,CAA6B;IAC7C,OAAO,GAAG,KAAK,CAAA;IAEvB,YAAY,OAAoC;QAC5C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAA;IAChD,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,QAAsB;QAC9C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,OAAM;QACV,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QAChE,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;YAC/B,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE;YACvC,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE;YACrC,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE;YACtC,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE;SAC1C,CAAC,CAAC,IAAI,CAAA;QACP,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,WAAW,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;YACnG,mDAAmD;YACnD,IAAA,2BAAmB,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;QACrG,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,kBAAkB,GAAG,CAAC,EAAE,CAAC;YACvE,MAAM,CAAC,KAAK,CAAC,+EAA+E,CAAC,CAAA;YAC7F,IAAA,2BAAmB,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;QAC5F,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;QACxB,CAAC;IACL,CAAC;IAED,SAAS;QACL,OAAO,IAAI,CAAC,OAAO,CAAA;IACvB,CAAC;IAED,KAAK,CAAC,WAAyB,EAAE;QAC7B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAM;QACV,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACnB,mDAAmD;QACnD,IAAA,2BAAmB,EAAC,KAAK,IAAI,EAAE;YAC3B,MAAM,OAAO,CAAC,GAAG,CAAC;gBACd,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;gBAC5B,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;aAC/B,CAAC,CAAA;QACN,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;IACjD,CAAC;IAED,IAAI;QACA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,OAAM;QACV,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;QACpB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAA;IAChC,CAAC;CACJ;AAzDD,wCAyDC"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { DhtAddress, ListeningRpcCommunicator, PeerDescriptor } from '@streamr/dht';
|
|
2
|
-
import { StreamPartID } from '@streamr/utils';
|
|
3
|
-
import { NodeList } from '../NodeList';
|
|
4
|
-
import { NeighborFinder } from './NeighborFinder';
|
|
5
|
-
interface NeighborUpdateManagerOptions {
|
|
6
|
-
localPeerDescriptor: PeerDescriptor;
|
|
7
|
-
neighbors: NodeList;
|
|
8
|
-
nearbyNodeView: NodeList;
|
|
9
|
-
neighborFinder: NeighborFinder;
|
|
10
|
-
streamPartId: StreamPartID;
|
|
11
|
-
rpcCommunicator: ListeningRpcCommunicator;
|
|
12
|
-
neighborUpdateInterval: number;
|
|
13
|
-
neighborTargetCount: number;
|
|
14
|
-
ongoingHandshakes: Set<DhtAddress>;
|
|
15
|
-
}
|
|
16
|
-
export declare const DEFAULT_NEIGHBOR_UPDATE_INTERVAL: number;
|
|
17
|
-
export declare class NeighborUpdateManager {
|
|
18
|
-
private readonly abortController;
|
|
19
|
-
private readonly options;
|
|
20
|
-
private readonly rpcLocal;
|
|
21
|
-
constructor(options: NeighborUpdateManagerOptions);
|
|
22
|
-
start(): Promise<void>;
|
|
23
|
-
stop(): void;
|
|
24
|
-
private updateNeighborInfo;
|
|
25
|
-
private createRemote;
|
|
26
|
-
}
|
|
27
|
-
export {};
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.NeighborUpdateManager = exports.DEFAULT_NEIGHBOR_UPDATE_INTERVAL = void 0;
|
|
4
|
-
const dht_1 = require("@streamr/dht");
|
|
5
|
-
const utils_1 = require("@streamr/utils");
|
|
6
|
-
const NetworkRpc_1 = require("../../../generated/packages/trackerless-network/protos/NetworkRpc");
|
|
7
|
-
const NetworkRpc_client_1 = require("../../../generated/packages/trackerless-network/protos/NetworkRpc.client");
|
|
8
|
-
const NeighborUpdateRpcLocal_1 = require("./NeighborUpdateRpcLocal");
|
|
9
|
-
const NeighborUpdateRpcRemote_1 = require("./NeighborUpdateRpcRemote");
|
|
10
|
-
const logger = new utils_1.Logger(module);
|
|
11
|
-
exports.DEFAULT_NEIGHBOR_UPDATE_INTERVAL = 10 * 1000;
|
|
12
|
-
class NeighborUpdateManager {
|
|
13
|
-
abortController;
|
|
14
|
-
options;
|
|
15
|
-
rpcLocal;
|
|
16
|
-
constructor(options) {
|
|
17
|
-
this.abortController = new AbortController();
|
|
18
|
-
this.rpcLocal = new NeighborUpdateRpcLocal_1.NeighborUpdateRpcLocal(options);
|
|
19
|
-
this.options = options;
|
|
20
|
-
this.options.rpcCommunicator.registerRpcMethod(NetworkRpc_1.NeighborUpdate, NetworkRpc_1.NeighborUpdate, 'neighborUpdate', (req, context) => this.rpcLocal.neighborUpdate(req, context));
|
|
21
|
-
}
|
|
22
|
-
async start() {
|
|
23
|
-
await (0, utils_1.scheduleAtInterval)(() => this.updateNeighborInfo(), this.options.neighborUpdateInterval, false, this.abortController.signal);
|
|
24
|
-
}
|
|
25
|
-
stop() {
|
|
26
|
-
this.abortController.abort();
|
|
27
|
-
}
|
|
28
|
-
async updateNeighborInfo() {
|
|
29
|
-
logger.trace(`Updating neighbor info to nodes`);
|
|
30
|
-
const neighborDescriptors = this.options.neighbors.getAll().map((neighbor) => neighbor.getPeerDescriptor());
|
|
31
|
-
const startTime = Date.now();
|
|
32
|
-
await Promise.allSettled(this.options.neighbors.getAll().map(async (neighbor) => {
|
|
33
|
-
const res = await this.createRemote(neighbor.getPeerDescriptor()).updateNeighbors(this.options.streamPartId, neighborDescriptors);
|
|
34
|
-
const nodeId = (0, dht_1.toNodeId)(neighbor.getPeerDescriptor());
|
|
35
|
-
this.options.neighbors.get(nodeId).setRtt(Date.now() - startTime);
|
|
36
|
-
if (res.removeMe) {
|
|
37
|
-
this.options.neighbors.remove(nodeId);
|
|
38
|
-
this.options.neighborFinder.start([nodeId]);
|
|
39
|
-
}
|
|
40
|
-
}));
|
|
41
|
-
}
|
|
42
|
-
createRemote(targetPeerDescriptor) {
|
|
43
|
-
return new NeighborUpdateRpcRemote_1.NeighborUpdateRpcRemote(this.options.localPeerDescriptor, targetPeerDescriptor, this.options.rpcCommunicator, NetworkRpc_client_1.NeighborUpdateRpcClient);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
exports.NeighborUpdateManager = NeighborUpdateManager;
|
|
47
|
-
//# sourceMappingURL=NeighborUpdateManager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NeighborUpdateManager.js","sourceRoot":"","sources":["../../../../src/content-delivery-layer/neighbor-discovery/NeighborUpdateManager.ts"],"names":[],"mappings":";;;AAAA,sCAA6F;AAC7F,0CAAyE;AACzE,kGAAkG;AAClG,gHAAkH;AAGlH,qEAAiE;AACjE,uEAAmE;AAcnE,MAAM,MAAM,GAAG,IAAI,cAAM,CAAC,MAAM,CAAC,CAAA;AAEpB,QAAA,gCAAgC,GAAG,EAAE,GAAG,IAAI,CAAA;AAEzD,MAAa,qBAAqB;IAEb,eAAe,CAAiB;IAChC,OAAO,CAA8B;IACrC,QAAQ,CAAwB;IAEjD,YAAY,OAAqC;QAC7C,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAA;QAC5C,IAAI,CAAC,QAAQ,GAAG,IAAI,+CAAsB,CAAC,OAAO,CAAC,CAAA;QACnD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,iBAAiB,CAAC,2BAAc,EAAE,2BAAc,EAAE,gBAAgB,EAC3F,CAAC,GAAmB,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAA;IACrF,CAAC;IAED,KAAK,CAAC,KAAK;QACP,MAAM,IAAA,0BAAkB,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;IACtI,CAAC;IAED,IAAI;QACA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAA;IAChC,CAAC;IAEO,KAAK,CAAC,kBAAkB;QAC5B,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAA;QAC/C,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAA;QAC3G,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC5B,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;YAC5E,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAA;YACjI,MAAM,MAAM,GAAG,IAAA,cAAQ,EAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAA;YACrD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAA;YAClE,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACf,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;gBACrC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;YAC/C,CAAC;QACL,CAAC,CAAC,CAAC,CAAA;IACP,CAAC;IAEO,YAAY,CAAC,oBAAoC;QACrD,OAAO,IAAI,iDAAuB,CAC9B,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAChC,oBAAoB,EACpB,IAAI,CAAC,OAAO,CAAC,eAAe,EAC5B,2CAAuB,CAC1B,CAAA;IACL,CAAC;CACJ;AA7CD,sDA6CC"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { ServerCallContext } from '@protobuf-ts/runtime-rpc';
|
|
2
|
-
import { DhtAddress, ListeningRpcCommunicator, PeerDescriptor } from '@streamr/dht';
|
|
3
|
-
import { StreamPartID } from '@streamr/utils';
|
|
4
|
-
import { NeighborUpdate } from '../../../generated/packages/trackerless-network/protos/NetworkRpc';
|
|
5
|
-
import { INeighborUpdateRpc } from '../../../generated/packages/trackerless-network/protos/NetworkRpc.server';
|
|
6
|
-
import { NodeList } from '../NodeList';
|
|
7
|
-
import { NeighborFinder } from './NeighborFinder';
|
|
8
|
-
interface NeighborUpdateRpcLocalOptions {
|
|
9
|
-
localPeerDescriptor: PeerDescriptor;
|
|
10
|
-
streamPartId: StreamPartID;
|
|
11
|
-
neighbors: NodeList;
|
|
12
|
-
nearbyNodeView: NodeList;
|
|
13
|
-
neighborFinder: NeighborFinder;
|
|
14
|
-
rpcCommunicator: ListeningRpcCommunicator;
|
|
15
|
-
neighborTargetCount: number;
|
|
16
|
-
ongoingHandshakes: Set<DhtAddress>;
|
|
17
|
-
}
|
|
18
|
-
export declare class NeighborUpdateRpcLocal implements INeighborUpdateRpc {
|
|
19
|
-
private readonly options;
|
|
20
|
-
constructor(options: NeighborUpdateRpcLocalOptions);
|
|
21
|
-
private updateContacts;
|
|
22
|
-
private createResponse;
|
|
23
|
-
neighborUpdate(message: NeighborUpdate, context: ServerCallContext): Promise<NeighborUpdate>;
|
|
24
|
-
}
|
|
25
|
-
export {};
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.NeighborUpdateRpcLocal = void 0;
|
|
4
|
-
const dht_1 = require("@streamr/dht");
|
|
5
|
-
const NetworkRpc_client_1 = require("../../../generated/packages/trackerless-network/protos/NetworkRpc.client");
|
|
6
|
-
const ContentDeliveryRpcRemote_1 = require("../ContentDeliveryRpcRemote");
|
|
7
|
-
class NeighborUpdateRpcLocal {
|
|
8
|
-
options;
|
|
9
|
-
constructor(options) {
|
|
10
|
-
this.options = options;
|
|
11
|
-
}
|
|
12
|
-
updateContacts(neighborDescriptors) {
|
|
13
|
-
const ownNodeId = (0, dht_1.toNodeId)(this.options.localPeerDescriptor);
|
|
14
|
-
const newPeerDescriptors = neighborDescriptors.filter((peerDescriptor) => {
|
|
15
|
-
const nodeId = (0, dht_1.toNodeId)(peerDescriptor);
|
|
16
|
-
return nodeId !== ownNodeId && !this.options.neighbors.getIds().includes(nodeId);
|
|
17
|
-
});
|
|
18
|
-
newPeerDescriptors.forEach((peerDescriptor) => this.options.nearbyNodeView.add(new ContentDeliveryRpcRemote_1.ContentDeliveryRpcRemote(this.options.localPeerDescriptor, peerDescriptor, this.options.rpcCommunicator, NetworkRpc_client_1.ContentDeliveryRpcClient)));
|
|
19
|
-
}
|
|
20
|
-
createResponse(removeMe) {
|
|
21
|
-
return {
|
|
22
|
-
streamPartId: this.options.streamPartId,
|
|
23
|
-
neighborDescriptors: this.options.neighbors.getAll().map((neighbor) => neighbor.getPeerDescriptor()),
|
|
24
|
-
removeMe
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
// INeighborUpdateRpc server method
|
|
28
|
-
async neighborUpdate(message, context) {
|
|
29
|
-
const senderPeerDescriptor = context.incomingSourceDescriptor;
|
|
30
|
-
const remoteNodeId = (0, dht_1.toNodeId)(senderPeerDescriptor);
|
|
31
|
-
this.updateContacts(message.neighborDescriptors);
|
|
32
|
-
if (!this.options.neighbors.has(remoteNodeId) && !this.options.ongoingHandshakes.has(remoteNodeId)) {
|
|
33
|
-
return this.createResponse(true);
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
const isOverNeighborCount = this.options.neighbors.size() > this.options.neighborTargetCount
|
|
37
|
-
// Motivation: We don't know the remote's neighborTargetCount setting here. We only ask to cut connections
|
|
38
|
-
// if the remote has a "sufficient" number of neighbors, where "sufficient" means our neighborTargetCount
|
|
39
|
-
// setting.
|
|
40
|
-
&& message.neighborDescriptors.length > this.options.neighborTargetCount;
|
|
41
|
-
if (!isOverNeighborCount) {
|
|
42
|
-
this.options.neighborFinder.start();
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
this.options.neighbors.remove(remoteNodeId);
|
|
46
|
-
}
|
|
47
|
-
return this.createResponse(isOverNeighborCount);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
exports.NeighborUpdateRpcLocal = NeighborUpdateRpcLocal;
|
|
52
|
-
//# sourceMappingURL=NeighborUpdateRpcLocal.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NeighborUpdateRpcLocal.js","sourceRoot":"","sources":["../../../../src/content-delivery-layer/neighbor-discovery/NeighborUpdateRpcLocal.ts"],"names":[],"mappings":";;;AACA,sCAA6G;AAG7G,gHAAmH;AAEnH,0EAAsE;AAetE,MAAa,sBAAsB;IAEd,OAAO,CAA+B;IAEvD,YAAY,OAAsC;QAC9C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IAC1B,CAAC;IAEO,cAAc,CAAC,mBAAqC;QACxD,MAAM,SAAS,GAAG,IAAA,cAAQ,EAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;QAC5D,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,EAAE;YACrE,MAAM,MAAM,GAAG,IAAA,cAAQ,EAAC,cAAc,CAAC,CAAA;YACvC,OAAO,MAAM,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACpF,CAAC,CAAC,CAAA;QACF,kBAAkB,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAC1E,IAAI,mDAAwB,CACxB,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAChC,cAAc,EACd,IAAI,CAAC,OAAO,CAAC,eAAe,EAC5B,4CAAwB,CAC3B,CAAC,CACL,CAAA;IACL,CAAC;IAEO,cAAc,CAAC,QAAiB;QACpC,OAAO;YACH,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;YACvC,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;YACpG,QAAQ;SACX,CAAA;IACL,CAAC;IAED,mCAAmC;IACnC,KAAK,CAAC,cAAc,CAAC,OAAuB,EAAE,OAA0B;QACpE,MAAM,oBAAoB,GAAI,OAA0B,CAAC,wBAAyB,CAAA;QAClF,MAAM,YAAY,GAAG,IAAA,cAAQ,EAAC,oBAAoB,CAAC,CAAA;QACnD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;QAChD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YACjG,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;QACpC,CAAC;aAAM,CAAC;YACJ,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB;gBACxF,0GAA0G;gBAC1G,yGAAyG;gBACzG,WAAW;mBACR,OAAO,CAAC,mBAAmB,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAA;YAC5E,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACvB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;YACvC,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;YAC/C,CAAC;YACD,OAAO,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAA;QACnD,CAAC;IACL,CAAC;CACJ;AArDD,wDAqDC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { PeerDescriptor, RpcRemote } from '@streamr/dht';
|
|
2
|
-
import { StreamPartID } from '@streamr/utils';
|
|
3
|
-
import { NeighborUpdateRpcClient } from '../../../generated/packages/trackerless-network/protos/NetworkRpc.client';
|
|
4
|
-
interface UpdateNeighborsResponse {
|
|
5
|
-
peerDescriptors: PeerDescriptor[];
|
|
6
|
-
removeMe: boolean;
|
|
7
|
-
}
|
|
8
|
-
export declare class NeighborUpdateRpcRemote extends RpcRemote<NeighborUpdateRpcClient> {
|
|
9
|
-
updateNeighbors(streamPartId: StreamPartID, neighbors: PeerDescriptor[]): Promise<UpdateNeighborsResponse>;
|
|
10
|
-
}
|
|
11
|
-
export {};
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.NeighborUpdateRpcRemote = void 0;
|
|
4
|
-
const dht_1 = require("@streamr/dht");
|
|
5
|
-
const utils_1 = require("@streamr/utils");
|
|
6
|
-
const logger = new utils_1.Logger(module);
|
|
7
|
-
class NeighborUpdateRpcRemote extends dht_1.RpcRemote {
|
|
8
|
-
async updateNeighbors(streamPartId, neighbors) {
|
|
9
|
-
const request = {
|
|
10
|
-
streamPartId,
|
|
11
|
-
neighborDescriptors: neighbors,
|
|
12
|
-
removeMe: false
|
|
13
|
-
};
|
|
14
|
-
try {
|
|
15
|
-
const response = await this.getClient().neighborUpdate(request, this.formDhtRpcOptions());
|
|
16
|
-
return {
|
|
17
|
-
peerDescriptors: response.neighborDescriptors,
|
|
18
|
-
removeMe: response.removeMe
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
catch (err) {
|
|
22
|
-
logger.debug(`updateNeighbors to ${(0, dht_1.toNodeId)(this.getPeerDescriptor())} failed`, { err });
|
|
23
|
-
return {
|
|
24
|
-
peerDescriptors: [],
|
|
25
|
-
removeMe: true
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
exports.NeighborUpdateRpcRemote = NeighborUpdateRpcRemote;
|
|
31
|
-
//# sourceMappingURL=NeighborUpdateRpcRemote.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NeighborUpdateRpcRemote.js","sourceRoot":"","sources":["../../../../src/content-delivery-layer/neighbor-discovery/NeighborUpdateRpcRemote.ts"],"names":[],"mappings":";;;AAAA,sCAAkE;AAClE,0CAAqD;AAIrD,MAAM,MAAM,GAAG,IAAI,cAAM,CAAC,MAAM,CAAC,CAAA;AAOjC,MAAa,uBAAwB,SAAQ,eAAkC;IAE3E,KAAK,CAAC,eAAe,CAAC,YAA0B,EAAE,SAA2B;QACzE,MAAM,OAAO,GAAmB;YAC5B,YAAY;YACZ,mBAAmB,EAAE,SAAS;YAC9B,QAAQ,EAAE,KAAK;SAClB,CAAA;QACD,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAA;YACzF,OAAO;gBACH,eAAe,EAAE,QAAQ,CAAC,mBAAmB;gBAC7C,QAAQ,EAAE,QAAQ,CAAC,QAAQ;aAC9B,CAAA;QACL,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,sBAAsB,IAAA,cAAQ,EAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,CAAA;YACxF,OAAO;gBACH,eAAe,EAAE,EAAE;gBACnB,QAAQ,EAAE,IAAI;aACjB,CAAA;QACL,CAAC;IACL,CAAC;CACJ;AAtBD,0DAsBC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { DhtAddress } from '@streamr/dht';
|
|
2
|
-
export declare class PausedNeighbors {
|
|
3
|
-
private readonly pausedNeighbors;
|
|
4
|
-
private readonly limit;
|
|
5
|
-
constructor(limit: number);
|
|
6
|
-
add(node: DhtAddress, msgChainId: string): void;
|
|
7
|
-
delete(node: DhtAddress, msgChainId: string): void;
|
|
8
|
-
deleteAll(node: DhtAddress): void;
|
|
9
|
-
isPaused(node: DhtAddress, msgChainId: string): boolean;
|
|
10
|
-
forEach(fn: (neighbors: Set<DhtAddress>, msgChainId: string) => void): void;
|
|
11
|
-
size(msgChainId: string): number;
|
|
12
|
-
}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PausedNeighbors = void 0;
|
|
4
|
-
class PausedNeighbors {
|
|
5
|
-
pausedNeighbors;
|
|
6
|
-
limit;
|
|
7
|
-
constructor(limit) {
|
|
8
|
-
this.pausedNeighbors = new Map();
|
|
9
|
-
this.limit = limit;
|
|
10
|
-
}
|
|
11
|
-
add(node, msgChainId) {
|
|
12
|
-
if (!this.pausedNeighbors.has(msgChainId)) {
|
|
13
|
-
this.pausedNeighbors.set(msgChainId, new Set());
|
|
14
|
-
}
|
|
15
|
-
if (this.pausedNeighbors.get(msgChainId).size >= this.limit) {
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
this.pausedNeighbors.get(msgChainId).add(node);
|
|
19
|
-
}
|
|
20
|
-
delete(node, msgChainId) {
|
|
21
|
-
this.pausedNeighbors.get(msgChainId)?.delete(node);
|
|
22
|
-
if (this.pausedNeighbors.get(msgChainId)?.size === 0) {
|
|
23
|
-
this.pausedNeighbors.delete(msgChainId);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
deleteAll(node) {
|
|
27
|
-
this.pausedNeighbors.forEach((neighbors, msgChainId) => {
|
|
28
|
-
neighbors.delete(node);
|
|
29
|
-
if (neighbors.size === 0) {
|
|
30
|
-
this.pausedNeighbors.delete(msgChainId);
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
isPaused(node, msgChainId) {
|
|
35
|
-
if (!this.pausedNeighbors.has(msgChainId)) {
|
|
36
|
-
return false;
|
|
37
|
-
}
|
|
38
|
-
return this.pausedNeighbors.get(msgChainId).has(node);
|
|
39
|
-
}
|
|
40
|
-
forEach(fn) {
|
|
41
|
-
this.pausedNeighbors.forEach((neighbors, msgChainId) => {
|
|
42
|
-
fn(neighbors, msgChainId);
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
size(msgChainId) {
|
|
46
|
-
return this.pausedNeighbors.get(msgChainId)?.size ?? 0;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
exports.PausedNeighbors = PausedNeighbors;
|
|
50
|
-
//# sourceMappingURL=PausedNeighbors.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PausedNeighbors.js","sourceRoot":"","sources":["../../../../src/content-delivery-layer/plumtree/PausedNeighbors.ts"],"names":[],"mappings":";;;AACA,MAAa,eAAe;IACP,eAAe,CAA8B;IAC7C,KAAK,CAAQ;IAE9B,YAAY,KAAa;QACrB,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE,CAAA;QAChC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACtB,CAAC;IAED,GAAG,CAAC,IAAgB,EAAE,UAAkB;QACpC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,GAAG,EAAE,CAAC,CAAA;QACnD,CAAC;QACD,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3D,OAAM;QACV,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACnD,CAAC;IAED,MAAM,CAAC,IAAgB,EAAE,UAAkB;QACvC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;QAClD,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QAC3C,CAAC;IACL,CAAC;IAED,SAAS,CAAC,IAAgB;QACtB,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,EAAE;YACnD,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YACtB,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACvB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;YAC3C,CAAC;QACL,CAAC,CAAC,CAAA;IACN,CAAC;IAED,QAAQ,CAAC,IAAgB,EAAE,UAAkB;QACzC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACxC,OAAO,KAAK,CAAA;QAChB,CAAC;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC1D,CAAC;IAED,OAAO,CAAC,EAA4D;QAChE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,EAAE;YACnD,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;IACN,CAAC;IAED,IAAI,CAAC,UAAkB;QACnB,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,IAAI,IAAI,CAAC,CAAA;IAC1D,CAAC;CAEJ;AApDD,0CAoDC"}
|