1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
//! Trait system for facilitating non-blocking stream chaining with handshaking //! //! # Example //! //! ```rust //! use url2::prelude::*; //! use in_stream::*; //! //! let (send_binding, recv_binding) = crossbeam_channel::unbounded(); //! //! let server_thread = std::thread::spawn(move || { //! let config = TcpBindConfig::default(); //! let config = TlsBindConfig::new(config).fake_certificate(); //! let config = WssBindConfig::new(config); //! let mut listener: //! InStreamListenerWss<InStreamListenerTls<InStreamListenerTcp>> = //! InStreamListenerWss::bind( //! &url2!("ws://127.0.0.1:0"), //! config //! ).unwrap(); //! //! println!("bound to: {}", listener.binding()); //! send_binding.send(listener.binding()).unwrap(); //! //! let mut srv = loop { //! match listener.accept() { //! Ok(srv) => break srv, //! Err(e) if e.would_block() => std::thread::yield_now(), //! Err(e) => panic!("{:?}", e), //! } //! }; //! //! srv.write("hello from server".into()).unwrap(); //! srv.flush().unwrap(); //! //! std::thread::sleep(std::time::Duration::from_millis(100)); //! //! let mut res = WsFrame::default(); //! srv.read(&mut res).unwrap(); //! assert_eq!("hello from client", res.as_str()); //! }); //! //! let client_thread = std::thread::spawn(move || { //! let binding = recv_binding.recv().unwrap(); //! println!("connect to: {}", binding); //! //! let mut cli: InStreamWss<InStreamTls<InStreamTcp>> = //! InStreamWss::connect( //! &binding, //! WssConnectConfig::new( //! TlsConnectConfig::new( //! TcpConnectConfig::default()))).unwrap(); //! //! cli.write("hello from client".into()).unwrap(); //! cli.flush().unwrap(); //! //! std::thread::sleep(std::time::Duration::from_millis(100)); //! //! let mut res = WsFrame::default(); //! cli.read(&mut res).unwrap(); //! assert_eq!("hello from server", res.as_str()); //! }); //! //! server_thread.join().unwrap(); //! client_thread.join().unwrap(); //! //! ``` #[macro_use] extern crate lazy_static; #[macro_use] extern crate shrinkwraprs; mod error; pub use error::*; mod std_stream_adapter; pub use std_stream_adapter::*; mod r#trait; pub use r#trait::*; mod mem; pub use mem::*; mod tcp; pub use tcp::*; mod tls; pub use tls::*; mod ws; pub use ws::*; pub mod json_rpc; pub use json_rpc::*;