handle local discovery for events

This commit is contained in:
danisharora099 2024-02-19 18:38:15 +05:30
parent 199f6ab2ff
commit f8213e425f
No known key found for this signature in database
GPG Key ID: FBD2BF500037F135
3 changed files with 59 additions and 22 deletions

View File

@ -395,11 +395,26 @@ export class ConnectionManager
this.libp2p.peerStore
);
const isBootstrap = (await this.getTagNamesForPeer(peerId)).includes(
Tags.BOOTSTRAP
);
// const isBootstrap = (await this.getTagNamesForPeer(peerId)).includes(
// Tags.BOOTSTRAP
// );
const tags = await this.getTagNamesForPeer(peerId);
if (isBootstrap) {
let tag: Tags;
if (tags.includes(Tags.BOOTSTRAP)) {
tag = Tags.BOOTSTRAP;
} else if (tags.includes(Tags.PEER_EXCHANGE)) {
tag = Tags.PEER_EXCHANGE;
} else if (tags.includes(Tags.LOCAL)) {
tag = Tags.LOCAL;
} else {
log.warn(
`Peer ${peerId.toString()} has no discovery tag. Not dispatching discovery event`
);
return;
}
if (tag === Tags.BOOTSTRAP) {
const bootstrapConnections = this.libp2p
.getConnections()
.filter((conn) => conn.tags.includes(Tags.BOOTSTRAP));
@ -420,13 +435,23 @@ export class ConnectionManager
);
}
} else {
let discoveryTagName: EPeersByDiscoveryEvents;
if (tag === Tags.PEER_EXCHANGE) {
discoveryTagName =
EPeersByDiscoveryEvents.PEER_CONNECT_PEER_EXCHANGE;
} else if (tag === Tags.LOCAL) {
discoveryTagName = EPeersByDiscoveryEvents.PEER_CONNECT_LOCAL;
} else {
log.warn(
`Peer ${peerId.toString()} has no discovery tag. Not dispatching discovery event`
);
return;
}
this.dispatchEvent(
new CustomEvent<PeerId>(
EPeersByDiscoveryEvents.PEER_CONNECT_PEER_EXCHANGE,
{
detail: peerId
}
)
new CustomEvent<PeerId>(discoveryTagName, {
detail: peerId
})
);
}
this.toggleOnline();
@ -518,19 +543,26 @@ export class ConnectionManager
}
private async dispatchDiscoveryEvent(peerId: PeerId): Promise<void> {
const isBootstrap = (await this.getTagNamesForPeer(peerId)).includes(
Tags.BOOTSTRAP
);
const tags = await this.getTagNamesForPeer(peerId);
let tag: Tags;
if (tags.includes(Tags.BOOTSTRAP)) {
tag = Tags.BOOTSTRAP;
} else if (tags.includes(Tags.PEER_EXCHANGE)) {
tag = Tags.PEER_EXCHANGE;
} else if (tags.includes(Tags.LOCAL)) {
tag = Tags.LOCAL;
} else {
log.warn(
`Peer ${peerId.toString()} has no discovery tag. Not dispatching discovery event`
);
return;
}
this.dispatchEvent(
new CustomEvent<PeerId>(
isBootstrap
? EPeersByDiscoveryEvents.PEER_DISCOVERY_BOOTSTRAP
: EPeersByDiscoveryEvents.PEER_DISCOVERY_PEER_EXCHANGE,
{
detail: peerId
}
)
new CustomEvent<PeerId>(tag, {
detail: peerId
})
);
}

View File

@ -26,15 +26,19 @@ export interface ConnectionManagerOptions {
export enum EPeersByDiscoveryEvents {
PEER_DISCOVERY_BOOTSTRAP = "peer:discovery:bootstrap",
PEER_DISCOVERY_PEER_EXCHANGE = "peer:discovery:peer-exchange",
PEER_DISCOVERY_LOCAL = "peer:discovery:local",
PEER_CONNECT_BOOTSTRAP = "peer:connected:bootstrap",
PEER_CONNECT_PEER_EXCHANGE = "peer:connected:peer-exchange"
PEER_CONNECT_PEER_EXCHANGE = "peer:connected:peer-exchange",
PEER_CONNECT_LOCAL = "peer:connected:local"
}
export interface IPeersByDiscoveryEvents {
[EPeersByDiscoveryEvents.PEER_DISCOVERY_BOOTSTRAP]: CustomEvent<PeerId>;
[EPeersByDiscoveryEvents.PEER_DISCOVERY_PEER_EXCHANGE]: CustomEvent<PeerId>;
[EPeersByDiscoveryEvents.PEER_DISCOVERY_LOCAL]: CustomEvent<PeerId>;
[EPeersByDiscoveryEvents.PEER_CONNECT_BOOTSTRAP]: CustomEvent<PeerId>;
[EPeersByDiscoveryEvents.PEER_CONNECT_PEER_EXCHANGE]: CustomEvent<PeerId>;
[EPeersByDiscoveryEvents.PEER_CONNECT_LOCAL]: CustomEvent<PeerId>;
}
export interface PeersByDiscoveryResult {

View File

@ -26,6 +26,7 @@ describe("Events", function () {
await tearDownNodes([], waku);
});
//TODO: add tests for local discovery
describe("peer:discovery", () => {
it("should emit `peer:discovery:bootstrap` event when a peer is discovered", async function () {
const peerIdBootstrap = await createSecp256k1PeerId();