Implement native AgentManager services (#59)
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user