fix: harden OpenSim session readiness
This commit is contained in:
@@ -20,7 +20,7 @@ use futures_util::future::{Either, select};
|
||||
use futures_util::pin_mut;
|
||||
use libremetaverse_structured_data::{OSD, OSDFormat, OSDMap, OSDParser};
|
||||
use libremetaverse_types::compat::{CancellationToken, EventHandler, Subscription, Uri};
|
||||
use libremetaverse_types::{UUID, Vector3};
|
||||
use libremetaverse_types::{UUID, Utils, Vector3};
|
||||
use std::collections::HashMap;
|
||||
use std::sync::atomic::{AtomicBool, Ordering};
|
||||
use std::sync::{Arc, Mutex, RwLock};
|
||||
@@ -570,7 +570,7 @@ impl GridManager {
|
||||
p.agent_data.agent_id = agent;
|
||||
p.agent_data.session_id = session;
|
||||
p.agent_data.flags = layer as u32;
|
||||
p.name_data.name = name.as_bytes().to_vec();
|
||||
p.name_data.name = Utils::string_to_bytes(name.to_owned())?;
|
||||
self.send(&p, PacketType::MapNameRequest)
|
||||
}
|
||||
pub fn request_map_items(
|
||||
@@ -660,6 +660,25 @@ impl GridManager {
|
||||
if let Some(region) = self.inner.region_by_name(&key) {
|
||||
return Ok(Some(Some(region)));
|
||||
}
|
||||
if let Some(simulator) = self
|
||||
.inner
|
||||
.client
|
||||
.network()
|
||||
.current_sim()
|
||||
.filter(|simulator| simulator.name.eq_ignore_ascii_case(&key))
|
||||
{
|
||||
return Ok(Some(Some(GridRegion {
|
||||
access: simulator.access,
|
||||
agents: 0,
|
||||
map_image_id: UUID::zero(),
|
||||
name: simulator.name.clone(),
|
||||
region_flags: simulator.flags,
|
||||
region_handle: simulator.handle,
|
||||
water_height: simulator.water_height.clamp(0.0, f32::from(u8::MAX)) as u8,
|
||||
x: ((simulator.handle >> 32) / 256) as i32,
|
||||
y: ((simulator.handle & u64::from(u32::MAX)) / 256) as i32,
|
||||
})));
|
||||
}
|
||||
let notified = self.inner.notify.notified();
|
||||
self.request_map_region(name, layer)?;
|
||||
if let Some(region) = self.inner.region_by_name(&key) {
|
||||
|
||||
Reference in New Issue
Block a user