Complete milestone 09 world integration gate (#75)
Some checks failed
Native code generation / deterministic (push) Failing after 8m37s
Imaging and meshing gate / native (push) Successful in 5m24s
Native Rust workspace compile / compile (push) Failing after 6m15s

This commit is contained in:
2026-08-10 21:19:43 +00:00
parent 55424dbd7f
commit fdda05b53f
18 changed files with 767 additions and 82 deletions

View File

@@ -129,6 +129,7 @@ struct ClientRuntime {
interest_list_manager: Mutex<Option<Arc<crate::interest_list::InterestListManagerInner>>>,
friends_manager: Mutex<Option<Arc<crate::friends_manager::FriendsManagerInner>>>,
group_manager: Mutex<Option<Arc<crate::group_manager::GroupManagerInner>>>,
marketplace_manager: Mutex<Option<crate::marketplace_runtime::MarketplaceManager>>,
appearance_manager: Mutex<Option<Arc<crate::appearance_manager::AppearanceManagerInner>>>,
avatar_manager: Mutex<Option<Arc<crate::avatar_manager::AvatarManagerInner>>>,
animesh_manager: Mutex<Option<Arc<crate::animesh_runtime::AnimeshManagerInner>>>,
@@ -139,6 +140,12 @@ struct ClientRuntime {
shutdown_wait: Mutex<()>,
}
fn clear_cached<T>(slot: &Mutex<Option<T>>) {
slot.lock()
.unwrap_or_else(std::sync::PoisonError::into_inner)
.take();
}
impl ClientRuntime {
fn new(
services: Vec<Arc<dyn ClientService>>,
@@ -174,6 +181,7 @@ impl ClientRuntime {
interest_list_manager: Mutex::new(None),
friends_manager: Mutex::new(None),
group_manager: Mutex::new(None),
marketplace_manager: Mutex::new(None),
appearance_manager: Mutex::new(None),
avatar_manager: Mutex::new(None),
animesh_manager: Mutex::new(None),
@@ -248,42 +256,25 @@ impl ClientRuntime {
}
}
services.clear();
self.agent_throttle_sender
.lock()
.unwrap_or_else(std::sync::PoisonError::into_inner)
.take();
self.inventory_manager
.lock()
.unwrap_or_else(std::sync::PoisonError::into_inner)
.take();
self.inventory_ais_client
.lock()
.unwrap_or_else(std::sync::PoisonError::into_inner)
.take();
self.object_manager
.lock()
.unwrap_or_else(std::sync::PoisonError::into_inner)
.take();
self.grid_manager
.lock()
.unwrap_or_else(std::sync::PoisonError::into_inner)
.take();
self.directory_manager
.lock()
.unwrap_or_else(std::sync::PoisonError::into_inner)
.take();
self.interest_list_manager
.lock()
.unwrap_or_else(std::sync::PoisonError::into_inner)
.take();
self.friends_manager
.lock()
.unwrap_or_else(std::sync::PoisonError::into_inner)
.take();
self.group_manager
.lock()
.unwrap_or_else(std::sync::PoisonError::into_inner)
.take();
clear_cached(&self.agent_throttle_sender);
clear_cached(&self.inventory_manager);
clear_cached(&self.inventory_ais_client);
clear_cached(&self.asset_manager);
clear_cached(&self.appearance_manager);
clear_cached(&self.avatar_manager);
clear_cached(&self.animesh_manager);
clear_cached(&self.object_manager);
clear_cached(&self.environment_manager);
clear_cached(&self.estate_tools);
clear_cached(&self.terrain_manager);
clear_cached(&self.sound_manager);
clear_cached(&self.parcel_manager);
clear_cached(&self.grid_manager);
clear_cached(&self.directory_manager);
clear_cached(&self.interest_list_manager);
clear_cached(&self.friends_manager);
clear_cached(&self.group_manager);
clear_cached(&self.marketplace_manager);
self.http_caps_client
.lock()
.unwrap_or_else(std::sync::PoisonError::into_inner)
@@ -1106,6 +1097,32 @@ impl GridClient {
.unwrap_or_else(std::sync::PoisonError::into_inner) = Some(value.inner);
}
pub(crate) fn native_marketplace(&self) -> crate::marketplace_runtime::MarketplaceManager {
let mut cached = self
.runtime
.marketplace_manager
.lock()
.unwrap_or_else(std::sync::PoisonError::into_inner);
if let Some(manager) = cached.as_ref() {
return manager.clone();
}
let manager = crate::marketplace_runtime::MarketplaceManager::native_new_client_owned(self);
*cached = Some(manager.clone());
manager
}
pub(crate) fn native_set_marketplace(
&self,
value: crate::marketplace_runtime::MarketplaceManager,
) {
value.native_bind_to_client(self);
*self
.runtime
.marketplace_manager
.lock()
.unwrap_or_else(std::sync::PoisonError::into_inner) = Some(value);
}
pub(crate) fn native_set_caps_rate_limiter(
&mut self,
value: crate::caps_http::CapsRateLimiter,