fix: 修复打砖块游戏碰撞穿透bug,添加渐进提速机制
This commit is contained in:
@@ -22,11 +22,43 @@ fn start_server_exe(exe_path: &std::path::Path) {
|
||||
}
|
||||
|
||||
match command.spawn() {
|
||||
Ok(_) => ::log::info!("DevKit Python server started: {}", exe_path.display()),
|
||||
Ok(_) => ::log::info!("DevKit Python server launched: {}", exe_path.display()),
|
||||
Err(error) => ::log::warn!("Failed to start DevKit Python server: {error}"),
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "devkit")]
|
||||
fn is_local_port_open(port: u16) -> bool {
|
||||
use std::net::{SocketAddr, TcpStream};
|
||||
use std::time::Duration;
|
||||
|
||||
let addr = SocketAddr::from(([127, 0, 0, 1], port));
|
||||
TcpStream::connect_timeout(&addr, Duration::from_millis(250)).is_ok()
|
||||
}
|
||||
|
||||
#[cfg(feature = "devkit")]
|
||||
fn find_server_exe(
|
||||
resource_dir: &std::path::Path,
|
||||
exe_name: &str,
|
||||
) -> Option<std::path::PathBuf> {
|
||||
let mut candidates = Vec::new();
|
||||
candidates.push(resource_dir.join(exe_name));
|
||||
|
||||
if let Ok(current_exe) = std::env::current_exe() {
|
||||
if let Some(parent) = current_exe.parent() {
|
||||
candidates.push(parent.join(exe_name));
|
||||
}
|
||||
}
|
||||
|
||||
if let Ok(current_dir) = std::env::current_dir() {
|
||||
candidates.push(current_dir.join("src-tauri").join("resources").join(exe_name));
|
||||
candidates.push(current_dir.join("devkit").join("dist").join(exe_name));
|
||||
candidates.push(current_dir.join("resources").join(exe_name));
|
||||
}
|
||||
|
||||
candidates.into_iter().find(|path| path.exists())
|
||||
}
|
||||
|
||||
#[cfg_attr(mobile, tauri::mobile_entry_point)]
|
||||
pub fn run() {
|
||||
let builder = tauri::Builder::default()
|
||||
@@ -56,35 +88,35 @@ pub fn run() {
|
||||
.path()
|
||||
.resource_dir()
|
||||
.unwrap_or_else(|_| std::path::PathBuf::from("./resources"));
|
||||
let app_handle = app.handle().clone();
|
||||
|
||||
tauri::async_runtime::spawn(async move {
|
||||
let devkit_port = 50051u16;
|
||||
#[cfg(target_os = "windows")]
|
||||
let exe_name = "je-skin-devkit-server.exe";
|
||||
#[cfg(not(target_os = "windows"))]
|
||||
let exe_name = "je-skin-devkit-server";
|
||||
|
||||
let bundled_exe = resource_dir.join(exe_name);
|
||||
let fallback_exe = std::env::current_exe()
|
||||
.ok()
|
||||
.and_then(|path| path.parent().map(|parent| parent.join(exe_name)));
|
||||
|
||||
let server_exe = if bundled_exe.exists() {
|
||||
Some(bundled_exe)
|
||||
if is_local_port_open(devkit_port) {
|
||||
::log::info!(
|
||||
"DevKit port {} already in use, skipping Python server auto-start",
|
||||
devkit_port
|
||||
);
|
||||
} else {
|
||||
fallback_exe.filter(|path| path.exists())
|
||||
};
|
||||
let server_exe = find_server_exe(&resource_dir, exe_name);
|
||||
|
||||
if let Some(exe_path) = server_exe {
|
||||
start_server_exe(&exe_path);
|
||||
tokio::time::sleep(std::time::Duration::from_millis(1200)).await;
|
||||
} else {
|
||||
::log::info!("DevKit Python server not found, skipping auto-start");
|
||||
if let Some(exe_path) = server_exe {
|
||||
start_server_exe(&exe_path);
|
||||
tokio::time::sleep(std::time::Duration::from_millis(1200)).await;
|
||||
} else {
|
||||
::log::info!("DevKit Python server not found, skipping auto-start");
|
||||
}
|
||||
}
|
||||
|
||||
if let Err(error) = devkit_state_clone.start(50051).await {
|
||||
if let Err(error) = devkit_state_clone.start(app_handle, devkit_port).await {
|
||||
::log::warn!("DevKit auto-start failed: {error}");
|
||||
} else {
|
||||
::log::info!("DevKit auto-started on 127.0.0.1:50051");
|
||||
::log::info!("DevKit gRPC client initialized for 127.0.0.1:{devkit_port}");
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user