pub struct Channel { /* private fields */ }
Expand description
An asynchronous, bounded, and bi-directional message-passing mechanism between processes.
Implementations§
Source§impl Channel
impl Channel
Sourcepub fn from_handle(handle: OwnedHandle) -> Channel
pub fn from_handle(handle: OwnedHandle) -> Channel
Creates a new channel from a handle.
Sourcepub fn create() -> Result<(Channel, Channel), FtlError>
pub fn create() -> Result<(Channel, Channel), FtlError>
Creates a new channel pair, connected to each other.
Sourcepub fn handle(&self) -> &OwnedHandle
pub fn handle(&self) -> &OwnedHandle
Returns the handle of the channel.
Sourcepub fn split(self) -> (ChannelSender, ChannelReceiver)
pub fn split(self) -> (ChannelSender, ChannelReceiver)
Splits the channel into sender/receiver halves.
Currently, it’s no more than Arc<Channel>
, but splitting a channel
whenever you can is recommended for future compatibility.
Sourcepub fn send<M: MessageSerialize>(&self, msg: M) -> Result<(), FtlError>
pub fn send<M: MessageSerialize>(&self, msg: M) -> Result<(), FtlError>
Sends a message to the channel’s peer. Non-blocking.
§Note
If the peer’s message queue is full, this method will return an error immediately without blocking.
Sourcepub fn send_with_buffer<M: MessageSerialize>(
&self,
buffer: &mut MessageBuffer,
msg: M,
) -> Result<(), FtlError>
pub fn send_with_buffer<M: MessageSerialize>( &self, buffer: &mut MessageBuffer, msg: M, ) -> Result<(), FtlError>
Sends a message to the channel’s peer using the provided buffer. Non-blocking.
Sourcepub fn try_recv<'a, M: MessageDeserialize>(
&self,
buffer: &'a mut MessageBuffer,
) -> Result<Option<M::Reader<'a>>, RecvError>
pub fn try_recv<'a, M: MessageDeserialize>( &self, buffer: &'a mut MessageBuffer, ) -> Result<Option<M::Reader<'a>>, RecvError>
Receives a message from the channel’s peer. Non-blocking.
See Self::recv
for more details.
Sourcepub fn recv<'a, M: MessageDeserialize>(
&self,
msgbuffer: &'a mut MessageBuffer,
) -> Result<M::Reader<'a>, RecvError>
pub fn recv<'a, M: MessageDeserialize>( &self, msgbuffer: &'a mut MessageBuffer, ) -> Result<M::Reader<'a>, RecvError>
Receives a message from the channel’s peer using the provided buffer. Blocking.
Kernel writes the received message into the buffer (msgbuffer
), this library
deserializes the message, and returns a typed message object.
§Example
use starina_api::types::message::MessageBuffer;
let mut msgbuffer = MessageBuffer::new();
let reply = ch.recv::<PingReply>(&mut msgbuffer);
debug!("reply = {}", reply.value);
Sourcepub fn call<'a, M>(
&self,
msgbuffer: &'a mut MessageBuffer,
request: M,
) -> Result<<M::Reply as MessageDeserialize>::Reader<'a>, CallError>where
M: MessageCallable,
pub fn call<'a, M>(
&self,
msgbuffer: &'a mut MessageBuffer,
request: M,
) -> Result<<M::Reply as MessageDeserialize>::Reader<'a>, CallError>where
M: MessageCallable,
Send a message and then receive a reply. Blocking.
See Self::recv
for more details on buffer
.