fix: 修复打砖块游戏碰撞穿透bug,添加渐进提速机制
This commit is contained in:
@@ -8,14 +8,24 @@ use std::path::PathBuf;
|
||||
use std::sync::atomic::{AtomicBool, AtomicU32, Ordering};
|
||||
use std::sync::Arc;
|
||||
|
||||
use serde::{Deserialize, Serialize};
|
||||
use tauri::{AppHandle, Emitter};
|
||||
use tokio::sync::mpsc;
|
||||
use tokio::task::JoinHandle;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use super::proto::sensor_push_client::SensorPushClient;
|
||||
use super::proto::export_processor_client::ExportProcessorClient;
|
||||
use super::proto::{ProcessRequest, SensorFrame};
|
||||
|
||||
#[derive(Debug, Clone, Serialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
struct DevKitPztAngleEvent {
|
||||
seq: u64,
|
||||
timestamp_ms: u64,
|
||||
dts_ms: u32,
|
||||
angle: f32,
|
||||
}
|
||||
|
||||
// ── DevKit 配置 ────────────────────────────────────────────────────
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
@@ -145,7 +155,7 @@ impl DevKitState {
|
||||
}
|
||||
|
||||
/// 启动 gRPC client,连接到 Python server 并开始推送数据
|
||||
pub async fn start(&self, port: u16) -> Result<(), String> {
|
||||
pub async fn start(&self, app: AppHandle, port: u16) -> Result<(), String> {
|
||||
if self.running.load(Ordering::SeqCst) {
|
||||
return Err("AlreadyRunning".into());
|
||||
}
|
||||
@@ -161,9 +171,10 @@ impl DevKitState {
|
||||
|
||||
let running = Arc::clone(&self.running);
|
||||
let frame_count = Arc::clone(&self.frame_count);
|
||||
let app_handle = app.clone();
|
||||
|
||||
let handle = tokio::spawn(async move {
|
||||
if let Err(e) = run_grpc_upload(addr, rx, frame_count).await {
|
||||
if let Err(e) = run_grpc_upload(app_handle, addr, rx, frame_count).await {
|
||||
::log::error!("DevKit gRPC upload error: {e:?}");
|
||||
}
|
||||
running.store(false, Ordering::SeqCst);
|
||||
@@ -241,6 +252,7 @@ impl DevKitState {
|
||||
// ── gRPC Upload Client ─────────────────────────────────────────────
|
||||
|
||||
async fn run_grpc_upload(
|
||||
app: AppHandle,
|
||||
addr: String,
|
||||
mut rx: mpsc::Receiver<SensorFrame>,
|
||||
frame_count: Arc<AtomicU32>,
|
||||
@@ -255,14 +267,29 @@ async fn run_grpc_upload(
|
||||
};
|
||||
|
||||
let response = client.upload(stream).await?;
|
||||
let resp = response.into_inner();
|
||||
let mut inbound = response.into_inner();
|
||||
|
||||
::log::info!(
|
||||
"DevKit upload complete: ok={}, frames={}, msg={}",
|
||||
resp.ok,
|
||||
resp.frames_received,
|
||||
resp.message
|
||||
);
|
||||
while let Some(message) = inbound.message().await? {
|
||||
if message.ok {
|
||||
let payload = DevKitPztAngleEvent {
|
||||
seq: message.seq,
|
||||
timestamp_ms: message.timestamp_ms,
|
||||
dts_ms: message.dts_ms,
|
||||
angle: message.angle,
|
||||
};
|
||||
::log::debug!(
|
||||
"python pzt angle: seq={} dts_ms={} angle={:.2}",
|
||||
message.seq,
|
||||
message.dts_ms,
|
||||
message.angle
|
||||
);
|
||||
app.emit("devkit_pzt_angle", payload)?;
|
||||
} else {
|
||||
::log::warn!("DevKit PZT response error: {}", message.message);
|
||||
}
|
||||
}
|
||||
|
||||
::log::info!("DevKit upload stream closed");
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user