pub struct WshRouter {
inner: Mutex<RouterInner>,
input_tx: Sender<MsgAndRoute>,
}Expand description
RPC message router. Acts like a network switch, routing messages between multiple named endpoints based on route IDs.
Port of Go’s WshRouter from pkg/wshutil/wshrouter.go.
Fields§
§inner: Mutex<RouterInner>§input_tx: Sender<MsgAndRoute>Implementations§
Source§impl WshRouter
impl WshRouter
Sourcepub fn inject_message(&self, msg_bytes: Vec<u8>, from_route_id: &str)
pub fn inject_message(&self, msg_bytes: Vec<u8>, from_route_id: &str)
Inject a message into the router from a given route.
Sourcepub fn register_route(&self, route_id: &str, client: Box<dyn RpcClient>)
pub fn register_route(&self, route_id: &str, client: Box<dyn RpcClient>)
Register a route with the router.
Sourcepub fn unregister_route(&self, route_id: &str)
pub fn unregister_route(&self, route_id: &str)
Unregister a route from the router.
Sourcepub async fn wait_for_register(&self, route_id: &str, timeout: Duration) -> bool
pub async fn wait_for_register(&self, route_id: &str, timeout: Duration) -> bool
Wait for a route to be registered (with timeout).
Sourcepub async fn run_simple_raw_command(
&self,
msg: RpcMessage,
from_route_id: &str,
timeout: Duration,
) -> Result<Option<RpcMessage>, String>
pub async fn run_simple_raw_command( &self, msg: RpcMessage, from_route_id: &str, timeout: Duration, ) -> Result<Option<RpcMessage>, String>
Run a simple request through the router and wait for a single response.
fn register_route_info( &self, rpc_id: &str, source_route_id: &str, dest_route_id: &str, )
fn unregister_route_info(&self, rpc_id: &str)
fn get_route_info(&self, rpc_id: &str) -> Option<RouteInfo>
fn send_routed_message(&self, msg_bytes: &[u8], route_id: &str) -> bool
fn handle_no_route(&self, msg: &RpcMessage)
fn handle_announce_message(&self, msg: &RpcMessage, from_route_id: &str)
fn handle_unannounce_message(&self, msg: &RpcMessage)
fn register_simple_request(&self, req_id: &str) -> Receiver<RpcMessage>
fn try_simple_response(&self, msg: &RpcMessage) -> bool
fn clear_simple_request(&self, req_id: &str)
async fn run_server(&self, input_rx: Receiver<MsgAndRoute>)
Trait Implementations§
Auto Trait Implementations§
impl !Freeze for WshRouter
impl RefUnwindSafe for WshRouter
impl Send for WshRouter
impl Sync for WshRouter
impl Unpin for WshRouter
impl UnwindSafe for WshRouter
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<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.