Skip to content

Commit 186ed8c

Browse files
committed
feat(examples): updated examples
Signed-off-by: Jad K. Haddad <jadkhaddad@gmail.com>
1 parent d3b4d98 commit 186ed8c

5 files changed

Lines changed: 120 additions & 11 deletions

File tree

cspell.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@
22
"version": "0.2",
33
"language": "en",
44
"words": [
5+
"ashx",
6+
"Chilkat",
57
"clippy",
68
"codegen",
79
"crossbario",
10+
"dhcpv",
811
"docsrs",
912
"fastwebsockets",
1013
"framez",
@@ -20,9 +23,13 @@
2023
"rngs",
2124
"rustdoc",
2225
"Seedable",
26+
"smoltcp",
2327
"Swatinem",
2428
"taiki",
2529
"thiserror",
30+
"timg",
31+
"trng",
32+
"uninit",
2633
"websocketz",
2734
"WSSERVER",
2835
"wstest",

examples/autobahn-client.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
//! Run with
2+
//!
3+
//! ```not_rust
4+
//! cargo run --example autobahn-client
5+
//! ```
6+
17
use embedded_io_adapters::tokio_1::FromTokio;
28
use rand::{SeedableRng, rngs::StdRng};
39
use tokio::net::TcpStream;
@@ -96,7 +102,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
96102
_ => {}
97103
},
98104
Err(err) => {
99-
println!("Error reading message: {err}");
105+
eprintln!("Error reading message: {err}");
100106

101107
send!(websocketz, Message::Close(None))?;
102108

examples/autobahn-server.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
//! Run with
2+
//!
3+
//! ```not_rust
4+
//! cargo run --example autobahn-server
5+
//! ```
6+
17
use embedded_io_adapters::tokio_1::FromTokio;
28
use rand::{SeedableRng, rngs::StdRng};
39
use tokio::net::TcpListener;
@@ -36,7 +42,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
3642
_ => {}
3743
},
3844
Err(err) => {
39-
println!("Error reading message: {err}");
45+
eprintln!("Error reading message: {err}");
4046

4147
send!(websocketz, Message::Close(None))?;
4248

examples/simple.rs

Lines changed: 39 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,37 @@
1+
//! Run with
2+
//!
3+
//! ```not_rust
4+
//! cargo run --example simple
5+
//! ```
6+
17
use embedded_io_adapters::tokio_1::FromTokio;
28
use rand::{SeedableRng, rngs::StdRng};
39
use tokio::net::TcpStream;
4-
use websocketz::{Message, WebSocket, next, options::ConnectOptions};
10+
use websocketz::{Message, WebSocket, http::Header, next, options::ConnectOptions};
511

612
#[tokio::main]
713
async fn main() -> Result<(), Box<dyn std::error::Error>> {
8-
let stream = TcpStream::connect("127.0.0.1:9002").await?;
14+
let domain = "websockets.chilkat.io";
15+
16+
let addr = tokio::net::lookup_host((domain, 80))
17+
.await?
18+
.next()
19+
.ok_or("Failed to resolve domain")?;
20+
21+
let stream = TcpStream::connect(addr).await?;
922

1023
let read_buf = &mut [0u8; 8192 * 2];
1124
let write_buf = &mut [0u8; 8192 * 2];
1225
let fragments_buf = &mut [0u8; 8192 * 2];
1326
let rng = StdRng::from_os_rng();
1427

1528
let mut websocketz = WebSocket::connect::<16>(
16-
ConnectOptions::default(),
29+
ConnectOptions::default()
30+
.with_path_unchecked("/wsChilkatEcho.ashx")
31+
.with_headers(&[Header {
32+
name: "Host",
33+
value: domain.as_bytes(),
34+
}]),
1735
FromTokio::new(stream),
1836
rng,
1937
read_buf,
@@ -27,14 +45,26 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
2745
websocketz.framable()
2846
);
2947

30-
websocketz.send(Message::Text("Hello, WebSocket!")).await?;
48+
'ws: loop {
49+
websocketz.send(Message::Text("Hello, WebSocket!")).await?;
50+
51+
match next!(websocketz) {
52+
None => {
53+
println!("EOF");
54+
55+
break 'ws;
56+
}
57+
Some(Ok(msg)) => {
58+
println!("Received message: {msg:?}");
59+
}
60+
Some(Err(err)) => {
61+
eprintln!("Error receiving message: {err:?}");
3162

32-
websocketz
33-
.send_fragmented(Message::Text("Hello, Fragmented WebSocket!"), 4)
34-
.await?;
63+
break 'ws;
64+
}
65+
}
3566

36-
while let Some(message) = next!(websocketz).transpose()? {
37-
println!("Received message: {message:?}");
67+
tokio::time::sleep(tokio::time::Duration::from_millis(500)).await;
3868
}
3969

4070
Ok(())

examples/split.rs

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

0 commit comments

Comments
 (0)