#remote-procedure #space #kerbal #client #mod #standalone #krpc

krpc-client

A stand-alone client for the Kerbal Space Program kRPC mod

5 unstable releases

new 0.6.0 Nov 12, 2024
0.5.1-api+0.5.2 Mar 23, 2024
0.5.0-0.5.2 Mar 19, 2023
0.4.2-0.5.2 Mar 18, 2023
0.4.2-0.5.1 Mar 17, 2023

#1668 in Network programming

Download history 30/week @ 2024-07-28 15/week @ 2024-09-22 111/week @ 2024-11-10

111 downloads per month

GPL-3.0 license

99KB
1.5K SLoC

kRPC Client

Rust client for kRPC (Remote Procedure Calls for Kerbal Space Program).

Status

Work in progress. Bug-reports and contributions welcome. All procedures seem to work, but more testing is needed. Streams work, but Events are still on the way.

krpc-client = { git = "https://github.com/kladd/krpc-client" }

Examples

Greet the crew with standard procedure calls.

let client = Client::new("kRPC TEST", "127.0.0.1", 50000, 50001).unwrap();

let sc = SpaceCenter::new(client.clone());

// Check out our vessel.
let ship = sc.get_active_vessel()?;

// Greet the crew.
match ship.get_crew()?.first() {
    Some(kerbal) => println!(
        "Hello, {}. Welcome to {}",
        kerbal.get_name()?,
        ship.get_name()?
    ),
    None => println!("{} is unkerbaled!", ship.get_name()?),
};

Using Streams

Keep track of time with streams.

let client = Client::new("kRPC TEST", "127.0.0.1", 50000, 50001)?;

let space_center = SpaceCenter::new(client.clone());

// Set up a stream.
let ut_stream = space_center.get_ut_stream()?;
ut_stream.set_rate(1f32)?;

// Wait for updates, and print the current value.
for _ in 0..10 {
    ut_stream.wait();
    println!("It's {} o'clock", ut_stream.get()?);
}

Using Custom Service Definitions

If you have a set of custom service definitions, for example from KRPC.MechJeb you can put them all in a directory and point the KRPC_SERVICES environment variable to it at build time, this crate will generate a rust client implementation for them.

Important: If you do this you have to provide all service definitions, even the ones this crate usually includes

Features

  • fmt (default): Format generated services. Remove for a quicker build producing an unreadable file.
  • tokio: Replace all blocking functions with async functions using the tokio runtime

Hacking

  • krpc-client/client.rs contains basic connection, request, and response handling.
  • krpc-client/lib.rs declares traits for encoding and decoding RPC types.
  • krpc_build (used by krpc-client/build.rs), generates RPC types and procedures from definitions in service_definitions/*.json, and generates implementations of the encoding and decoding traits declared in krpc-client/lib.rs.

Dependencies

~2–11MB
~130K SLoC