Skip to content

Commit

Permalink
Added debug option for manually turning off OSC and OSCQuery servers.…
Browse files Browse the repository at this point in the history
… Added flags file with flag for disabling MDNS.
  • Loading branch information
Raphiiko committed Dec 26, 2023
1 parent ef47b80 commit 28facf0
Show file tree
Hide file tree
Showing 14 changed files with 293 additions and 100 deletions.
148 changes: 148 additions & 0 deletions src-core/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions src-core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ system_shutdown = "4.0.1"
async-recursion = "1.0.5"
enumset = "1.1.3"
tauri-plugin-aptabase = "0.5"
config = "0.13.4"

[dependencies.oyasumivr_oscquery]
git = "https://github.com/Raphiiko/oyasumivr_oscquery.git"
Expand Down
1 change: 1 addition & 0 deletions src-core/flags.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
DISABLE_MDNS = false
10 changes: 10 additions & 0 deletions src-core/src/globals.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use config::Config;
use tokio::sync::Mutex;

pub const STEAM_APP_KEY: &str = "steam.overlay.2538150-DEV";
Expand All @@ -10,4 +11,13 @@ pub const APTABASE_APP_KEY: &str = "A-EU-0936106873";
lazy_static! {
pub static ref TAURI_APP_HANDLE: Mutex<Option<tauri::AppHandle>> = Default::default();
pub static ref TAURI_CLI_MATCHES: Mutex<Option<tauri::api::cli::Matches>> = Default::default();
pub static ref FLAGS: Mutex<Option<Config>> = Default::default();
}

pub async fn is_flag_set(flag: &str) -> bool {
let flags = FLAGS.lock().await;
if let Some(flags) = flags.as_ref() {
return flags.get_bool(flag).unwrap_or(false);
}
false
}
29 changes: 28 additions & 1 deletion src-core/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,12 @@ mod vrc_log_parser;

use std::sync::atomic::Ordering;

use config::Config;
pub use flavour::BUILD_FLAVOUR;
pub use grpc::models as Models;

use cronjob::CronJob;
use globals::{APTABASE_APP_KEY, TAURI_APP_HANDLE};
use globals::{APTABASE_APP_KEY, FLAGS, TAURI_APP_HANDLE};
use log::{info, warn, LevelFilter};
use oyasumivr_shared::windows::is_elevated;
use serde_json::json;
Expand Down Expand Up @@ -73,6 +74,30 @@ fn main() {
.expect("An error occurred while running the application");
}

async fn load_configs() {
match Config::builder()
.add_source(config::File::with_name("flags"))
.build()
{
Ok(flags) => {
*FLAGS.lock().await = Some(flags);
}
Err(e) => match e {
config::ConfigError::NotFound(_) => {
warn!("[Core] Could not find flags config. Using default values.");
}
_ => {
warn!("[Core] Could not load flags config: {:#?}", e);
}
},
};
if globals::is_flag_set("DISABLE_MDNS").await {
warn!(
"[Core] DISABLE_MDNS flag set: MDNS is disabled. OSC and OSCQuery functionality cannot be expected to work."
);
}
}

fn configure_command_handlers() -> impl Fn(tauri::Invoke) {
tauri::generate_handler![
openvr::commands::openvr_get_devices,
Expand Down Expand Up @@ -249,6 +274,8 @@ async fn app_setup(app_handle: tauri::AppHandle) {
std::env::set_current_dir(&executable_path).unwrap();
// Run any migrations first
migrations::run_migrations().await;
// Load configs
load_configs().await;
// Set up app reference
*TAURI_APP_HANDLE.lock().await = Some(app_handle.clone());
// Open devtools if we're in debug mode
Expand Down
34 changes: 21 additions & 13 deletions src-core/src/osc/commands.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ lazy_static! {

#[tauri::command]
pub async fn get_vrchat_osc_address() -> Option<String> {
if crate::globals::is_flag_set("DISABLE_MDNS").await {
return None;
}
let addr = oyasumivr_oscquery::client::get_vrchat_osc_address().await;
match addr {
Some(addr) => Some(format!("{}:{}", addr.0, addr.1)),
Expand All @@ -24,6 +27,9 @@ pub async fn get_vrchat_osc_address() -> Option<String> {

#[tauri::command]
pub async fn get_vrchat_oscquery_address() -> Option<String> {
if crate::globals::is_flag_set("DISABLE_MDNS").await {
return None;
}
let addr = oyasumivr_oscquery::client::get_vrchat_oscquery_address().await;
match addr {
Some(addr) => Some(format!("{}:{}", addr.0, addr.1)),
Expand Down Expand Up @@ -83,18 +89,21 @@ pub async fn start_osc_server() -> Option<(String, Option<String>)> {
let cancellation_token = super::spawn_receiver_task().await;
*CANCELLATION_TOKEN.lock().await = Some(cancellation_token);
// Start the OSCQuery server
let osc_query_addr_string =
match oyasumivr_oscquery::server::init("OyasumiVR", "127.0.0.1", osc_addr_port).await {
Ok(result) => Some(format!("{}:{}", result.0, result.1)),
Err(err) => {
error!("[Core] Could not initialize OSCQuery server: {:#?}", err);
None
}
};
oyasumivr_oscquery::server::receive_vrchat_avatar_parameters().await;
match oyasumivr_oscquery::server::advertise().await {
Err(err) => error!("[Core] Could not advertise OSCQuery server: {:#?}", err),
_ => {}
let mut osc_query_addr_string = None;
if !crate::globals::is_flag_set("DISABLE_MDNS").await {
osc_query_addr_string =
match oyasumivr_oscquery::server::init("OyasumiVR", "127.0.0.1", osc_addr_port).await {
Ok(result) => Some(format!("{}:{}", result.0, result.1)),
Err(err) => {
error!("[Core] Could not initialize OSCQuery server: {:#?}", err);
None
}
};
oyasumivr_oscquery::server::receive_vrchat_avatar_parameters().await;
match oyasumivr_oscquery::server::advertise().await {
Err(err) => error!("[Core] Could not advertise OSCQuery server: {:#?}", err),
_ => {}
}
}
// Return bound address
Some((osc_addr_string, osc_query_addr_string))
Expand All @@ -110,7 +119,6 @@ pub async fn set_osc_method_value(address: String, value: String) {
oyasumivr_oscquery::server::set_osc_method_value(address, Some(value)).await;
}


#[tauri::command]
pub async fn osc_send_int(addr: String, osc_addr: String, data: i32) -> Result<bool, String> {
debug!(
Expand Down
Loading

0 comments on commit 28facf0

Please sign in to comment.