A simple, Tokio-compatible protocol decoder for RMonitor, a line based timing protocol supported by different vendors of sport timing software.
The decoder supports both:
- The original RMonitor Timing Protocol
- The IMSA Enhanced protocol, which adds two extended record types.
You'll need rmonitor
, tokio
and tokio-util
in your dependencies:
rmonitor = "0.2"
tokio-util = { version = "0.3", features = ["codec"] }
tokio = { version = "0.2", features = ["full"] }
Then create your main.rs
:
use rmonitor::RMonitorDecoder;
use std::error::Error;
use tokio::net::TcpStream;
use tokio::stream::StreamExt;
use tokio_util::codec::FramedRead;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
// Connect to your target RMonitor server
let stream = TcpStream::connect("127.0.0.1:4000").await?;
// Construct a decode with a maximum line length of 2048
let mut reader = FramedRead::new(stream, RMonitorDecoder::new_with_max_length(2048));
while let Ok(Some(Ok(event))) = reader.next().await {
println!("{:?}", event);
}
Ok(())
}
A synchronous example is also available to show use of the decoder without pulling in a Tokio runtime.
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT License (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.