Optimize Idle CPU/Dash
Release rolling / release (push) Successful in 8m21s

This commit is contained in:
Raven Scott
2026-08-04 21:04:55 -04:00
parent 450b54ca55
commit ab6cea96c7
9 changed files with 690 additions and 214 deletions
+38 -1
View File
@@ -9,20 +9,54 @@ export class PeerRegistry {
constructor() {
/** @type {Map<string, import('../rpc/session.js').PeerSession>} */
this.sessions = new Map()
/** @type {Set<(size: number, prevSize: number) => void>} */
this._listeners = new Set()
}
/**
* Subscribe to peer count changes (add / remove / clear).
* @param {(size: number, prevSize: number) => void} fn
* @returns {() => void} unsubscribe
*/
onChange(fn) {
if (typeof fn !== 'function') return () => {}
this._listeners.add(fn)
return () => {
this._listeners.delete(fn)
}
}
/**
* @param {number} prevSize
*/
_emitChange(prevSize) {
const size = this.sessions.size
if (size === prevSize) return
for (const fn of this._listeners) {
try {
fn(size, prevSize)
} catch (err) {
log.debug('onChange listener failed', { error: err?.message })
}
}
}
/**
* @param {import('../rpc/session.js').PeerSession} session
*/
add(session) {
const prev = this.sessions.size
this.sessions.set(session.id, session)
this._emitChange(prev)
}
/**
* @param {string} id
*/
remove(id) {
this.sessions.delete(id)
const prev = this.sessions.size
const had = this.sessions.delete(id)
if (had) this._emitChange(prev)
}
/**
@@ -46,6 +80,7 @@ export class PeerRegistry {
* @param {unknown} payload
*/
broadcast(method, payload) {
if (this.sessions.size === 0) return
for (const session of this.sessions.values()) {
try {
session.push(method, payload)
@@ -60,6 +95,7 @@ export class PeerRegistry {
}
clear() {
const prev = this.sessions.size
for (const session of this.sessions.values()) {
try {
session.destroy()
@@ -68,6 +104,7 @@ export class PeerRegistry {
}
}
this.sessions.clear()
this._emitChange(prev)
}
}