Complete milestone 09 world integration gate (#75)
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user