pub struct WsChannel {
pub write: Mutex<WsSink>,
pub pending: Mutex<HashMap<String, Sender<ToolExecuteResponse>>>,
pub active_actions: Mutex<HashMap<String, String>>,
pub next_id: AtomicU64,
}Expand description
Shared write half of the WebSocket, plus pending callback channels.
write is type-erased via WsSink so the dispatcher can run
against any transport-specific WebSocketStream (TCP or UDS today;
axum-bridged in future) without templatizing every consumer.
Fields§
§write: Mutex<WsSink>§pending: Mutex<HashMap<String, Sender<ToolExecuteResponse>>>Pending tool execution callbacks: request_id → oneshot sender
active_actions: Mutex<HashMap<String, String>>Body-free correlation for active callbacks. A session owns at most one active run, so every entry belongs to that run while its lifecycle guard is held by proposal execution.
next_id: AtomicU64Implementations§
Trait Implementations§
Source§impl EventSubscriber for WsChannel
A WS connection is a host event sink (#418): HostState broadcasts
host.event frames to subscribers through this trait, so it never has to
know about the concrete WsChannel / tungstenite types.
impl EventSubscriber for WsChannel
A WS connection is a host event sink (#418): HostState broadcasts
host.event frames to subscribers through this trait, so it never has to
know about the concrete WsChannel / tungstenite types.
Source§fn send_text<'life0, 'async_trait>(
&'life0 self,
json: String,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn send_text<'life0, 'async_trait>(
&'life0 self,
json: String,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Send a pre-serialized JSON-RPC frame. Best-effort: a wedged/closed socket
is reaped by the next
unsubscribe, not surfaced as an error here.Auto Trait Implementations§
impl !Freeze for WsChannel
impl !RefUnwindSafe for WsChannel
impl !UnwindSafe for WsChannel
impl Send for WsChannel
impl Sync for WsChannel
impl Unpin for WsChannel
impl UnsafeUnpin for WsChannel
Blanket Implementations§
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
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<S, T> Duplex<S> for Twhere
T: FromSample<S> + ToSample<S>,
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
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> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more