fibers_transport

Crates.io: fibers_transport Documentation Build Status Code Coverage License: MIT

Transport layer abstraction built on top of [fibers] crate.

Documentation

Examples

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, DefaultFactory>; type TcpClient = TcpTransporter;

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); ```