Skip to content

Commit 3572631

Browse files
committed
Chat example: re-announce on peer discovery
1 parent f222ac8 commit 3572631

File tree

1 file changed

+28
-23
lines changed

1 file changed

+28
-23
lines changed

examples/chat/main.js

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,20 @@ async function fetchPeers() {
2727
return new Set(await res.json());
2828
}
2929

30-
/** @param {Set<string>} peers */
31-
async function announce(peers) {
32-
const data = {
33-
id: 'mutiny.example.chat',
34-
nick: state.nick.value,
35-
};
36-
for (const peer of peers) {
37-
await fetch("/_api/v1/announcements/outbox", {
38-
method: 'POST',
39-
body: JSON.stringify({peer, data}),
40-
});
41-
}
30+
const announced = new Set();
31+
async function announce() {
32+
const data = {
33+
id: 'mutiny.example.chat',
34+
nick: state.nick.value,
35+
};
36+
for (const peer of state.peers.value.difference(announced)) {
37+
console.log('announcing to', peer);
38+
await fetch("/_api/v1/announcements/outbox", {
39+
method: 'POST',
40+
body: JSON.stringify({peer, data}),
41+
});
42+
announced.add(peer);
43+
}
4244
}
4345

4446
async function fetchAnnouncements() {
@@ -91,25 +93,28 @@ state.announcements.value = await fetchAnnouncements();
9193
state.peers.value = await fetchPeers();
9294
await fetchMessages();
9395

94-
// Announce app to newly discovered peers
95-
announce(state.peers.value);
96-
97-
// Announce to all peers when nick changes
98-
watch([state.nick], () => announce(state.peers.value));
96+
// Announce app when new peers discovered or nick changes
97+
watch([state.peers], announce);
98+
watch([state.nick], () => {
99+
// Re-announce to all peers on nick change
100+
announced.clear();
101+
announce();
102+
});
103+
announce();
99104

100105
// Ask user for nickname
101106
askNick();
102107

103108
// Subscribe to server-sent events
104109
const peer_events = new EventSource("/_api/v1/peers/events");
105-
peer_events.addEventListener("PeerDiscovered", peer_id => {
106-
console.log('Peer discovered', peer_id);
107-
state.peers.value.add(peer_id);
110+
peer_events.addEventListener("PeerDiscovered", event => {
111+
console.log('Peer discovered', event.data);
112+
state.peers.value.add(event.data);
108113
state.peers.signal();
109114
});
110-
peer_events.addEventListener("PeerExpired", peer_id => {
111-
console.log('Peer expired', peer_id);
112-
state.peers.value.delete(peer_id);
115+
peer_events.addEventListener("PeerExpired", event => {
116+
console.log('Peer expired', event.data);
117+
state.peers.value.delete(event.data);
113118
state.peers.signal();
114119
});
115120

0 commit comments

Comments
 (0)