SimConnect SDK

Crates Documentation CI license Crates.io\ An opinionated SimConnect Client that encapsulates the C API fully and optimizes for developer experience.

Usage

toml [dependencies] simconnect-sdk = { version = "0.2", features = ["derive"] }

```rust use simconnect_sdk::{Notification, SimConnect, SimConnectObject};

/// A data structure that will be used to receive data from SimConnect. /// See the documentation of SimConnectObject for more information on the arguments of the simconnect attribute.

[derive(Debug, Clone, SimConnectObject)]

[simconnect(period = "second")]

[allow(dead_code)]

struct AirplaneData { #[simconnect(name = "TITLE")] title: String, #[simconnect(name = "CATEGORY")] category: String, #[simconnect(name = "PLANE LATITUDE", unit = "degrees")] lat: f64, #[simconnect(name = "PLANE LONGITUDE", unit = "degrees")] lon: f64, #[simconnect(name = "PLANE ALTITUDE", unit = "feet")] alt: f64, #[simconnect(name = "SIM ON GROUND")] simonground: bool, }

fn main() -> Result<(), Box> { let client = SimConnect::new("Receiving data example");

match client {
    Ok(mut client) => {
        let mut notifications_received = 0;

        loop {
            let notification = client.get_next_dispatch()?;

            match notification {
                Some(Notification::Open) => {
                    println!("Connection opened.");

                    // After the connection is successfully open, we register the struct
                    client.register_object::<AirplaneData>()?;
                }
                Some(Notification::Object(data)) => {
                    if let Ok(airplane_data) = AirplaneData::try_from(&data) {
                        println!("{airplane_data:?}");

                        notifications_received += 1;

                        // After we have received 10 notifications, we unregister the struct
                        if notifications_received > 10 {
                            client.unregister_object::<AirplaneData>()?;
                            println!("Subscription stopped.");
                            break;
                        }
                    }
                }
                _ => (),
            }

            // sleep for about a frame to reduce CPU usage
            std::thread::sleep(std::time::Duration::from_millis(16));
        }
    }
    Err(e) => {
        println!("Error: {e:?}")
    }
}

Ok(())

} ```

See more examples.

Contributing

Contributions are welcome and encouraged! See CONTRIBUTING.md.

Supported features

See FEATURES.md.

Credits

Inspired by rylev/msfs2020 and Sequal32/simconnect-rust.