48 lines
806 B
JavaScript
48 lines
806 B
JavaScript
/**
|
|
* Live connected peer sessions.
|
|
*/
|
|
|
|
/** @type {Map<string, import('../rpc/session.js').PeerSession>} */
|
|
const byId = new Map()
|
|
|
|
export const peers = {
|
|
/**
|
|
* @param {import('../rpc/session.js').PeerSession} session
|
|
*/
|
|
add(session) {
|
|
byId.set(session.id, session)
|
|
},
|
|
/**
|
|
* @param {string} id
|
|
*/
|
|
remove(id) {
|
|
byId.delete(id)
|
|
},
|
|
/**
|
|
* @param {string} id
|
|
*/
|
|
get(id) {
|
|
return byId.get(id) || null
|
|
},
|
|
list() {
|
|
return [...byId.values()]
|
|
},
|
|
size() {
|
|
return byId.size
|
|
},
|
|
/**
|
|
* Push event to every connected peer.
|
|
* @param {string} event
|
|
* @param {unknown} payload
|
|
*/
|
|
broadcast(event, payload) {
|
|
for (const s of byId.values()) {
|
|
try {
|
|
s.push(event, payload)
|
|
} catch {
|
|
// ignore
|
|
}
|
|
}
|
|
},
|
|
}
|