@streamr/trackerless-network 100.0.0-testnet-three.6 → 100.1.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/package.json +7 -7
- package/dist/src/NetworkNode.js +11 -11
- package/dist/src/NetworkNode.js.map +1 -1
- package/dist/src/NetworkStack.d.ts +6 -6
- package/dist/src/NetworkStack.js +22 -20
- package/dist/src/NetworkStack.js.map +1 -1
- package/dist/src/exports.d.ts +3 -3
- package/dist/src/exports.js +7 -1
- package/dist/src/exports.js.map +1 -1
- package/dist/src/logic/{StreamrNode.d.ts → ContentDeliveryManager.d.ts} +6 -6
- package/dist/src/logic/{StreamrNode.js → ContentDeliveryManager.js} +16 -13
- package/dist/src/logic/ContentDeliveryManager.js.map +1 -0
- package/dist/src/logic/{DeliveryRpcLocal.d.ts → ContentDeliveryRpcLocal.d.ts} +4 -4
- package/dist/src/logic/{DeliveryRpcLocal.js → ContentDeliveryRpcLocal.js} +4 -4
- package/dist/src/logic/ContentDeliveryRpcLocal.js.map +1 -0
- package/dist/src/logic/{DeliveryRpcRemote.d.ts → ContentDeliveryRpcRemote.d.ts} +2 -2
- package/dist/src/logic/{DeliveryRpcRemote.js → ContentDeliveryRpcRemote.js} +4 -4
- package/dist/src/logic/ContentDeliveryRpcRemote.js.map +1 -0
- package/dist/src/logic/EntryPointDiscovery.d.ts +1 -1
- package/dist/src/logic/EntryPointDiscovery.js +3 -3
- package/dist/src/logic/EntryPointDiscovery.js.map +1 -1
- package/dist/src/logic/Layer0Node.d.ts +1 -1
- package/dist/src/logic/Layer1Node.d.ts +7 -1
- package/dist/src/logic/NodeList.d.ts +11 -10
- package/dist/src/logic/NodeList.js +7 -2
- package/dist/src/logic/NodeList.js.map +1 -1
- package/dist/src/logic/RandomGraphNode.d.ts +4 -1
- package/dist/src/logic/RandomGraphNode.js +36 -14
- package/dist/src/logic/RandomGraphNode.js.map +1 -1
- package/dist/src/logic/createRandomGraphNode.d.ts +1 -1
- package/dist/src/logic/createRandomGraphNode.js +16 -7
- package/dist/src/logic/createRandomGraphNode.js.map +1 -1
- package/dist/src/logic/formStreamPartDeliveryServiceId.d.ts +1 -1
- package/dist/src/logic/formStreamPartDeliveryServiceId.js +4 -3
- package/dist/src/logic/formStreamPartDeliveryServiceId.js.map +1 -1
- package/dist/src/logic/inspect/Inspector.js +2 -2
- package/dist/src/logic/inspect/Inspector.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.d.ts +3 -4
- package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js +6 -11
- package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.js +2 -2
- package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/Handshaker.d.ts +4 -3
- package/dist/src/logic/neighbor-discovery/Handshaker.js +35 -16
- package/dist/src/logic/neighbor-discovery/Handshaker.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborFinder.d.ts +3 -0
- package/dist/src/logic/neighbor-discovery/NeighborFinder.js +7 -1
- package/dist/src/logic/neighbor-discovery/NeighborFinder.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.d.ts +1 -2
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js +0 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.d.ts +1 -2
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js +2 -3
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.js +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.js.map +1 -1
- package/dist/src/logic/protocol-integration/stream-message/GroupKeyResponseTranslator.js.map +1 -1
- package/dist/src/logic/protocol-integration/stream-message/StreamMessageTranslator.js +64 -52
- package/dist/src/logic/protocol-integration/stream-message/StreamMessageTranslator.js.map +1 -1
- package/dist/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.d.ts +5 -1
- package/dist/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.js +19 -1
- package/dist/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.js.map +1 -1
- package/dist/src/logic/proxy/ProxyClient.d.ts +1 -1
- package/dist/src/logic/proxy/ProxyClient.js +8 -8
- package/dist/src/logic/proxy/ProxyClient.js.map +1 -1
- package/dist/src/logic/proxy/ProxyConnectionRpcLocal.d.ts +2 -2
- package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js +5 -5
- package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js.map +1 -1
- package/dist/src/logic/proxy/ProxyConnectionRpcRemote.js +1 -1
- package/dist/src/logic/proxy/ProxyConnectionRpcRemote.js.map +1 -1
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.d.ts +5 -1
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js +7 -2
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js.map +1 -1
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.js +2 -2
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.js.map +1 -1
- package/dist/src/proto/google/protobuf/any.d.ts +11 -4
- package/dist/src/proto/google/protobuf/any.js.map +1 -1
- package/dist/src/proto/google/protobuf/empty.d.ts +0 -1
- package/dist/src/proto/google/protobuf/empty.js.map +1 -1
- package/dist/src/proto/google/protobuf/timestamp.d.ts +9 -3
- package/dist/src/proto/google/protobuf/timestamp.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +16 -6
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +11 -4
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +98 -87
- package/dist/src/proto/packages/dht/protos/DhtRpc.js +45 -49
- package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +10 -4
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.d.ts +4 -4
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.js +7 -7
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.js.map +1 -1
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.d.ts +62 -26
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js +31 -14
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js.map +1 -1
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.server.d.ts +2 -2
- package/dist/test/benchmark/first-message.js +5 -5
- package/dist/test/benchmark/first-message.js.map +1 -1
- package/dist/test/utils/utils.d.ts +2 -2
- package/dist/test/utils/utils.js +18 -11
- package/dist/test/utils/utils.js.map +1 -1
- package/karma.config.js +2 -0
- package/package.json +7 -7
- package/protos/NetworkRpc.proto +19 -11
- package/src/NetworkNode.ts +11 -11
- package/src/NetworkStack.ts +30 -25
- package/src/exports.ts +7 -3
- package/src/logic/{StreamrNode.ts → ContentDeliveryManager.ts} +21 -17
- package/src/logic/{DeliveryRpcLocal.ts → ContentDeliveryRpcLocal.ts} +5 -5
- package/src/logic/{DeliveryRpcRemote.ts → ContentDeliveryRpcRemote.ts} +2 -2
- package/src/logic/EntryPointDiscovery.ts +4 -4
- package/src/logic/Layer0Node.ts +1 -1
- package/src/logic/Layer1Node.ts +16 -1
- package/src/logic/NodeList.ts +20 -14
- package/src/logic/RandomGraphNode.ts +89 -27
- package/src/logic/createRandomGraphNode.ts +18 -9
- package/src/logic/formStreamPartDeliveryServiceId.ts +2 -1
- package/src/logic/inspect/Inspector.ts +2 -2
- package/src/logic/neighbor-discovery/HandshakeRpcLocal.ts +10 -15
- package/src/logic/neighbor-discovery/HandshakeRpcRemote.ts +2 -2
- package/src/logic/neighbor-discovery/Handshaker.ts +41 -22
- package/src/logic/neighbor-discovery/NeighborFinder.ts +10 -1
- package/src/logic/neighbor-discovery/NeighborUpdateManager.ts +1 -3
- package/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.ts +5 -7
- package/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.ts +1 -1
- package/src/logic/protocol-integration/stream-message/GroupKeyResponseTranslator.ts +0 -1
- package/src/logic/protocol-integration/stream-message/StreamMessageTranslator.ts +74 -71
- package/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.ts +28 -2
- package/src/logic/proxy/ProxyClient.ts +11 -11
- package/src/logic/proxy/ProxyConnectionRpcLocal.ts +9 -11
- package/src/logic/proxy/ProxyConnectionRpcRemote.ts +1 -1
- package/src/logic/temporary-connection/TemporaryConnectionRpcLocal.ts +14 -6
- package/src/logic/temporary-connection/TemporaryConnectionRpcRemote.ts +2 -2
- package/src/proto/google/protobuf/any.ts +11 -4
- package/src/proto/google/protobuf/empty.ts +0 -1
- package/src/proto/google/protobuf/timestamp.ts +9 -3
- package/src/proto/packages/dht/protos/DhtRpc.client.ts +22 -9
- package/src/proto/packages/dht/protos/DhtRpc.server.ts +10 -4
- package/src/proto/packages/dht/protos/DhtRpc.ts +122 -100
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.client.ts +8 -8
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.server.ts +2 -2
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.ts +79 -37
- package/test/benchmark/StreamPartIdDataKeyDistribution.test.ts +60 -0
- package/test/benchmark/first-message.ts +5 -5
- package/test/end-to-end/inspect.test.ts +6 -6
- package/test/end-to-end/proxy-and-full-node.test.ts +19 -19
- package/test/end-to-end/proxy-connections.test.ts +7 -7
- package/test/end-to-end/proxy-key-exchange.test.ts +16 -13
- package/test/end-to-end/webrtc-full-node-network.test.ts +8 -8
- package/test/end-to-end/websocket-full-node-network.test.ts +9 -9
- package/test/integration/ContentDeliveryManager.test.ts +135 -0
- package/test/integration/{DeliveryRpcRemote.test.ts → ContentDeliveryRpcRemote.test.ts} +6 -6
- package/test/integration/Handshakes.test.ts +7 -3
- package/test/integration/Inspect.test.ts +2 -2
- package/test/integration/NetworkRpc.test.ts +3 -3
- package/test/integration/NetworkStack.test.ts +7 -7
- package/test/integration/NodeInfoRpc.test.ts +10 -10
- package/test/integration/joining-streams-on-offline-peers.test.ts +3 -3
- package/test/integration/stream-without-default-entrypoints.test.ts +1 -1
- package/test/integration/streamEntryPointReplacing.test.ts +10 -8
- package/test/unit/ContentDeliveryManager.test.ts +96 -0
- package/test/unit/{DeliveryRpcLocal.test.ts → ContentDeliveryRpcLocal.test.ts} +4 -4
- package/test/unit/EntrypointDiscovery.test.ts +4 -4
- package/test/unit/HandshakeRpcLocal.test.ts +31 -15
- package/test/unit/Handshaker.test.ts +8 -3
- package/test/unit/NeighborFinder.test.ts +5 -2
- package/test/unit/NeighborUpdateRpcLocal.test.ts +8 -12
- package/test/unit/NetworkNode.test.ts +6 -6
- package/test/unit/NodeList.test.ts +6 -6
- package/test/unit/Propagation.test.ts +10 -7
- package/test/unit/RandomGraphNode.test.ts +3 -3
- package/test/unit/StreamMessageTranslator.test.ts +3 -4
- package/test/unit/StreamPartIDDataKey.test.ts +12 -0
- package/test/unit/TemporaryConnectionRpcLocal.test.ts +7 -1
- package/test/utils/mock/MockLayer0Node.ts +1 -1
- package/test/utils/mock/MockLayer1Node.ts +3 -0
- package/test/utils/utils.ts +19 -13
- package/dist/src/logic/DeliveryRpcLocal.js.map +0 -1
- package/dist/src/logic/DeliveryRpcRemote.js.map +0 -1
- package/dist/src/logic/StreamrNode.js.map +0 -1
- package/test/integration/StreamrNode.test.ts +0 -131
- package/test/unit/GroupKeyRequestTranslator.test.ts +0 -36
- package/test/unit/StreamrNode.test.ts +0 -98
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ConnectionLocker,
|
|
3
|
+
DhtAddress,
|
|
3
4
|
DhtNode,
|
|
5
|
+
EXISTING_CONNECTION_TIMEOUT,
|
|
4
6
|
ITransport,
|
|
5
7
|
PeerDescriptor,
|
|
6
|
-
EXISTING_CONNECTION_TIMEOUT,
|
|
7
|
-
DhtAddress,
|
|
8
8
|
getNodeIdFromPeerDescriptor
|
|
9
9
|
} from '@streamr/dht'
|
|
10
10
|
import { StreamID, StreamPartID, StreamPartIDUtils, toStreamPartID } from '@streamr/protocol'
|
|
@@ -18,11 +18,11 @@ import {
|
|
|
18
18
|
} from '@streamr/utils'
|
|
19
19
|
import { EventEmitter } from 'eventemitter3'
|
|
20
20
|
import { sampleSize } from 'lodash'
|
|
21
|
-
import { ProxyDirection,
|
|
21
|
+
import { ProxyDirection, StreamMessage, StreamPartitionInfo } from '../proto/packages/trackerless-network/protos/NetworkRpc'
|
|
22
|
+
import { EntryPointDiscovery, NETWORK_SPLIT_AVOIDANCE_LIMIT } from './EntryPointDiscovery'
|
|
22
23
|
import { Layer0Node } from './Layer0Node'
|
|
23
24
|
import { Layer1Node } from './Layer1Node'
|
|
24
25
|
import { RandomGraphNode } from './RandomGraphNode'
|
|
25
|
-
import { NETWORK_SPLIT_AVOIDANCE_LIMIT, EntryPointDiscovery } from './EntryPointDiscovery'
|
|
26
26
|
import { createRandomGraphNode } from './createRandomGraphNode'
|
|
27
27
|
import { ProxyClient } from './proxy/ProxyClient'
|
|
28
28
|
|
|
@@ -50,7 +50,7 @@ interface Metrics extends MetricsDefinition {
|
|
|
50
50
|
broadcastBytesPerSecond: Metric
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
export interface
|
|
53
|
+
export interface ContentDeliveryManagerConfig {
|
|
54
54
|
metricsContext?: MetricsContext
|
|
55
55
|
streamPartitionNeighborTargetCount?: number
|
|
56
56
|
streamPartitionMinPropagationTargets?: number
|
|
@@ -58,20 +58,20 @@ export interface StreamrNodeConfig {
|
|
|
58
58
|
rpcRequestTimeout?: number
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
export class ContentDeliveryManager extends EventEmitter<Events> {
|
|
62
|
+
|
|
63
63
|
private transport?: ITransport
|
|
64
64
|
private connectionLocker?: ConnectionLocker
|
|
65
65
|
private layer0Node?: Layer0Node
|
|
66
66
|
private readonly metricsContext: MetricsContext
|
|
67
67
|
private readonly metrics: Metrics
|
|
68
|
-
private readonly config:
|
|
68
|
+
private readonly config: ContentDeliveryManagerConfig
|
|
69
69
|
private readonly streamParts: Map<StreamPartID, StreamPartDelivery>
|
|
70
70
|
private readonly knownStreamPartEntryPoints: Map<StreamPartID, PeerDescriptor[]> = new Map()
|
|
71
71
|
private started = false
|
|
72
72
|
private destroyed = false
|
|
73
73
|
|
|
74
|
-
constructor(config:
|
|
74
|
+
constructor(config: ContentDeliveryManagerConfig) {
|
|
75
75
|
super()
|
|
76
76
|
this.config = config
|
|
77
77
|
this.streamParts = new Map()
|
|
@@ -87,7 +87,6 @@ export class StreamrNode extends EventEmitter<Events> {
|
|
|
87
87
|
if (this.started || this.destroyed) {
|
|
88
88
|
return
|
|
89
89
|
}
|
|
90
|
-
logger.info(`Starting new StreamrNode with id ${getNodeIdFromPeerDescriptor(startedAndJoinedLayer0Node.getLocalPeerDescriptor())}`)
|
|
91
90
|
this.started = true
|
|
92
91
|
this.layer0Node = startedAndJoinedLayer0Node
|
|
93
92
|
this.transport = transport
|
|
@@ -98,7 +97,7 @@ export class StreamrNode extends EventEmitter<Events> {
|
|
|
98
97
|
if (!this.started || this.destroyed) {
|
|
99
98
|
return
|
|
100
99
|
}
|
|
101
|
-
logger.trace('Destroying
|
|
100
|
+
logger.trace('Destroying ContentDeliveryManager')
|
|
102
101
|
this.destroyed = true
|
|
103
102
|
await Promise.all(Array.from(this.streamParts.values()).map((streamPart) => streamPart.stop()))
|
|
104
103
|
this.streamParts.clear()
|
|
@@ -113,8 +112,10 @@ export class StreamrNode extends EventEmitter<Events> {
|
|
|
113
112
|
logger.debug(`Broadcasting to stream part ${streamPartId}`)
|
|
114
113
|
this.joinStreamPart(streamPartId)
|
|
115
114
|
this.streamParts.get(streamPartId)!.broadcast(msg)
|
|
116
|
-
|
|
117
|
-
|
|
115
|
+
if (msg.body.oneofKind === 'contentMessage') {
|
|
116
|
+
this.metrics.broadcastMessagesPerSecond.record(1)
|
|
117
|
+
this.metrics.broadcastBytesPerSecond.record(msg.body.contentMessage.content.length)
|
|
118
|
+
}
|
|
118
119
|
}
|
|
119
120
|
|
|
120
121
|
async leaveStreamPart(streamPartId: StreamPartID): Promise<void> {
|
|
@@ -136,7 +137,7 @@ export class StreamrNode extends EventEmitter<Events> {
|
|
|
136
137
|
streamPartId,
|
|
137
138
|
localPeerDescriptor: this.getPeerDescriptor(),
|
|
138
139
|
layer1Node,
|
|
139
|
-
|
|
140
|
+
fetchEntryPointData: (key) => this.layer0Node!.fetchDataFromDht(key),
|
|
140
141
|
storeEntryPointData: (key, data) => this.layer0Node!.storeDataToDht(key, data),
|
|
141
142
|
deleteEntryPointData: async (key) => this.layer0Node!.deleteDataFromDht(key, false)
|
|
142
143
|
})
|
|
@@ -173,7 +174,7 @@ export class StreamrNode extends EventEmitter<Events> {
|
|
|
173
174
|
try {
|
|
174
175
|
await this.startLayersAndJoinDht(streamPartId, entryPointDiscovery)
|
|
175
176
|
} catch (err) {
|
|
176
|
-
logger.warn(`Failed to join to stream part ${streamPartId}
|
|
177
|
+
logger.warn(`Failed to join to stream part ${streamPartId}`, { err })
|
|
177
178
|
}
|
|
178
179
|
})
|
|
179
180
|
}
|
|
@@ -192,7 +193,10 @@ export class StreamrNode extends EventEmitter<Events> {
|
|
|
192
193
|
entryPoints.length
|
|
193
194
|
)
|
|
194
195
|
entryPoints = entryPoints.concat(discoveryResult.discoveredEntryPoints)
|
|
195
|
-
await
|
|
196
|
+
await Promise.all([
|
|
197
|
+
streamPart.layer1Node.joinDht(sampleSize(entryPoints, NETWORK_SPLIT_AVOIDANCE_LIMIT)),
|
|
198
|
+
streamPart.layer1Node.joinRing()
|
|
199
|
+
])
|
|
196
200
|
if (discoveryResult.entryPointsFromDht) {
|
|
197
201
|
await entryPointDiscovery.storeSelfAsEntryPointIfNecessary(entryPoints.length)
|
|
198
202
|
}
|
|
@@ -292,7 +296,7 @@ export class StreamrNode extends EventEmitter<Events> {
|
|
|
292
296
|
return {
|
|
293
297
|
id: streamPartId,
|
|
294
298
|
controlLayerNeighbors: stream.layer1Node.getNeighbors(),
|
|
295
|
-
|
|
299
|
+
contentDeliveryLayerNeighbors: stream.node.getNeighbors()
|
|
296
300
|
}
|
|
297
301
|
})
|
|
298
302
|
|
|
@@ -6,11 +6,11 @@ import {
|
|
|
6
6
|
MessageRef,
|
|
7
7
|
StreamMessage
|
|
8
8
|
} from '../proto/packages/trackerless-network/protos/NetworkRpc'
|
|
9
|
-
import {
|
|
9
|
+
import { IContentDeliveryRpc } from '../proto/packages/trackerless-network/protos/NetworkRpc.server'
|
|
10
10
|
import { ServerCallContext } from '@protobuf-ts/runtime-rpc'
|
|
11
11
|
import { StreamPartID } from '@streamr/protocol'
|
|
12
12
|
|
|
13
|
-
export interface
|
|
13
|
+
export interface ContentDeliveryRpcLocalConfig {
|
|
14
14
|
localPeerDescriptor: PeerDescriptor
|
|
15
15
|
streamPartId: StreamPartID
|
|
16
16
|
markAndCheckDuplicate: (messageId: MessageID, previousMessageRef?: MessageRef) => boolean
|
|
@@ -20,11 +20,11 @@ export interface DeliveryRpcLocalConfig {
|
|
|
20
20
|
rpcCommunicator: ListeningRpcCommunicator
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
export class
|
|
23
|
+
export class ContentDeliveryRpcLocal implements IContentDeliveryRpc {
|
|
24
24
|
|
|
25
|
-
private readonly config:
|
|
25
|
+
private readonly config: ContentDeliveryRpcLocalConfig
|
|
26
26
|
|
|
27
|
-
constructor(config:
|
|
27
|
+
constructor(config: ContentDeliveryRpcLocalConfig) {
|
|
28
28
|
this.config = config
|
|
29
29
|
}
|
|
30
30
|
|
|
@@ -4,12 +4,12 @@ import {
|
|
|
4
4
|
LeaveStreamPartNotice,
|
|
5
5
|
StreamMessage
|
|
6
6
|
} from '../proto/packages/trackerless-network/protos/NetworkRpc'
|
|
7
|
-
import {
|
|
7
|
+
import { ContentDeliveryRpcClient } from '../proto/packages/trackerless-network/protos/NetworkRpc.client'
|
|
8
8
|
import { StreamPartID } from '@streamr/protocol'
|
|
9
9
|
|
|
10
10
|
const logger = new Logger(module)
|
|
11
11
|
|
|
12
|
-
export class
|
|
12
|
+
export class ContentDeliveryRpcRemote extends RpcRemote<ContentDeliveryRpcClient> {
|
|
13
13
|
|
|
14
14
|
async sendStreamMessage(msg: StreamMessage): Promise<void> {
|
|
15
15
|
const options = this.formDhtRpcOptions({
|
|
@@ -13,7 +13,7 @@ import { Any } from '../proto/google/protobuf/any'
|
|
|
13
13
|
import { Layer1Node } from './Layer1Node'
|
|
14
14
|
|
|
15
15
|
export const streamPartIdToDataKey = (streamPartId: StreamPartID): DhtAddress => {
|
|
16
|
-
return getDhtAddressFromRaw(new Uint8Array(createHash('
|
|
16
|
+
return getDhtAddressFromRaw(new Uint8Array((createHash('sha1').update(streamPartId).digest())))
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
const parseEntryPointData = (dataEntries: DataEntry[]): PeerDescriptor[] => {
|
|
@@ -46,7 +46,7 @@ const exponentialRunOff = async (
|
|
|
46
46
|
try { // Abort controller throws unexpected errors in destroy?
|
|
47
47
|
await wait(delay, abortSignal)
|
|
48
48
|
} catch (err) {
|
|
49
|
-
logger.trace(`${err}`)
|
|
49
|
+
logger.trace(`${err}`) // TODO Do we need logging?
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
}
|
|
@@ -60,7 +60,7 @@ interface EntryPointDiscoveryConfig {
|
|
|
60
60
|
streamPartId: StreamPartID
|
|
61
61
|
localPeerDescriptor: PeerDescriptor
|
|
62
62
|
layer1Node: Layer1Node
|
|
63
|
-
|
|
63
|
+
fetchEntryPointData: (key: DhtAddress) => Promise<DataEntry[]>
|
|
64
64
|
storeEntryPointData: (key: DhtAddress, data: Any) => Promise<PeerDescriptor[]>
|
|
65
65
|
deleteEntryPointData: (key: DhtAddress) => Promise<void>
|
|
66
66
|
storeInterval?: number
|
|
@@ -111,7 +111,7 @@ export class EntryPointDiscovery {
|
|
|
111
111
|
private async queryEntrypoints(key: DhtAddress): Promise<PeerDescriptor[]> {
|
|
112
112
|
logger.trace(`Finding data from dht node ${getNodeIdFromPeerDescriptor(this.config.localPeerDescriptor)}`)
|
|
113
113
|
try {
|
|
114
|
-
const result = await this.config.
|
|
114
|
+
const result = await this.config.fetchEntryPointData(key)
|
|
115
115
|
return parseEntryPointData(result)
|
|
116
116
|
} catch (err) {
|
|
117
117
|
return []
|
package/src/logic/Layer0Node.ts
CHANGED
|
@@ -5,7 +5,7 @@ export interface Layer0Node extends ITransport {
|
|
|
5
5
|
joinDht(entryPointDescriptors: PeerDescriptor[]): Promise<void>
|
|
6
6
|
hasJoined(): boolean
|
|
7
7
|
getLocalPeerDescriptor(): PeerDescriptor
|
|
8
|
-
|
|
8
|
+
fetchDataFromDht(key: DhtAddress): Promise<DataEntry[]>
|
|
9
9
|
storeDataToDht(key: DhtAddress, data: Any): Promise<PeerDescriptor[]>
|
|
10
10
|
deleteDataFromDht(key: DhtAddress, waitForCompletion: boolean): Promise<void>
|
|
11
11
|
waitForNetworkConnectivity(): Promise<void>
|
package/src/logic/Layer1Node.ts
CHANGED
|
@@ -1,21 +1,36 @@
|
|
|
1
|
-
import { DhtAddress, PeerDescriptor } from '@streamr/dht'
|
|
1
|
+
import { DhtAddress, PeerDescriptor, RingContacts } from '@streamr/dht'
|
|
2
2
|
|
|
3
3
|
export interface Layer1NodeEvents {
|
|
4
4
|
contactAdded: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void
|
|
5
5
|
contactRemoved: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void
|
|
6
6
|
randomContactAdded: (peerDescriptor: PeerDescriptor, randomPeers: PeerDescriptor[]) => void
|
|
7
7
|
randomContactRemoved: (peerDescriptor: PeerDescriptor, randomPeers: PeerDescriptor[]) => void
|
|
8
|
+
ringContactAdded: (peerDescriptor: PeerDescriptor, closestPeers: RingContacts) => void
|
|
9
|
+
ringContactRemoved: (peerDescriptor: PeerDescriptor, closestPeers: RingContacts) => void
|
|
8
10
|
}
|
|
9
11
|
|
|
10
12
|
export interface Layer1Node {
|
|
11
13
|
on<T extends keyof Layer1NodeEvents>(eventName: T, listener: (peerDescriptor: PeerDescriptor, peers: PeerDescriptor[]) => void): void
|
|
12
14
|
once<T extends keyof Layer1NodeEvents>(eventName: T, listener: (peerDescriptor: PeerDescriptor, peers: PeerDescriptor[]) => void): void
|
|
13
15
|
off<T extends keyof Layer1NodeEvents>(eventName: T, listener: (peerDescriptor: PeerDescriptor, peers: PeerDescriptor[]) => void): void
|
|
16
|
+
on<T extends keyof Layer1NodeEvents>(
|
|
17
|
+
eventName: T,
|
|
18
|
+
listener: (peerDescriptor: PeerDescriptor, peers: RingContacts) => void
|
|
19
|
+
): void
|
|
20
|
+
once<T extends keyof Layer1NodeEvents>(
|
|
21
|
+
eventName: T,
|
|
22
|
+
listener: (peerDescriptor: PeerDescriptor, peers: RingContacts) => void
|
|
23
|
+
): void
|
|
24
|
+
off<T extends keyof Layer1NodeEvents>(
|
|
25
|
+
eventName: T,
|
|
26
|
+
listener: (peerDescriptor: PeerDescriptor, peers: RingContacts
|
|
27
|
+
) => void): void
|
|
14
28
|
removeContact: (nodeId: DhtAddress) => void
|
|
15
29
|
getClosestContacts: (maxCount?: number) => PeerDescriptor[]
|
|
16
30
|
getNeighbors: () => PeerDescriptor[]
|
|
17
31
|
getNeighborCount(): number
|
|
18
32
|
joinDht: (entryPoints: PeerDescriptor[], doRandomJoin?: boolean, retry?: boolean) => Promise<void>
|
|
33
|
+
joinRing: () => Promise<void>
|
|
19
34
|
start: () => Promise<void>
|
|
20
35
|
stop: () => Promise<void>
|
|
21
36
|
}
|
package/src/logic/NodeList.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { DhtAddress, getNodeIdFromPeerDescriptor } from '@streamr/dht'
|
|
2
2
|
import { sample } from 'lodash'
|
|
3
|
-
import {
|
|
3
|
+
import { ContentDeliveryRpcRemote } from './ContentDeliveryRpcRemote'
|
|
4
4
|
import { EventEmitter } from 'eventemitter3'
|
|
5
5
|
|
|
6
6
|
export interface Events {
|
|
7
|
-
nodeAdded: (id: DhtAddress, remote:
|
|
7
|
+
nodeAdded: (id: DhtAddress, remote: ContentDeliveryRpcRemote) => void
|
|
8
|
+
nodeRemoved: (id: DhtAddress, remote: ContentDeliveryRpcRemote) => void
|
|
8
9
|
}
|
|
9
10
|
|
|
10
|
-
const getValuesOfIncludedKeys = (nodes: Map<DhtAddress,
|
|
11
|
+
const getValuesOfIncludedKeys = (nodes: Map<DhtAddress, ContentDeliveryRpcRemote>, exclude: DhtAddress[]): ContentDeliveryRpcRemote[] => {
|
|
11
12
|
return Array.from(nodes.entries())
|
|
12
13
|
.filter(([id, _node]) => !exclude.includes(id))
|
|
13
14
|
.map(([_id, node]) => node)
|
|
@@ -16,7 +17,7 @@ const getValuesOfIncludedKeys = (nodes: Map<DhtAddress, DeliveryRpcRemote>, excl
|
|
|
16
17
|
// The items in the list are in the insertion order
|
|
17
18
|
|
|
18
19
|
export class NodeList extends EventEmitter<Events> {
|
|
19
|
-
private readonly nodes: Map<DhtAddress,
|
|
20
|
+
private readonly nodes: Map<DhtAddress, ContentDeliveryRpcRemote>
|
|
20
21
|
private readonly limit: number
|
|
21
22
|
private ownId: DhtAddress
|
|
22
23
|
|
|
@@ -27,7 +28,7 @@ export class NodeList extends EventEmitter<Events> {
|
|
|
27
28
|
this.ownId = ownId
|
|
28
29
|
}
|
|
29
30
|
|
|
30
|
-
add(remote:
|
|
31
|
+
add(remote: ContentDeliveryRpcRemote): void {
|
|
31
32
|
const nodeId = getNodeIdFromPeerDescriptor(remote.getPeerDescriptor())
|
|
32
33
|
if ((this.ownId !== nodeId) && (this.nodes.size < this.limit)) {
|
|
33
34
|
const isExistingNode = this.nodes.has(nodeId)
|
|
@@ -40,14 +41,19 @@ export class NodeList extends EventEmitter<Events> {
|
|
|
40
41
|
}
|
|
41
42
|
|
|
42
43
|
remove(nodeId: DhtAddress): void {
|
|
43
|
-
this.nodes.
|
|
44
|
+
if (this.nodes.has(nodeId)) {
|
|
45
|
+
const remote = this.nodes.get(nodeId)!
|
|
46
|
+
this.nodes.delete(nodeId)
|
|
47
|
+
this.emit('nodeRemoved', nodeId, remote)
|
|
48
|
+
}
|
|
44
49
|
}
|
|
45
50
|
|
|
46
51
|
has(nodeId: DhtAddress): boolean {
|
|
47
52
|
return this.nodes.has(nodeId)
|
|
48
53
|
}
|
|
49
54
|
|
|
50
|
-
|
|
55
|
+
// Replace nodes does not emit nodeRemoved events, use with caution
|
|
56
|
+
replaceAll(neighbors: ContentDeliveryRpcRemote[]): void {
|
|
51
57
|
this.nodes.clear()
|
|
52
58
|
const limited = neighbors.splice(0, this.limit)
|
|
53
59
|
limited.forEach((remote) => {
|
|
@@ -59,7 +65,7 @@ export class NodeList extends EventEmitter<Events> {
|
|
|
59
65
|
return Array.from(this.nodes.keys())
|
|
60
66
|
}
|
|
61
67
|
|
|
62
|
-
get(id: DhtAddress):
|
|
68
|
+
get(id: DhtAddress): ContentDeliveryRpcRemote | undefined {
|
|
63
69
|
return this.nodes.get(id)
|
|
64
70
|
}
|
|
65
71
|
|
|
@@ -67,16 +73,16 @@ export class NodeList extends EventEmitter<Events> {
|
|
|
67
73
|
return Array.from(this.nodes.keys()).filter((node) => !exclude.includes(node)).length
|
|
68
74
|
}
|
|
69
75
|
|
|
70
|
-
getRandom(exclude: DhtAddress[]):
|
|
76
|
+
getRandom(exclude: DhtAddress[]): ContentDeliveryRpcRemote | undefined {
|
|
71
77
|
return sample(getValuesOfIncludedKeys(this.nodes, exclude))
|
|
72
78
|
}
|
|
73
79
|
|
|
74
|
-
getFirst(exclude: DhtAddress[]):
|
|
80
|
+
getFirst(exclude: DhtAddress[]): ContentDeliveryRpcRemote | undefined {
|
|
75
81
|
const included = getValuesOfIncludedKeys(this.nodes, exclude)
|
|
76
82
|
return included[0]
|
|
77
83
|
}
|
|
78
84
|
|
|
79
|
-
getFirstAndLast(exclude: DhtAddress[]):
|
|
85
|
+
getFirstAndLast(exclude: DhtAddress[]): ContentDeliveryRpcRemote[] {
|
|
80
86
|
const included = getValuesOfIncludedKeys(this.nodes, exclude)
|
|
81
87
|
if (included.length === 0) {
|
|
82
88
|
return []
|
|
@@ -84,17 +90,17 @@ export class NodeList extends EventEmitter<Events> {
|
|
|
84
90
|
return included.length > 1 ? [this.getFirst(exclude)!, this.getLast(exclude)!] : [this.getFirst(exclude)!]
|
|
85
91
|
}
|
|
86
92
|
|
|
87
|
-
getLast(exclude: DhtAddress[]):
|
|
93
|
+
getLast(exclude: DhtAddress[]): ContentDeliveryRpcRemote | undefined {
|
|
88
94
|
const included = getValuesOfIncludedKeys(this.nodes, exclude)
|
|
89
95
|
return included[included.length - 1]
|
|
90
96
|
}
|
|
91
97
|
|
|
92
|
-
getAll():
|
|
98
|
+
getAll(): ContentDeliveryRpcRemote[] {
|
|
93
99
|
return Array.from(this.nodes.values())
|
|
94
100
|
}
|
|
95
101
|
|
|
96
102
|
stop(): void {
|
|
97
|
-
this.nodes.
|
|
103
|
+
this.nodes.forEach((node) => this.remove(getNodeIdFromPeerDescriptor(node.getPeerDescriptor())))
|
|
98
104
|
this.removeAllListeners()
|
|
99
105
|
}
|
|
100
106
|
}
|
|
@@ -5,7 +5,8 @@ import {
|
|
|
5
5
|
ITransport,
|
|
6
6
|
ConnectionLocker,
|
|
7
7
|
DhtAddress,
|
|
8
|
-
getNodeIdFromPeerDescriptor
|
|
8
|
+
getNodeIdFromPeerDescriptor,
|
|
9
|
+
RingContacts
|
|
9
10
|
} from '@streamr/dht'
|
|
10
11
|
import {
|
|
11
12
|
StreamMessage,
|
|
@@ -17,16 +18,15 @@ import {
|
|
|
17
18
|
CloseTemporaryConnection,
|
|
18
19
|
} from '../proto/packages/trackerless-network/protos/NetworkRpc'
|
|
19
20
|
import { NodeList } from './NodeList'
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import { IDeliveryRpc } from '../proto/packages/trackerless-network/protos/NetworkRpc.server'
|
|
21
|
+
import { ContentDeliveryRpcClient } from '../proto/packages/trackerless-network/protos/NetworkRpc.client'
|
|
22
|
+
import { ContentDeliveryRpcRemote } from './ContentDeliveryRpcRemote'
|
|
23
23
|
import { DuplicateMessageDetector } from './DuplicateMessageDetector'
|
|
24
24
|
import { Logger, addManagedEventListener } from '@streamr/utils'
|
|
25
25
|
import { Handshaker } from './neighbor-discovery/Handshaker'
|
|
26
26
|
import { Propagation } from './propagation/Propagation'
|
|
27
27
|
import { NeighborFinder } from './neighbor-discovery/NeighborFinder'
|
|
28
28
|
import { NeighborUpdateManager } from './neighbor-discovery/NeighborUpdateManager'
|
|
29
|
-
import {
|
|
29
|
+
import { ContentDeliveryRpcLocal } from './ContentDeliveryRpcLocal'
|
|
30
30
|
import { ProxyConnectionRpcLocal } from './proxy/ProxyConnectionRpcLocal'
|
|
31
31
|
import { Inspector } from './inspect/Inspector'
|
|
32
32
|
import { TemporaryConnectionRpcLocal } from './temporary-connection/TemporaryConnectionRpcLocal'
|
|
@@ -50,6 +50,8 @@ export interface StrictRandomGraphNodeConfig {
|
|
|
50
50
|
nodeViewSize: number
|
|
51
51
|
nearbyNodeView: NodeList
|
|
52
52
|
randomNodeView: NodeList
|
|
53
|
+
leftNodeView: NodeList
|
|
54
|
+
rightNodeView: NodeList
|
|
53
55
|
neighbors: NodeList
|
|
54
56
|
handshaker: Handshaker
|
|
55
57
|
neighborFinder: NeighborFinder
|
|
@@ -72,14 +74,14 @@ export class RandomGraphNode extends EventEmitter<Events> {
|
|
|
72
74
|
private started = false
|
|
73
75
|
private readonly duplicateDetectors: Map<string, DuplicateMessageDetector>
|
|
74
76
|
private config: StrictRandomGraphNodeConfig
|
|
75
|
-
private readonly
|
|
77
|
+
private readonly contentDeliveryRpcLocal: ContentDeliveryRpcLocal
|
|
76
78
|
private abortController: AbortController = new AbortController()
|
|
77
79
|
|
|
78
80
|
constructor(config: StrictRandomGraphNodeConfig) {
|
|
79
81
|
super()
|
|
80
82
|
this.config = config
|
|
81
83
|
this.duplicateDetectors = new Map()
|
|
82
|
-
this.
|
|
84
|
+
this.contentDeliveryRpcLocal = new ContentDeliveryRpcLocal({
|
|
83
85
|
localPeerDescriptor: this.config.localPeerDescriptor,
|
|
84
86
|
streamPartId: this.config.streamPartId,
|
|
85
87
|
rpcCommunicator: this.config.rpcCommunicator,
|
|
@@ -92,13 +94,15 @@ export class RandomGraphNode extends EventEmitter<Events> {
|
|
|
92
94
|
const contact = this.config.nearbyNodeView.get(sourceId)
|
|
93
95
|
|| this.config.randomNodeView.get(sourceId)
|
|
94
96
|
|| this.config.neighbors.get(sourceId)
|
|
95
|
-
|| this.config.proxyConnectionRpcLocal?.getConnection(sourceId
|
|
97
|
+
|| this.config.proxyConnectionRpcLocal?.getConnection(sourceId)?.remote
|
|
96
98
|
// TODO: check integrity of notifier?
|
|
97
99
|
if (contact) {
|
|
98
100
|
this.config.layer1Node.removeContact(sourceId)
|
|
99
101
|
this.config.neighbors.remove(sourceId)
|
|
100
102
|
this.config.nearbyNodeView.remove(sourceId)
|
|
101
|
-
this.config.
|
|
103
|
+
this.config.randomNodeView.remove(sourceId)
|
|
104
|
+
this.config.leftNodeView.remove(sourceId)
|
|
105
|
+
this.config.rightNodeView.remove(sourceId)
|
|
102
106
|
this.config.neighborFinder.start([sourceId])
|
|
103
107
|
this.config.proxyConnectionRpcLocal?.removeConnection(sourceId)
|
|
104
108
|
}
|
|
@@ -130,13 +134,29 @@ export class RandomGraphNode extends EventEmitter<Events> {
|
|
|
130
134
|
'randomContactAdded',
|
|
131
135
|
(_peerDescriptor: PeerDescriptor, randomPeers: PeerDescriptor[]) => this.onRandomContactAdded(randomPeers),
|
|
132
136
|
this.abortController.signal
|
|
133
|
-
)
|
|
137
|
+
)
|
|
134
138
|
addManagedEventListener<any, any>(
|
|
135
139
|
this.config.layer1Node as any,
|
|
136
140
|
'randomContactRemoved',
|
|
137
141
|
(_peerDescriptor: PeerDescriptor, randomPeers: PeerDescriptor[]) => this.onRandomContactRemoved(randomPeers),
|
|
138
142
|
this.abortController.signal
|
|
139
|
-
)
|
|
143
|
+
)
|
|
144
|
+
addManagedEventListener<any, any>(
|
|
145
|
+
this.config.layer1Node as any,
|
|
146
|
+
'ringContactAdded',
|
|
147
|
+
(_: PeerDescriptor, peers: RingContacts) => {
|
|
148
|
+
this.onRingContactEvent(peers)
|
|
149
|
+
},
|
|
150
|
+
this.abortController.signal
|
|
151
|
+
)
|
|
152
|
+
addManagedEventListener<any, any>(
|
|
153
|
+
this.config.layer1Node as any,
|
|
154
|
+
'ringContactRemoved',
|
|
155
|
+
(_: PeerDescriptor, peers: RingContacts) => {
|
|
156
|
+
this.onRingContactEvent(peers)
|
|
157
|
+
},
|
|
158
|
+
this.abortController.signal
|
|
159
|
+
)
|
|
140
160
|
addManagedEventListener<any, any>(
|
|
141
161
|
this.config.transport as any,
|
|
142
162
|
'disconnected',
|
|
@@ -146,12 +166,27 @@ export class RandomGraphNode extends EventEmitter<Events> {
|
|
|
146
166
|
addManagedEventListener(
|
|
147
167
|
this.config.neighbors,
|
|
148
168
|
'nodeAdded',
|
|
149
|
-
(id,
|
|
169
|
+
(id, remote) => {
|
|
150
170
|
this.config.propagation.onNeighborJoined(id)
|
|
171
|
+
this.config.connectionLocker.weakLockConnection(
|
|
172
|
+
getNodeIdFromPeerDescriptor(remote.getPeerDescriptor()),
|
|
173
|
+
this.config.streamPartId
|
|
174
|
+
)
|
|
151
175
|
this.emit('neighborConnected', id)
|
|
152
176
|
},
|
|
153
177
|
this.abortController.signal
|
|
154
178
|
)
|
|
179
|
+
addManagedEventListener(
|
|
180
|
+
this.config.neighbors,
|
|
181
|
+
'nodeRemoved',
|
|
182
|
+
(_id, remote) => {
|
|
183
|
+
this.config.connectionLocker.weakUnlockConnection(
|
|
184
|
+
getNodeIdFromPeerDescriptor(remote.getPeerDescriptor()),
|
|
185
|
+
this.config.streamPartId
|
|
186
|
+
)
|
|
187
|
+
},
|
|
188
|
+
this.abortController.signal
|
|
189
|
+
)
|
|
155
190
|
if (this.config.proxyConnectionRpcLocal !== undefined) {
|
|
156
191
|
addManagedEventListener(
|
|
157
192
|
this.config.proxyConnectionRpcLocal,
|
|
@@ -170,15 +205,40 @@ export class RandomGraphNode extends EventEmitter<Events> {
|
|
|
170
205
|
|
|
171
206
|
private registerDefaultServerMethods(): void {
|
|
172
207
|
this.config.rpcCommunicator.registerRpcNotification(StreamMessage, 'sendStreamMessage',
|
|
173
|
-
(msg: StreamMessage, context) => this.
|
|
208
|
+
(msg: StreamMessage, context) => this.contentDeliveryRpcLocal.sendStreamMessage(msg, context))
|
|
174
209
|
this.config.rpcCommunicator.registerRpcNotification(LeaveStreamPartNotice, 'leaveStreamPartNotice',
|
|
175
|
-
(req: LeaveStreamPartNotice, context) => this.
|
|
210
|
+
(req: LeaveStreamPartNotice, context) => this.contentDeliveryRpcLocal.leaveStreamPartNotice(req, context))
|
|
176
211
|
this.config.rpcCommunicator.registerRpcMethod(TemporaryConnectionRequest, TemporaryConnectionResponse, 'openConnection',
|
|
177
212
|
(req: TemporaryConnectionRequest, context) => this.config.temporaryConnectionRpcLocal.openConnection(req, context))
|
|
178
213
|
this.config.rpcCommunicator.registerRpcNotification(CloseTemporaryConnection, 'closeConnection',
|
|
179
214
|
(req: TemporaryConnectionRequest, context) => this.config.temporaryConnectionRpcLocal.closeConnection(req, context))
|
|
180
215
|
}
|
|
181
216
|
|
|
217
|
+
private onRingContactEvent(ringPeers: RingContacts): void {
|
|
218
|
+
logger.trace(`onRingContactAdded`)
|
|
219
|
+
if (this.isStopped()) {
|
|
220
|
+
return
|
|
221
|
+
}
|
|
222
|
+
this.config.leftNodeView.replaceAll(ringPeers.left.map((peer) =>
|
|
223
|
+
new ContentDeliveryRpcRemote(
|
|
224
|
+
this.config.localPeerDescriptor,
|
|
225
|
+
peer,
|
|
226
|
+
this.config.rpcCommunicator,
|
|
227
|
+
ContentDeliveryRpcClient,
|
|
228
|
+
this.config.rpcRequestTimeout
|
|
229
|
+
)
|
|
230
|
+
))
|
|
231
|
+
this.config.rightNodeView.replaceAll(ringPeers.right.map((peer) =>
|
|
232
|
+
new ContentDeliveryRpcRemote(
|
|
233
|
+
this.config.localPeerDescriptor,
|
|
234
|
+
peer,
|
|
235
|
+
this.config.rpcCommunicator,
|
|
236
|
+
ContentDeliveryRpcClient,
|
|
237
|
+
this.config.rpcRequestTimeout
|
|
238
|
+
)
|
|
239
|
+
))
|
|
240
|
+
}
|
|
241
|
+
|
|
182
242
|
private onContactAdded(closestNodes: PeerDescriptor[]): void {
|
|
183
243
|
logger.trace(`New nearby contact found`)
|
|
184
244
|
if (this.isStopped()) {
|
|
@@ -200,11 +260,11 @@ export class RandomGraphNode extends EventEmitter<Events> {
|
|
|
200
260
|
|
|
201
261
|
private updateNearbyNodeView(nodes: PeerDescriptor[]) {
|
|
202
262
|
this.config.nearbyNodeView.replaceAll(Array.from(nodes).map((descriptor) =>
|
|
203
|
-
new
|
|
263
|
+
new ContentDeliveryRpcRemote(
|
|
204
264
|
this.config.localPeerDescriptor,
|
|
205
265
|
descriptor,
|
|
206
266
|
this.config.rpcCommunicator,
|
|
207
|
-
|
|
267
|
+
ContentDeliveryRpcClient,
|
|
208
268
|
this.config.rpcRequestTimeout
|
|
209
269
|
)
|
|
210
270
|
))
|
|
@@ -213,13 +273,12 @@ export class RandomGraphNode extends EventEmitter<Events> {
|
|
|
213
273
|
break
|
|
214
274
|
}
|
|
215
275
|
this.config.nearbyNodeView.add(
|
|
216
|
-
new
|
|
276
|
+
new ContentDeliveryRpcRemote(
|
|
217
277
|
this.config.localPeerDescriptor,
|
|
218
278
|
descriptor,
|
|
219
279
|
this.config.rpcCommunicator,
|
|
220
|
-
|
|
280
|
+
ContentDeliveryRpcClient,
|
|
221
281
|
this.config.rpcRequestTimeout
|
|
222
|
-
|
|
223
282
|
)
|
|
224
283
|
)
|
|
225
284
|
}
|
|
@@ -230,11 +289,11 @@ export class RandomGraphNode extends EventEmitter<Events> {
|
|
|
230
289
|
return
|
|
231
290
|
}
|
|
232
291
|
this.config.randomNodeView.replaceAll(randomNodes.map((descriptor) =>
|
|
233
|
-
new
|
|
292
|
+
new ContentDeliveryRpcRemote(
|
|
234
293
|
this.config.localPeerDescriptor,
|
|
235
294
|
descriptor,
|
|
236
295
|
this.config.rpcCommunicator,
|
|
237
|
-
|
|
296
|
+
ContentDeliveryRpcClient,
|
|
238
297
|
this.config.rpcRequestTimeout
|
|
239
298
|
)
|
|
240
299
|
))
|
|
@@ -249,11 +308,11 @@ export class RandomGraphNode extends EventEmitter<Events> {
|
|
|
249
308
|
return
|
|
250
309
|
}
|
|
251
310
|
this.config.randomNodeView.replaceAll(randomNodes.map((descriptor) =>
|
|
252
|
-
new
|
|
311
|
+
new ContentDeliveryRpcRemote(
|
|
253
312
|
this.config.localPeerDescriptor,
|
|
254
313
|
descriptor,
|
|
255
314
|
this.config.rpcCommunicator,
|
|
256
|
-
|
|
315
|
+
ContentDeliveryRpcClient,
|
|
257
316
|
this.config.rpcRequestTimeout
|
|
258
317
|
)
|
|
259
318
|
))
|
|
@@ -263,7 +322,6 @@ export class RandomGraphNode extends EventEmitter<Events> {
|
|
|
263
322
|
const nodeId = getNodeIdFromPeerDescriptor(peerDescriptor)
|
|
264
323
|
if (this.config.neighbors.has(nodeId)) {
|
|
265
324
|
this.config.neighbors.remove(nodeId)
|
|
266
|
-
this.config.connectionLocker.unlockConnection(peerDescriptor, this.config.streamPartId)
|
|
267
325
|
this.config.neighborFinder.start([nodeId])
|
|
268
326
|
this.config.temporaryConnectionRpcLocal.removeNode(nodeId)
|
|
269
327
|
}
|
|
@@ -293,9 +351,13 @@ export class RandomGraphNode extends EventEmitter<Events> {
|
|
|
293
351
|
}
|
|
294
352
|
this.abortController.abort()
|
|
295
353
|
this.config.proxyConnectionRpcLocal?.stop()
|
|
296
|
-
this.config.neighbors.getAll().map(
|
|
297
|
-
|
|
298
|
-
|
|
354
|
+
this.config.neighbors.getAll().map((remote) => {
|
|
355
|
+
remote.leaveStreamPartNotice(this.config.streamPartId, this.config.isLocalNodeEntryPoint())
|
|
356
|
+
this.config.connectionLocker.weakUnlockConnection(
|
|
357
|
+
getNodeIdFromPeerDescriptor(remote.getPeerDescriptor()),
|
|
358
|
+
this.config.streamPartId
|
|
359
|
+
)
|
|
360
|
+
})
|
|
299
361
|
this.config.rpcCommunicator.destroy()
|
|
300
362
|
this.removeAllListeners()
|
|
301
363
|
this.config.nearbyNodeView.stop()
|