feat(simulation): add LocalBridge IPC over Unix socket (#78)
Length-prefixed MessagePack framing (4-byte BE length + payload), LocalBridge struct implementing SimBridge trait over Unix domain sockets, BridgeResource wrapper for ECS integration. Adds Io error variant to BridgeError. Two integration tests verify snapshot and input round-trips over real sockets. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -3,7 +3,10 @@
|
||||
// MessagePack serialization for Rust<->Godot communication
|
||||
|
||||
use bevy_app::prelude::*;
|
||||
use bevy_ecs::prelude::*;
|
||||
|
||||
pub mod framing;
|
||||
pub mod local;
|
||||
pub mod types;
|
||||
pub use types::*;
|
||||
|
||||
@@ -14,6 +17,8 @@ pub enum BridgeError {
|
||||
Serialization(#[from] rmp_serde::encode::Error),
|
||||
#[error("deserialization error: {0}")]
|
||||
Deserialization(#[from] rmp_serde::decode::Error),
|
||||
#[error("io error: {0}")]
|
||||
Io(#[from] std::io::Error),
|
||||
#[error("transport error: {0}")]
|
||||
Transport(String),
|
||||
}
|
||||
@@ -28,6 +33,28 @@ pub trait SimBridge: Send + Sync {
|
||||
fn receive_inputs(&self) -> Result<Vec<PlayerInput>, BridgeError>;
|
||||
}
|
||||
|
||||
/// BridgeResource: Bevy Resource wrapper for SimBridge trait object
|
||||
#[derive(Resource)]
|
||||
pub struct BridgeResource {
|
||||
inner: Box<dyn SimBridge>,
|
||||
}
|
||||
|
||||
impl BridgeResource {
|
||||
pub fn new(bridge: impl SimBridge + 'static) -> Self {
|
||||
Self {
|
||||
inner: Box::new(bridge),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn send_snapshot(&self, snapshot: &ObserverSnapshot) -> Result<(), BridgeError> {
|
||||
self.inner.send_snapshot(snapshot)
|
||||
}
|
||||
|
||||
pub fn receive_inputs(&self) -> Result<Vec<PlayerInput>, BridgeError> {
|
||||
self.inner.receive_inputs()
|
||||
}
|
||||
}
|
||||
|
||||
/// Bridge plugin for client-server communication
|
||||
/// Abstracts transport layer (LocalBridge/NetworkBridge)
|
||||
pub struct BridgePlugin;
|
||||
|
||||
Reference in New Issue
Block a user