Transport layer abstraction built on top of [fibers
] crate.
UDP peers.
``` use bytecodec::bytes::{Utf8Decoder, Utf8Encoder}; use fiberstransport::{Transport, UdpTransport, UdpTransporter, waitsend, wait_recv};
type UdpPeer = UdpTransporter
// Binds peers. let mut peer0 = fibersglobal::execute(UdpPeer::bind("127.0.0.1:0".parse().unwrap()))?; let peer1 = fibersglobal::execute(UdpPeer::bind("127.0.0.1:0".parse().unwrap()))?;
// peer0
sends a message to peer1
.
peer0.startsend(peer1.localaddr(), "foo".toowned())?;
let peer0 = fibersglobal::execute(wait_send(peer0))?;
// peer1
receives a message from peer0
.
let (, addr, item) = fibersglobal::execute(waitrecv(peer1))?;
asserteq!(addr, peer0.localaddr());
asserteq!(item, "foo");
```
TCP server and client.
``` use bytecodec::fixnum::{U8Decoder, U8Encoder}; use factory::DefaultFactory; use fiberstransport::{Transport, TcpListener, TcpTransport, TcpTransporter, waitsend, wait_recv}; use futures::Stream;
type TcpServer = TcpListener
let server = fibersglobal::execute(TcpServer::listen("127.0.0.1:0".parse().unwrap()))?; let mut client = fibersglobal::execute(TcpClient::connect(server.local_addr()))?;
// Sends a message to the server. client.startsend((), 123)?; let client = fibersglobal::execute(wait_send(client))?;
// Receives the message from the client. let (server, ) = fibersglobal::execute(server.intofuture()).maperr(|(e, )| e)?; let server = server.unwrap(); asserteq!(server.peeraddr(), client.localaddr());
let (mut server, , item) = fibersglobal::execute(waitrecv(server))?; asserteq!(item, 123);
// Replies to the client. server.startsend((), 9)?; let _ = fibersglobal::execute(wait_send(server))?;
// Receives the reply from the server. let (, _, item) = fibersglobal::execute(waitrecv(client))?; asserteq!(item, 9); ```