pub struct Channel<H>where
H: WebImpl,{ /* private fields */ }Available on crate feature
web03 only.Expand description
A channel to a WebSocket server.
See Handle::channel for more details.
Implementations§
Source§impl<H> Channel<H>where
H: WebImpl,
impl<H> Channel<H>where
H: WebImpl,
Sourcepub fn handle(&self) -> &Handle<H>
pub fn handle(&self) -> &Handle<H>
Get a handle for this channel.
A handle sheds the channel information and allows for setting up things like broadcast listener.
Sourcepub fn request(&self) -> RequestBuilder<'_, H, EmptyBody, EmptyCallback>
pub fn request(&self) -> RequestBuilder<'_, H, EmptyBody, EmptyCallback>
Send a request of type T over the current channel.
Returns a handle for the request.
If the handle is dropped, the request is cancelled.
§Examples
use yew::prelude::*;
use musli_web::web03::prelude::*;
mod api {
use musli::{Decode, Encode};
use musli_web::api;
#[derive(Encode, Decode)]
pub struct HelloRequest<'de> {
pub message: &'de str,
}
#[derive(Encode, Decode)]
pub struct HelloResponse<'de> {
pub message: &'de str,
}
api::define! {
pub type Hello;
impl Endpoint for Hello {
impl<'de> Request for HelloRequest<'de>;
type Response<'de> = HelloResponse<'de>;
}
}
}
enum Msg {
OnHello(Result<ws::Packet<api::Hello>, ws::Error>),
OnChannel(Result<ws::Channel, ws::Error>),
}
#[derive(Properties, PartialEq)]
struct Props {
ws: ws::Handle,
}
struct App {
message: String,
_hello: ws::Request,
_channel_open: ws::Request,
channel: ws::Channel,
}
impl Component for App {
type Message = Msg;
type Properties = Props;
fn create(ctx: &Context<Self>) -> Self {
let link = ctx.link().clone();
let _channel_open = ctx.props().ws
.channel()
.on_open(ctx.link().callback(Msg::OnChannel))
.send();
Self {
message: String::from("No Message :("),
_hello: ws::Request::default(),
_channel_open: _channel_open,
channel: ws::Channel::default(),
}
}
fn update(&mut self, ctx: &Context<Self>, msg: Self::Message) -> bool {
match msg {
Msg::OnHello(Err(error)) => {
tracing::error!("Request error: {:?}", error);
false
}
Msg::OnHello(Ok(packet)) => {
if let Ok(response) = packet.decode() {
self.message = response.message.to_owned();
}
true
}
Msg::OnChannel(result) => {
if let Ok(channel) = result {
self.channel = channel;
}
self._hello = self.channel
.request()
.body(api::HelloRequest { message: "Hello!"})
.on_packet(ctx.link().callback(Msg::OnHello))
.send();
true
}
}
}
fn view(&self, ctx: &Context<Self>) -> Html {
html! {
<div>
<h1>{"WebSocket Example"}</h1>
<p>{format!("Message: {}", self.message)}</p>
</div>
}
}
}Trait Implementations§
Source§impl<H> Default for Channel<H>where
H: WebImpl,
Construct a default connected handle.
impl<H> Default for Channel<H>where
H: WebImpl,
Construct a default connected handle.
§Examples
use musli_web::web03::prelude::*;
let channel = ws::Channel::default();
assert_eq!(channel.id(), ws::ChannelId::NONE);Auto Trait Implementations§
impl<H> !RefUnwindSafe for Channel<H>
impl<H> !Send for Channel<H>
impl<H> !Sync for Channel<H>
impl<H> !UnwindSafe for Channel<H>
impl<H> Freeze for Channel<H>
impl<H> Unpin for Channel<H>
impl<H> UnsafeUnpin for Channel<H>
Blanket Implementations§
impl<Token, Builder, How> AllPropsFor<Builder, How> for Tokenwhere
Builder: Buildable<Token>,
<Builder as Buildable<Token>>::WrappedToken: HasAllProps<<Builder as Buildable<Token>>::Output, How>,
impl<Token, Builder, How> AllPropsFor<Builder, How> for Tokenwhere
Builder: Buildable<Token>,
<Builder as Buildable<Token>>::WrappedToken: HasAllProps<<Builder as Buildable<Token>>::Output, How>,
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<T> HasAllProps<(), T> for T
impl<T> HasAllProps<(), T> for 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> IntoPropValue<Option<T>> for T
impl<T> IntoPropValue<Option<T>> for T
Source§fn into_prop_value(self) -> Option<T>
fn into_prop_value(self) -> Option<T>
Convert
self to a value of a Properties struct.Source§impl<T> IntoPropValue<Option<T>> for T
impl<T> IntoPropValue<Option<T>> for T
Source§fn into_prop_value(self) -> Option<T>
fn into_prop_value(self) -> Option<T>
Convert
self to a value of a Properties struct.Source§impl<T> IntoPropValue<T> for T
impl<T> IntoPropValue<T> for T
Source§fn into_prop_value(self) -> T
fn into_prop_value(self) -> T
Convert
self to a value of a Properties struct.Source§impl<T> IntoPropValue<T> for T
impl<T> IntoPropValue<T> for T
Source§fn into_prop_value(self) -> T
fn into_prop_value(self) -> T
Convert
self to a value of a Properties struct.