-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathminimal.rs
68 lines (57 loc) · 2.39 KB
/
minimal.rs
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
use futures_util::StreamExt;
use tokio::net::TcpListener;
use tokio_websockets::ServerBuilder;
use tracing::{error, info, level_filters::LevelFilter};
use tracing_subscriber::EnvFilter;
use arduino_plotter::{
protocol::{EndOfLine, MonitorModelState, MonitorSettings},
Client, Server,
};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let env_filter = EnvFilter::builder()
.with_default_directive(LevelFilter::TRACE.into())
.from_env_lossy();
tracing_subscriber::fmt().with_env_filter(env_filter).init();
// listen at port 3030
let listener = TcpListener::bind("127.0.0.1:3030").await?;
loop {
while let Ok((stream, _plotter_addr)) = listener.accept().await {
let ws_stream = match ServerBuilder::new().accept(stream).await {
Ok(x) => x,
Err(err) => {
error!("Error performing HTTP upgrade handshake request: {err}");
continue;
}
};
let (ws_sink, ws_stream) = ws_stream.split();
let (client, mut server) = (Client::new(ws_sink), Server::new(ws_stream));
let server_fut = async {
while let Some(result) = server.next().await {
info!("Client command received result: {result:?}")
}
};
let client_fut = async {
// set some settings
{
let settings = MonitorSettings {
pluggable_monitor_settings: None,
monitor_ui_settings: Some(MonitorModelState {
// A connection to a serial device has been established
connected: Some(true),
line_ending: Some(EndOfLine::NewLine),
..Default::default()
}),
};
info!("Monitor Settings to be sent: {settings:?}");
match client.set_monitor_settings(settings).await {
Ok(_) => {}
Err(err) => error!("Failed to set settings: {err}"),
}
}
};
// will send a single Monitor settings message (client) and run the server forever.
futures_util::join!(server_fut, client_fut);
}
}
}