diff --git a/Cargo.lock b/Cargo.lock index b0af3e8..dac5317 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -477,6 +477,7 @@ dependencies = [ "tokio", "tonic", "tonic-prost", + "tonic-reflection", ] [[package]] @@ -1696,6 +1697,20 @@ dependencies = [ "tonic-build", ] +[[package]] +name = "tonic-reflection" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34da53e8387581d66db16ff01f98a70b426b091fdf76856e289d5c1bd386ed7b" +dependencies = [ + "prost", + "prost-types", + "tokio", + "tokio-stream", + "tonic", + "tonic-prost", +] + [[package]] name = "tower" version = "0.5.2" diff --git a/engine/Cargo.toml b/engine/Cargo.toml index 580fb75..e401817 100644 --- a/engine/Cargo.toml +++ b/engine/Cargo.toml @@ -14,6 +14,7 @@ prost = "0.14.1" tokio = { version = "1.48.0", features = ["rt-multi-thread"] } tonic = "0.14.2" tonic-prost = "0.14.2" +tonic-reflection = "0.14.2" [features] jack = ["dep:jack"] diff --git a/engine/src/main.rs b/engine/src/main.rs index 2c44139..b123743 100644 --- a/engine/src/main.rs +++ b/engine/src/main.rs @@ -1,8 +1,9 @@ mod audio_engine; use clap::Parser; -use lib::termix::audio_backend::audio_backend_server::{AudioBackend, AudioBackendServer}; +use lib::termix::audio_backend::{FILE_DESCRIPTOR_SET, audio_backend_server::{AudioBackend, AudioBackendServer}}; use tonic::{transport::Server, Request, Response, Status}; use log::{debug, error, log_enabled, info, Level}; +use tonic_reflection::server::v1::{ReflectionService, ServerReflection}; /// Simple program to greet a person #[derive(Parser, Debug)] #[command(version, about, long_about = None)] @@ -32,12 +33,13 @@ async fn main() -> Result<(), Box> { env_logger::init(); let args = Args::parse(); info!("starting the grpc server on port {}", args.grpc_port); - + let reflections = tonic_reflection::server::Builder::configure().register_encoded_file_descriptor_set(FILE_DESCRIPTOR_SET).build_v1().unwrap(); let addr = "[::1]:50051".parse()?; let greeter = TermixAudioBackend::default(); Server::builder() .add_service(AudioBackendServer::new(greeter)) + .add_service(reflections) .serve(addr) .await?; diff --git a/lib/build.rs b/lib/build.rs index a1ab6bb..b928458 100644 --- a/lib/build.rs +++ b/lib/build.rs @@ -1,4 +1,4 @@ -use std::io::Result; +use std::{env, io::Result, path::PathBuf}; fn main() -> Result<()> { //let proto_dir = "proto"; @@ -6,7 +6,11 @@ fn main() -> Result<()> { //for path in paths { // prost_build::compile_protos(&[path.unwrap().path()], &[proto_dir])?; //} - tonic_prost_build::compile_protos("proto/audio_backend.proto") + // + let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap()); + tonic_prost_build::configure() + .file_descriptor_set_path(out_dir.join("audio_backend_descriptor.bin")) + .compile_protos(&["proto/audio_backend.proto"], &["proto"]) .unwrap_or_else(|e| panic!("Failed to compile protos {:?}", e)); Ok(()) diff --git a/lib/src/lib.rs b/lib/src/lib.rs index 731f50b..bde0ac5 100644 --- a/lib/src/lib.rs +++ b/lib/src/lib.rs @@ -1,5 +1,6 @@ pub mod termix { pub mod audio_backend { + pub const FILE_DESCRIPTOR_SET: &[u8] = tonic::include_file_descriptor_set!("audio_backend_descriptor"); tonic::include_proto!("termix.audio_backend"); } }