Struct message_io::network::Endpoint
source · pub struct Endpoint { /* private fields */ }
Expand description
Information to identify the remote endpoint. The endpoint is used mainly as a connection identified.
Implementations§
source§impl Endpoint
impl Endpoint
sourcepub fn from_listener(id: ResourceId, addr: SocketAddr) -> Self
pub fn from_listener(id: ResourceId, addr: SocketAddr) -> Self
Creates a new Endpoint to use in non connection oriented protocols.
For non connection-oriented protocols, as UDP, the endpoint can be created manually from a listener resource to send messages to different address without creating a connection.
For connection oriented protocol, creating manually an endpoint is not allowed.
§Example
use message_io::node::{self, NodeEvent};
use message_io::network::{Transport, Endpoint, NetEvent};
let (handler, listener) = node::split::<()>();
handler.signals().send_with_timer((), std::time::Duration::from_secs(1)); //timeout
let listen_addr = "127.0.0.1:0";
let (receiver_id_1, addr_1) = handler.network().listen(Transport::Udp, listen_addr).unwrap();
let (receiver_id_2, addr_2) = handler.network().listen(Transport::Udp, listen_addr).unwrap();
let (sender_id, _) = handler.network().listen(Transport::Udp, listen_addr).unwrap();
//addr_1 and addr_2 contain the addresses with the listening ports.
handler.network().send(Endpoint::from_listener(sender_id, addr_1), &[23]);
handler.network().send(Endpoint::from_listener(sender_id, addr_2), &[42]);
let (mut msg_1, mut msg_2) = (0, 0);
listener.for_each(|event| match event {
NodeEvent::Signal(_) => handler.stop(),
NodeEvent::Network(net_event) => match net_event {
NetEvent::Message(endpoint, message) => match endpoint.resource_id() {
id if id == receiver_id_1 => msg_1 = message[0],
id if id == receiver_id_2 => msg_2 = message[0],
_ => unreachable!(),
}
_ => unreachable!(),
}
});
assert_eq!((msg_1, msg_2), (23, 42));
sourcepub fn resource_id(&self) -> ResourceId
pub fn resource_id(&self) -> ResourceId
Returns the inner network resource id used by this endpoint. It is not necessary to be unique for each endpoint if some of them shared the resource (an example of this is the different endpoints generated by when you listen by udp).
sourcepub fn addr(&self) -> SocketAddr
pub fn addr(&self) -> SocketAddr
Returns the peer address of the endpoint.
Trait Implementations§
source§impl PartialEq for Endpoint
impl PartialEq for Endpoint
impl Copy for Endpoint
impl Eq for Endpoint
impl StructuralPartialEq for Endpoint
Auto Trait Implementations§
impl RefUnwindSafe for Endpoint
impl Send for Endpoint
impl Sync for Endpoint
impl Unpin for Endpoint
impl UnwindSafe for Endpoint
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