Implement estate and marketplace services (#73)
This commit is contained in:
@@ -120,6 +120,7 @@ struct ClientRuntime {
|
||||
agent_manager: Mutex<std::sync::Weak<crate::agent_manager::AgentManagerInner>>,
|
||||
object_manager: Mutex<Option<Arc<crate::object_manager::ObjectManagerInner>>>,
|
||||
environment_manager: Mutex<Option<Arc<crate::environment_manager::EnvironmentManagerInner>>>,
|
||||
estate_tools: Mutex<Option<Arc<crate::estate_tools::EstateToolsInner>>>,
|
||||
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>>>,
|
||||
@@ -164,6 +165,7 @@ impl ClientRuntime {
|
||||
agent_manager: Mutex::new(std::sync::Weak::new()),
|
||||
object_manager: Mutex::new(None),
|
||||
environment_manager: Mutex::new(None),
|
||||
estate_tools: Mutex::new(None),
|
||||
terrain_manager: Mutex::new(None),
|
||||
sound_manager: Mutex::new(None),
|
||||
parcel_manager: Mutex::new(None),
|
||||
@@ -760,6 +762,44 @@ impl GridClient {
|
||||
.unwrap_or_else(std::sync::PoisonError::into_inner) = Some(value.inner);
|
||||
}
|
||||
|
||||
pub(crate) fn install_estate_tools_inner(
|
||||
&self,
|
||||
candidate: Arc<crate::estate_tools::EstateToolsInner>,
|
||||
) -> Arc<crate::estate_tools::EstateToolsInner> {
|
||||
let mut cached = self
|
||||
.runtime
|
||||
.estate_tools
|
||||
.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_estate(&self) -> Result<crate::EstateTools, crate::Error> {
|
||||
if let Some(inner) = self
|
||||
.runtime
|
||||
.estate_tools
|
||||
.lock()
|
||||
.unwrap_or_else(std::sync::PoisonError::into_inner)
|
||||
.clone()
|
||||
{
|
||||
return Ok(crate::estate_tools::EstateTools::native_from_inner(inner));
|
||||
}
|
||||
crate::estate_tools::EstateTools::native_new(self.clone())
|
||||
}
|
||||
|
||||
#[allow(clippy::needless_pass_by_value)]
|
||||
pub(crate) fn native_set_estate(&self, value: crate::EstateTools) {
|
||||
*self
|
||||
.runtime
|
||||
.estate_tools
|
||||
.lock()
|
||||
.unwrap_or_else(std::sync::PoisonError::into_inner) = Some(value.native_inner());
|
||||
}
|
||||
|
||||
pub(crate) fn cached_terrain_manager_inner(
|
||||
&self,
|
||||
) -> Option<Arc<crate::terrain_manager::TerrainManagerInner>> {
|
||||
|
||||
Reference in New Issue
Block a user