From cd7d9fa3b7f5ba0da9fb8ab2e1784b6357999195 Mon Sep 17 00:00:00 2001 From: Avii Date: Sat, 19 Oct 2024 22:00:34 +0200 Subject: [PATCH] pre simconnect --- avam-client/src/client.rs | 4 +-- avam-client/src/main.rs | 13 ++++++-- avam-client/src/simconnect.rs | 59 ++++++++++++++++++++++++++--------- 3 files changed, 58 insertions(+), 18 deletions(-) diff --git a/avam-client/src/client.rs b/avam-client/src/client.rs index 7551a8f..4e26f60 100644 --- a/avam-client/src/client.rs +++ b/avam-client/src/client.rs @@ -22,7 +22,7 @@ use crate::{config::Config, state_machine::Event, BASE_URL}; pub async fn start( config: Config, simconnect_sender: Sender, - socket_receiver: Receiver, + socket_receiver: Receiver, event_sender: Sender, mut event_receiver: Receiver, ) -> Result<(), anyhow::Error> { @@ -152,7 +152,7 @@ pub async fn start( futures.spawn(async move { loop { if let Ok(message) = socket_receiver.try_recv() { - let _ = ias.send(message); + let _ = ias.send(Packets::SimConnect(message)); } sleep(Duration::from_millis(100)).await; } diff --git a/avam-client/src/main.rs b/avam-client/src/main.rs index a63f25b..d50f304 100644 --- a/avam-client/src/main.rs +++ b/avam-client/src/main.rs @@ -10,6 +10,7 @@ mod lock; mod models; mod oauth; mod pipe; +mod simconnect; mod state_machine; use crate::config::Config; @@ -93,8 +94,8 @@ async fn main() -> Result<(), anyhow::Error> { futures.spawn(start_code_to_token(c, pipe_receiver, sender, receiver)); // Prepare channels for socket <-> simconnect - let (simconnect_sender, __simconnect_receiver) = channel(10); - let (__socket_sender, socket_receiver) = channel(10); + let (simconnect_sender, simconnect_receiver) = channel(10); + let (socket_sender, socket_receiver) = channel(10); // Start the websocket client let c = config.clone(); @@ -112,6 +113,14 @@ async fn main() -> Result<(), anyhow::Error> { // The simconnect sends data to the webscoket // It also receives data from the websocket to do things like set plane id and fuel and such things // If possible even position + let sender = event_sender.clone(); + let receiver = event_receiver.resubscribe(); + futures.spawn(simconnect::start( + simconnect_receiver, + socket_sender, + sender, + receiver, + )); // Start the Tray Icon let c = config.clone(); diff --git a/avam-client/src/simconnect.rs b/avam-client/src/simconnect.rs index ef868b0..382977e 100644 --- a/avam-client/src/simconnect.rs +++ b/avam-client/src/simconnect.rs @@ -1,29 +1,60 @@ +use std::time::Duration; + +use avam_protocol::SimConnectPacket; +use tokio::{ + sync::broadcast::{Receiver, Sender}, + time::sleep, +}; + +use crate::state_machine::Event; + pub struct SimConnect { - // whatever we need + simconnect_receiver: Receiver, // Data from the socket + socket_sender: Sender, // Data to the socket + sender: Sender, + receiver: Receiver, } impl SimConnect { - pub fn new() -> Self { + pub fn new( + simconnect_receiver: Receiver, + socket_sender: Sender, + sender: Sender, + receiver: Receiver, + ) -> Self { Self { - // websocket receiver - // websocket sender - // simconnect client handle + simconnect_receiver, + socket_sender, + sender, + receiver, } } - pub fn run() -> Result<(), anyhow::Error> { + pub async fn run(&self) -> Result<(), anyhow::Error> { + let mut receiver = self.receiver.resubscribe(); loop { - tokio::select! { - // we can either get a message from the websocket to pass to simconnect - - // we can get a message from simconnect to pass to the websocket - - // or we get a quit event from the event channel + if let Ok(Event::Quit) = receiver.try_recv() { + break; } + + // handle simconnect stuff here + + sleep(Duration::from_millis(100)).await; } + + Ok(()) } } -pub async fn start() -> Result<(), anyhow::Error> { - SimConnect::new().run().await? +pub async fn start( + simconnect_receiver: Receiver, + socket_sender: Sender, + sender: Sender, + receiver: Receiver, +) -> Result<(), anyhow::Error> { + SimConnect::new(simconnect_receiver, socket_sender, sender, receiver) + .run() + .await?; + + Ok(()) }