pub struct SubscriptionRegistry { /* private fields */ }Expand description
Per-URI registry of subscribed peers with broadcast helpers.
Cheap to clone (all state is behind an Arc<Mutex<...>> externally —
typically Arc<SubscriptionRegistry> on the server). Methods take
&self because the internal Mutex provides interior mutability.
Implementations§
Source§impl SubscriptionRegistry
impl SubscriptionRegistry
Sourcepub fn subscribe(&self, uri: &str, peer: Peer<RoleServer>)
pub fn subscribe(&self, uri: &str, peer: Peer<RoleServer>)
Record a new subscription. See the module-level docs for the duplicate-subscribe behaviour: two calls with the same peer land two entries in the list.
Sourcepub fn unsubscribe(&self, uri: &str, _peer: &Peer<RoleServer>) -> usize
pub fn unsubscribe(&self, uri: &str, _peer: &Peer<RoleServer>) -> usize
Remove all subscriptions for uri. Returns the number of entries
that were removed.
_peer is accepted for API symmetry with the MCP protocol
(the incoming unsubscribe request carries no peer identity beyond
“the session issuing the call”), but isn’t used for matching.
Sourcepub fn subscribers_for(&self, uri: &str) -> Vec<Peer<RoleServer>>
pub fn subscribers_for(&self, uri: &str) -> Vec<Peer<RoleServer>>
Return a snapshot of all peers subscribed to uri. Useful for
tests and for the notify helpers below, which want to release the
mutex before doing any async work.
Sourcepub fn subscribed_uris(&self) -> Vec<String>
pub fn subscribed_uris(&self) -> Vec<String>
Return the set of URIs that currently have at least one subscriber.
Sourcepub fn clear(&self)
pub fn clear(&self)
Drop all subscriptions for every URI. Invoked when the server is shutting down or a full workspace reset has happened.
Sourcepub fn notify_updated(&self, uri: &str)
pub fn notify_updated(&self, uri: &str)
Fire a notifications/resources/updated for uri to every current
subscriber. Sends happen in detached tokio tasks so the caller
doesn’t wait on the channel.
If a send fails (typically because the peer disconnected) we log
the error at debug level but do not prune the dead peer — see
the module-level “Tradeoffs” note for why. Over very long-lived
servers this can accumulate stale entries in the registry.
No-op when the caller is outside a tokio runtime or the registry
has no subscribers for uri.
Sourcepub fn notify_list_changed(&self)
pub fn notify_list_changed(&self)
Fire a notifications/resources/list_changed broadcast to every
subscribed peer (across all URIs). Called when tables are added or
dropped, or saved queries created / deleted.
Deduplicates peers across URIs so a client subscribed to three URIs only receives one list-changed notification.
Trait Implementations§
Source§impl Debug for SubscriptionRegistry
impl Debug for SubscriptionRegistry
Source§impl Default for SubscriptionRegistry
impl Default for SubscriptionRegistry
Source§fn default() -> SubscriptionRegistry
fn default() -> SubscriptionRegistry
Auto Trait Implementations§
impl !Freeze for SubscriptionRegistry
impl RefUnwindSafe for SubscriptionRegistry
impl Send for SubscriptionRegistry
impl Sync for SubscriptionRegistry
impl Unpin for SubscriptionRegistry
impl UnsafeUnpin for SubscriptionRegistry
impl UnwindSafe for SubscriptionRegistry
Blanket Implementations§
impl<T> Allocation for T
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request