*Refactor bootstrap so for every peer we get, we will trigger a connection to it

*Move initial hello handshake to private method and remove us from the explicit peer list in case it was added via bootstrap
This commit is contained in:
Derrick Hammer 2022-12-17 10:15:24 -05:00
parent 638df772fa
commit 2465b80441
Signed by: pcfreak30
GPG Key ID: C997C339BE476FF2
1 changed files with 23 additions and 9 deletions

View File

@ -61,9 +61,7 @@ export default class DHTCache extends EventEmitter {
this.flood.on("peer-remove", (peer) => this.removePeerHandler(peer));
this.flood.on("message", (message, id) => this.onGetBroadcast(message, id));
this.swarm.on("connection", (peer: any) =>
this.send(peer, b4a.from("hello"))
);
this.swarm.on("connection", this._hello.bind(this));
[...this.swarm.peers.values()]
.map((item) => {
@ -398,25 +396,36 @@ export default class DHTCache extends EventEmitter {
}
private _bootstrapFrom(bootstrap: Bootstrap) {
if (this.bootstrapped) {
return;
}
for (const id in bootstrap) {
const { connectedTo } = bootstrap[id];
if (id === this.id.toString("hex")) {
continue;
}
if (!this.connectedTo.has(id)) {
this.swarm.joinPeer(id);
}
for (const connection of connectedTo) {
const peer = b4a.from(connection) as Buffer;
if (b4a.equals(peer, this.id)) {
continue;
}
this._ensurePeer(peer);
this._addEntityConnection(id, peer);
if (!this.connectedTo.has(peer.toString("hex"))) {
this.swarm.joinPeer(peer);
}
}
}
this.bootstrapped = true;
this.emit("bootstrapped");
if (!this.bootstrapped) {
this.bootstrapped = true;
this.emit("bootstrapped");
}
this._recalculate();
}
@ -574,4 +583,9 @@ export default class DHTCache extends EventEmitter {
);
}
}
private _hello(peer: any) {
this.send(peer, b4a.from("hello"));
this.swarm.leavePeer(peer.remotePublicKey);
}
}