|
| 1 | +use embedded_io_adapters::tokio_1::FromTokio; |
| 2 | +use rand::{SeedableRng, rngs::StdRng}; |
| 3 | +use tokio::{ |
| 4 | + io::{ReadHalf, WriteHalf}, |
| 5 | + net::TcpStream, |
| 6 | +}; |
| 7 | +use websocketz::{Message, WebSocket, next, options::ConnectOptions}; |
| 8 | + |
| 9 | +fn split( |
| 10 | + stream: FromTokio<TcpStream>, |
| 11 | +) -> ( |
| 12 | + FromTokio<ReadHalf<TcpStream>>, |
| 13 | + FromTokio<WriteHalf<TcpStream>>, |
| 14 | +) { |
| 15 | + let (read, write) = tokio::io::split(stream.into_inner()); |
| 16 | + |
| 17 | + (FromTokio::new(read), FromTokio::new(write)) |
| 18 | +} |
| 19 | + |
| 20 | +#[tokio::main] |
| 21 | +async fn main() -> Result<(), Box<dyn std::error::Error>> { |
| 22 | + let stream = TcpStream::connect("127.0.0.1:9002").await?; |
| 23 | + |
| 24 | + let read_buf = &mut [0u8; 8192 * 2]; |
| 25 | + let write_buf = &mut [0u8; 8192 * 2]; |
| 26 | + let fragments_buf = &mut [0u8; 8192 * 2]; |
| 27 | + let rng = StdRng::from_os_rng(); |
| 28 | + |
| 29 | + let websocketz = WebSocket::connect::<16>( |
| 30 | + ConnectOptions::default(), |
| 31 | + FromTokio::new(stream), |
| 32 | + rng, |
| 33 | + read_buf, |
| 34 | + write_buf, |
| 35 | + fragments_buf, |
| 36 | + ) |
| 37 | + .await?; |
| 38 | + |
| 39 | + let (mut websocketz_read, mut websocketz_write) = websocketz.split_with(split); |
| 40 | + |
| 41 | + websocketz_write |
| 42 | + .send(Message::Text("Hello, WebSocket!")) |
| 43 | + .await?; |
| 44 | + |
| 45 | + websocketz_write |
| 46 | + .send_fragmented(Message::Text("Hello, Fragmented WebSocket!"), 4) |
| 47 | + .await?; |
| 48 | + |
| 49 | + while let Some(message) = next!(websocketz_read).transpose()? { |
| 50 | + println!("Received message: {message:?}"); |
| 51 | + } |
| 52 | + |
| 53 | + Ok(()) |
| 54 | +} |
0 commit comments