pre simconnect

This commit is contained in:
2024-10-19 22:00:34 +02:00
parent b94b3cf44f
commit cd7d9fa3b7
3 changed files with 58 additions and 18 deletions

View File

@@ -22,7 +22,7 @@ use crate::{config::Config, state_machine::Event, BASE_URL};
pub async fn start( pub async fn start(
config: Config, config: Config,
simconnect_sender: Sender<SimConnectPacket>, simconnect_sender: Sender<SimConnectPacket>,
socket_receiver: Receiver<Packets>, socket_receiver: Receiver<SimConnectPacket>,
event_sender: Sender<Event>, event_sender: Sender<Event>,
mut event_receiver: Receiver<Event>, mut event_receiver: Receiver<Event>,
) -> Result<(), anyhow::Error> { ) -> Result<(), anyhow::Error> {
@@ -152,7 +152,7 @@ pub async fn start(
futures.spawn(async move { futures.spawn(async move {
loop { loop {
if let Ok(message) = socket_receiver.try_recv() { if let Ok(message) = socket_receiver.try_recv() {
let _ = ias.send(message); let _ = ias.send(Packets::SimConnect(message));
} }
sleep(Duration::from_millis(100)).await; sleep(Duration::from_millis(100)).await;
} }

View File

@@ -10,6 +10,7 @@ mod lock;
mod models; mod models;
mod oauth; mod oauth;
mod pipe; mod pipe;
mod simconnect;
mod state_machine; mod state_machine;
use crate::config::Config; 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)); futures.spawn(start_code_to_token(c, pipe_receiver, sender, receiver));
// Prepare channels for socket <-> simconnect // Prepare channels for socket <-> simconnect
let (simconnect_sender, __simconnect_receiver) = channel(10); let (simconnect_sender, simconnect_receiver) = channel(10);
let (__socket_sender, socket_receiver) = channel(10); let (socket_sender, socket_receiver) = channel(10);
// Start the websocket client // Start the websocket client
let c = config.clone(); let c = config.clone();
@@ -112,6 +113,14 @@ async fn main() -> Result<(), anyhow::Error> {
// The simconnect sends data to the webscoket // 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 // It also receives data from the websocket to do things like set plane id and fuel and such things
// If possible even position // 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 // Start the Tray Icon
let c = config.clone(); let c = config.clone();

View File

@@ -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 { pub struct SimConnect {
// whatever we need simconnect_receiver: Receiver<SimConnectPacket>, // Data from the socket
socket_sender: Sender<SimConnectPacket>, // Data to the socket
sender: Sender<Event>,
receiver: Receiver<Event>,
} }
impl SimConnect { impl SimConnect {
pub fn new() -> Self { pub fn new(
simconnect_receiver: Receiver<SimConnectPacket>,
socket_sender: Sender<SimConnectPacket>,
sender: Sender<Event>,
receiver: Receiver<Event>,
) -> Self {
Self { Self {
// websocket receiver simconnect_receiver,
// websocket sender socket_sender,
// simconnect client handle sender,
receiver,
} }
} }
pub fn run() -> Result<(), anyhow::Error> { pub async fn run(&self) -> Result<(), anyhow::Error> {
let mut receiver = self.receiver.resubscribe();
loop { loop {
tokio::select! { if let Ok(Event::Quit) = receiver.try_recv() {
// we can either get a message from the websocket to pass to simconnect break;
// we can get a message from simconnect to pass to the websocket
// or we get a quit event from the event channel
} }
// handle simconnect stuff here
sleep(Duration::from_millis(100)).await;
} }
Ok(())
} }
} }
pub async fn start() -> Result<(), anyhow::Error> { pub async fn start(
SimConnect::new().run().await? simconnect_receiver: Receiver<SimConnectPacket>,
socket_sender: Sender<SimConnectPacket>,
sender: Sender<Event>,
receiver: Receiver<Event>,
) -> Result<(), anyhow::Error> {
SimConnect::new(simconnect_receiver, socket_sender, sender, receiver)
.run()
.await?;
Ok(())
} }