Skip to content

Commit

Permalink
chore(peer-exchange): use an event listener to gauge if the service i…
Browse files Browse the repository at this point in the history
…s mounted (#2071)

* chore: use service mounted event listener

* chore: update event name

* chore: change event name to isStarted

* chore: address comments
  • Loading branch information
danisharora099 authored Jul 22, 2024
1 parent 2b02f82 commit a739ada
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,16 @@ export interface Options {
maxRetries?: number;
}

interface CustomDiscoveryEvent extends PeerDiscoveryEvents {
"waku:peer-exchange:started": CustomEvent<boolean>;
}

export const DEFAULT_PEER_EXCHANGE_TAG_NAME = Tags.PEER_EXCHANGE;
const DEFAULT_PEER_EXCHANGE_TAG_VALUE = 50;
const DEFAULT_PEER_EXCHANGE_TAG_TTL = 100_000_000;

export class PeerExchangeDiscovery
extends TypedEventEmitter<PeerDiscoveryEvents>
extends TypedEventEmitter<CustomDiscoveryEvent>
implements PeerDiscovery
{
private readonly components: Libp2pComponents;
Expand Down Expand Up @@ -102,6 +106,10 @@ export class PeerExchangeDiscovery
return;
}

this.dispatchEvent(
new CustomEvent("waku:peer-exchange:started", { detail: true })
);

log.info("Starting peer exchange node discovery, discovering peers");

// might be better to use "peer:identify" or "peer:update"
Expand Down
45 changes: 25 additions & 20 deletions packages/tests/tests/peer-exchange/compliance.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,36 +24,41 @@ describe("Peer Exchange", function () {
beforeEachCustom(this, async () => {
nwaku1 = new ServiceNode(makeLogFileName(this.ctx) + "1");
nwaku2 = new ServiceNode(makeLogFileName(this.ctx) + "2");

await nwaku1.start({
relay: true,
discv5Discovery: true,
peerExchange: true
});
const enr = (await nwaku1.info()).enrUri;

await nwaku2.start({
relay: true,
discv5Discovery: true,
peerExchange: true,
discv5BootstrapNode: enr
});
});

tests({
async setup() {
await nwaku1.start({
relay: true,
discv5Discovery: true,
peerExchange: true
});

const enr = (await nwaku1.info()).enrUri;

await nwaku2.start({
relay: true,
discv5Discovery: true,
peerExchange: true,
discv5BootstrapNode: enr
});

waku = await createLightNode();
await waku.start();

const nwaku2Ma = await nwaku2.getMultiaddrWithId();

// we do this because we want peer-exchange discovery to get initialised before we dial the peer which contains info about the other peer
setTimeout(() => {
void waku.libp2p.dialProtocol(nwaku2Ma, PeerExchangeCodec);
}, 1000);
const peerExchange = new PeerExchangeDiscovery(
waku.libp2p.components,
pubsubTopic
);

peerExchange.addEventListener("waku:peer-exchange:started", (event) => {
if (event.detail === true) {
void waku.libp2p.dialProtocol(nwaku2Ma, PeerExchangeCodec);
}
});

return new PeerExchangeDiscovery(waku.libp2p.components, pubsubTopic);
return peerExchange;
},
teardown: async () => {
this.timeout(15000);
Expand Down

0 comments on commit a739ada

Please sign in to comment.