Implement native AgentManager services (#59)
All checks were successful
Native code generation / deterministic (push) Successful in 12m0s
Imaging and meshing gate / native (push) Successful in 4m3s
Native Rust workspace compile / compile (push) Successful in 4m4s

This commit is contained in:
2026-08-09 22:07:51 +00:00
parent c8b2317e13
commit 9c9d5b91f1
16 changed files with 7464 additions and 1531 deletions

View File

@@ -295,6 +295,13 @@ pub struct PacketReceivedEventArgs {
simulator: Simulator,
}
#[derive(Clone)]
pub(crate) struct RawPacketReceivedEventArgs {
pub packet_type: PacketType,
pub data: Vec<u8>,
pub simulator: Simulator,
}
impl PacketReceivedEventArgs {
pub fn new(packet: Packet, simulator: Simulator) -> Result<Self, Error> {
Ok(Self { packet, simulator })
@@ -1201,6 +1208,12 @@ impl Simulator {
Arc::clone(&self.data)
}
pub(crate) fn native_caps(&self) -> Option<Caps> {
read(&self.data.caps_state)
.clone()
.map(|inner| Caps::native_from_inner(inner, self.native_clone_without_caps()))
}
pub(crate) fn native_from_weak(data: &Weak<SimulatorData>) -> Option<Self> {
data.upgrade().map(|data| Self { caps: None, data })
}
@@ -1775,6 +1788,7 @@ struct NetworkEvents {
logged_out: EventRegistry<LoggedOutEventArgs>,
login_progress: EventRegistry<LoginProgressEventArgs>,
packet_sent: EventRegistry<PacketSentEventArgs>,
raw_packet_received: EventRegistry<RawPacketReceivedEventArgs>,
sim_changed: EventRegistry<SimChangedEventArgs>,
sim_connected: EventRegistry<SimConnectedEventArgs>,
sim_connecting: EventRegistry<SimConnectingEventArgs>,
@@ -1870,6 +1884,15 @@ impl NetworkManagerInner {
continue;
};
inner.process_internal_packet(&packet, &simulator, raw_data.as_deref());
if let Some(data) = raw_data {
inner.events.raw_packet_received.emit_with(|| {
RawPacketReceivedEventArgs {
packet_type: packet.type_,
data: data.clone(),
simulator: simulator.clone(),
}
});
}
let _ =
inner
.packet_events
@@ -2378,6 +2401,7 @@ impl Drop for NetworkManagerInner {
}
/// Native implementation of C# `NetworkManager`.
#[derive(Clone)]
pub struct NetworkManager {
pub login_response_data: Option<LoginResponseData>,
pub simulators: SimulatorCollection,
@@ -2408,6 +2432,14 @@ impl NetworkManager {
Arc::downgrade(&self.inner)
}
pub(crate) fn native_agent_id(&self) -> UUID {
*read(&self.inner.agent_id)
}
pub(crate) fn native_session_id(&self) -> UUID {
*read(&self.inner.session_id)
}
pub fn native_new(client: GridClient) -> Result<Self, Error> {
let simulators = SimulatorCollection::default();
let packet_events = PacketEventDictionary::new(client.clone())?;
@@ -3176,6 +3208,13 @@ impl NetworkManager {
.subscribe(packet_type, handler, is_async)
}
pub(crate) fn subscribe_raw_packet(
&self,
handler: EventHandler<RawPacketReceivedEventArgs>,
) -> Subscription {
self.inner.events.raw_packet_received.subscribe(handler)
}
pub fn subscribe_caps(
&self,
caps_event: String,