Implement grid and directory discovery (#71)
All checks were successful
Native code generation / deterministic (push) Successful in 15m16s
Imaging and meshing gate / native (push) Successful in 5m9s
JPEG 2000 feature / linux (push) Successful in 2m47s
Native Rust workspace compile / compile (push) Successful in 5m14s
Skia feature / linux (push) Successful in 31m28s
All checks were successful
Native code generation / deterministic (push) Successful in 15m16s
Imaging and meshing gate / native (push) Successful in 5m9s
JPEG 2000 feature / linux (push) Successful in 2m47s
Native Rust workspace compile / compile (push) Successful in 5m14s
Skia feature / linux (push) Successful in 31m28s
This commit is contained in:
@@ -123,6 +123,9 @@ struct ClientRuntime {
|
||||
terrain_manager: Mutex<Option<Arc<crate::terrain_manager::TerrainManagerInner>>>,
|
||||
sound_manager: Mutex<Option<Arc<crate::sound_manager::SoundManagerInner>>>,
|
||||
parcel_manager: Mutex<Option<Arc<crate::parcel_manager::ParcelManagerInner>>>,
|
||||
grid_manager: Mutex<Option<Arc<crate::grid_manager::GridManagerInner>>>,
|
||||
directory_manager: Mutex<Option<Arc<crate::directory_manager::DirectoryManagerInner>>>,
|
||||
interest_list_manager: Mutex<Option<Arc<crate::interest_list::InterestListManagerInner>>>,
|
||||
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>>>,
|
||||
@@ -162,6 +165,9 @@ impl ClientRuntime {
|
||||
terrain_manager: Mutex::new(None),
|
||||
sound_manager: Mutex::new(None),
|
||||
parcel_manager: Mutex::new(None),
|
||||
grid_manager: Mutex::new(None),
|
||||
directory_manager: Mutex::new(None),
|
||||
interest_list_manager: Mutex::new(None),
|
||||
appearance_manager: Mutex::new(None),
|
||||
avatar_manager: Mutex::new(None),
|
||||
animesh_manager: Mutex::new(None),
|
||||
@@ -252,6 +258,18 @@ impl ClientRuntime {
|
||||
.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.http_caps_client
|
||||
.lock()
|
||||
.unwrap_or_else(std::sync::PoisonError::into_inner)
|
||||
@@ -845,6 +863,121 @@ impl GridClient {
|
||||
.unwrap_or_else(std::sync::PoisonError::into_inner) = Some(value.inner);
|
||||
}
|
||||
|
||||
pub(crate) fn cached_grid_manager_inner(
|
||||
&self,
|
||||
) -> Option<Arc<crate::grid_manager::GridManagerInner>> {
|
||||
self.runtime
|
||||
.grid_manager
|
||||
.lock()
|
||||
.unwrap_or_else(std::sync::PoisonError::into_inner)
|
||||
.clone()
|
||||
}
|
||||
pub(crate) fn install_grid_manager_inner(
|
||||
&self,
|
||||
candidate: Arc<crate::grid_manager::GridManagerInner>,
|
||||
) -> Arc<crate::grid_manager::GridManagerInner> {
|
||||
let mut cached = self
|
||||
.runtime
|
||||
.grid_manager
|
||||
.lock()
|
||||
.unwrap_or_else(std::sync::PoisonError::into_inner);
|
||||
if let Some(inner) = cached.as_ref() {
|
||||
return Arc::clone(inner);
|
||||
}
|
||||
*cached = Some(Arc::clone(&candidate));
|
||||
candidate
|
||||
}
|
||||
pub(crate) fn native_grid(&self) -> Result<crate::GridManager, crate::Error> {
|
||||
if let Some(inner) = self.cached_grid_manager_inner() {
|
||||
Ok(crate::GridManager { inner })
|
||||
} else {
|
||||
crate::grid_manager::GridManager::native_new(Arc::new(self.clone()))
|
||||
}
|
||||
}
|
||||
pub(crate) fn native_set_grid(&self, value: crate::GridManager) {
|
||||
*self
|
||||
.runtime
|
||||
.grid_manager
|
||||
.lock()
|
||||
.unwrap_or_else(std::sync::PoisonError::into_inner) = Some(value.inner);
|
||||
}
|
||||
pub(crate) fn cached_directory_manager_inner(
|
||||
&self,
|
||||
) -> Option<Arc<crate::directory_manager::DirectoryManagerInner>> {
|
||||
self.runtime
|
||||
.directory_manager
|
||||
.lock()
|
||||
.unwrap_or_else(std::sync::PoisonError::into_inner)
|
||||
.clone()
|
||||
}
|
||||
pub(crate) fn install_directory_manager_inner(
|
||||
&self,
|
||||
candidate: Arc<crate::directory_manager::DirectoryManagerInner>,
|
||||
) -> Arc<crate::directory_manager::DirectoryManagerInner> {
|
||||
let mut cached = self
|
||||
.runtime
|
||||
.directory_manager
|
||||
.lock()
|
||||
.unwrap_or_else(std::sync::PoisonError::into_inner);
|
||||
if let Some(inner) = cached.as_ref() {
|
||||
return Arc::clone(inner);
|
||||
}
|
||||
*cached = Some(Arc::clone(&candidate));
|
||||
candidate
|
||||
}
|
||||
pub(crate) fn native_directory(&self) -> Result<crate::DirectoryManager, crate::Error> {
|
||||
if let Some(inner) = self.cached_directory_manager_inner() {
|
||||
Ok(crate::DirectoryManager { inner })
|
||||
} else {
|
||||
crate::directory_manager::DirectoryManager::native_new(Arc::new(self.clone()))
|
||||
}
|
||||
}
|
||||
pub(crate) fn native_set_directory(&self, value: crate::DirectoryManager) {
|
||||
*self
|
||||
.runtime
|
||||
.directory_manager
|
||||
.lock()
|
||||
.unwrap_or_else(std::sync::PoisonError::into_inner) = Some(value.inner);
|
||||
}
|
||||
pub(crate) fn cached_interest_list_manager_inner(
|
||||
&self,
|
||||
) -> Option<Arc<crate::interest_list::InterestListManagerInner>> {
|
||||
self.runtime
|
||||
.interest_list_manager
|
||||
.lock()
|
||||
.unwrap_or_else(std::sync::PoisonError::into_inner)
|
||||
.clone()
|
||||
}
|
||||
pub(crate) fn install_interest_list_manager_inner(
|
||||
&self,
|
||||
candidate: Arc<crate::interest_list::InterestListManagerInner>,
|
||||
) -> Arc<crate::interest_list::InterestListManagerInner> {
|
||||
let mut cached = self
|
||||
.runtime
|
||||
.interest_list_manager
|
||||
.lock()
|
||||
.unwrap_or_else(std::sync::PoisonError::into_inner);
|
||||
if let Some(inner) = cached.as_ref() {
|
||||
return Arc::clone(inner);
|
||||
}
|
||||
*cached = Some(Arc::clone(&candidate));
|
||||
candidate
|
||||
}
|
||||
pub(crate) fn native_interest_list(&self) -> Result<crate::InterestListManager, crate::Error> {
|
||||
if let Some(inner) = self.cached_interest_list_manager_inner() {
|
||||
Ok(crate::InterestListManager { inner })
|
||||
} else {
|
||||
crate::interest_list::InterestListManager::native_new(Arc::new(self.clone()))
|
||||
}
|
||||
}
|
||||
pub(crate) fn native_set_interest_list(&self, value: crate::InterestListManager) {
|
||||
*self
|
||||
.runtime
|
||||
.interest_list_manager
|
||||
.lock()
|
||||
.unwrap_or_else(std::sync::PoisonError::into_inner) = Some(value.inner);
|
||||
}
|
||||
|
||||
pub(crate) fn native_set_caps_rate_limiter(
|
||||
&mut self,
|
||||
value: crate::caps_http::CapsRateLimiter,
|
||||
|
||||
Reference in New Issue
Block a user