First attempt on SignalK Websocket handling
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target
|
||||||
58
src/signalk.rs
Normal file
58
src/signalk.rs
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
use std::thread;
|
||||||
|
use tungstenite::connect;
|
||||||
|
use url::Url;
|
||||||
|
use serde_json::{Result, Value};
|
||||||
|
|
||||||
|
// Model the data sent over SignalK Websocket
|
||||||
|
// that I'm interested in
|
||||||
|
pub enum SignalKEvent {
|
||||||
|
SpeedOverGround(f32),
|
||||||
|
SpeedThroughWater(f32),
|
||||||
|
Location(f32, f32),
|
||||||
|
CourseOverGround(f32),
|
||||||
|
TrueCompassCourse(f32),
|
||||||
|
AISVessel(String, f32, f32, f32), // Name, lat, long, speed
|
||||||
|
BatteryLevel(u8, u8), // Bank#, percentage
|
||||||
|
FuelLevel(u8), // percentage
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
pub struct SignalKData {
|
||||||
|
latitude: f32,
|
||||||
|
longitude: f32,
|
||||||
|
position_timestamp: u64,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl SignalKData {
|
||||||
|
|
||||||
|
pub fn parseJson (json: String) -> Vec<SignalKEvent> {
|
||||||
|
let res = Vec::<SignalKEvent>::new();
|
||||||
|
let v: Value = match serde_json::from_str(&json) {
|
||||||
|
Ok(value) => value,
|
||||||
|
Err(_) => return res,
|
||||||
|
};
|
||||||
|
/* for d in v["updates"]["values"] {
|
||||||
|
println!("{}", d);
|
||||||
|
} */
|
||||||
|
res
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn connect() -> SignalKData {
|
||||||
|
let mut data = SignalKData {
|
||||||
|
latitude: f32::NAN,
|
||||||
|
longitude: f32::NAN,
|
||||||
|
position_timestamp: 0,
|
||||||
|
};
|
||||||
|
let handle = thread::spawn(|| {
|
||||||
|
let (mut socket, response) = connect(Url::parse("ws://localhost:3000/signalk/v1/stream?subscribe=self").unwrap()).expect("Can't connect");
|
||||||
|
loop {
|
||||||
|
let msg = socket.read_message().expect("Error reading message");
|
||||||
|
if msg.is_text() {
|
||||||
|
println!("{}", msg.into_text().unwrap());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
data
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user