Changed the writer/reader access functions to m_primsInSync in PrimSyncInfoManager.

dsg
Huaiyu (Kitty) Liu 2011-06-28 14:47:56 -07:00
parent 9817734adf
commit 981ac91393
1 changed files with 213 additions and 183 deletions

View File

@ -3367,8 +3367,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
HashSet<SceneObjectPartSyncProperties> updatedProperties = updatedPrimProperties.Value; HashSet<SceneObjectPartSyncProperties> updatedProperties = updatedPrimProperties.Value;
//Sync the SOP data and cached property values in PrimSyncInfoManager again //Sync the SOP data and cached property values in PrimSyncInfoManager again
HashSet<SceneObjectPartSyncProperties> propertiesWithSyncInfoUpdated = m_primSyncInfoManager.UpdatePrimSyncInfoByLocal(sop, new List<SceneObjectPartSyncProperties>(updatedProperties)); //HashSet<SceneObjectPartSyncProperties> propertiesWithSyncInfoUpdated = m_primSyncInfoManager.UpdatePrimSyncInfoByLocal(sop, new List<SceneObjectPartSyncProperties>(updatedProperties));
updatedProperties.UnionWith(propertiesWithSyncInfoUpdated); //updatedProperties.UnionWith(propertiesWithSyncInfoUpdated);
SendPrimPropertyUpdates(sop, updatedProperties); SendPrimPropertyUpdates(sop, updatedProperties);
} }
} }
@ -3943,201 +3943,204 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
public OSDMap ToOSDMap() public OSDMap ToOSDMap()
{ {
OSDMap propertyData = new OSDMap(); OSDMap propertyData = new OSDMap();
propertyData["LastUpdateTimeStamp"] = LastUpdateTimeStamp; lock (m_syncInfoLock)
propertyData["LastUpdateSyncID"] = LastUpdateSyncID;
switch (m_property)
{ {
/////////////////////////////////////// propertyData["LastUpdateTimeStamp"] = LastUpdateTimeStamp;
//SOP properties with complex structure propertyData["LastUpdateSyncID"] = LastUpdateSyncID;
///////////////////////////////////////
case SceneObjectPartSyncProperties.Shape:
case SceneObjectPartSyncProperties.TaskInventory:
propertyData["Value"] = OSD.FromString((string)LastUpdateValue);
break;
//////////////////////////// switch (m_property)
//SOP properties, enum types {
//////////////////////////// ///////////////////////////////////////
case SceneObjectPartSyncProperties.AggregateScriptEvents: //SOP properties with complex structure
propertyData["Value"] = OSD.FromInteger((int)((scriptEvents)LastUpdateValue)); ///////////////////////////////////////
break; case SceneObjectPartSyncProperties.Shape:
case SceneObjectPartSyncProperties.Flags: case SceneObjectPartSyncProperties.TaskInventory:
case SceneObjectPartSyncProperties.LocalFlags: propertyData["Value"] = OSD.FromString((string)LastUpdateValue);
propertyData["Value"] = OSD.FromInteger((int)((PrimFlags)LastUpdateValue)); break;
break;
////////////////////////////
//SOP properties, bool types
////////////////////////////
case SceneObjectPartSyncProperties.AllowedDrop:
case SceneObjectPartSyncProperties.IsAttachment:
case SceneObjectPartSyncProperties.PassTouches:
case SceneObjectPartSyncProperties.VolumeDetectActive:
propertyData["Value"] = OSD.FromBoolean((bool)LastUpdateValue);
break;
//////////////////////////// ////////////////////////////
//SOP properties, Vector3 types //SOP properties, enum types
//////////////////////////// ////////////////////////////
case SceneObjectPartSyncProperties.AngularVelocity: case SceneObjectPartSyncProperties.AggregateScriptEvents:
case SceneObjectPartSyncProperties.AttachedPos: propertyData["Value"] = OSD.FromInteger((int)((scriptEvents)LastUpdateValue));
case SceneObjectPartSyncProperties.GroupPosition: break;
case SceneObjectPartSyncProperties.OffsetPosition: case SceneObjectPartSyncProperties.Flags:
case SceneObjectPartSyncProperties.Scale: case SceneObjectPartSyncProperties.LocalFlags:
case SceneObjectPartSyncProperties.SitTargetPosition: propertyData["Value"] = OSD.FromInteger((int)((PrimFlags)LastUpdateValue));
case SceneObjectPartSyncProperties.SitTargetPositionLL: break;
case SceneObjectPartSyncProperties.SOP_Acceleration: ////////////////////////////
case SceneObjectPartSyncProperties.Velocity: //SOP properties, bool types
propertyData["Value"] = OSD.FromVector3((Vector3)LastUpdateValue); ////////////////////////////
break; case SceneObjectPartSyncProperties.AllowedDrop:
case SceneObjectPartSyncProperties.IsAttachment:
case SceneObjectPartSyncProperties.PassTouches:
case SceneObjectPartSyncProperties.VolumeDetectActive:
propertyData["Value"] = OSD.FromBoolean((bool)LastUpdateValue);
break;
//////////////////////////// ////////////////////////////
//SOP properties, UUID types //SOP properties, Vector3 types
//////////////////////////// ////////////////////////////
case SceneObjectPartSyncProperties.AttachedAvatar: case SceneObjectPartSyncProperties.AngularVelocity:
case SceneObjectPartSyncProperties.CollisionSound: case SceneObjectPartSyncProperties.AttachedPos:
case SceneObjectPartSyncProperties.CreatorID: case SceneObjectPartSyncProperties.GroupPosition:
case SceneObjectPartSyncProperties.FolderID: case SceneObjectPartSyncProperties.OffsetPosition:
case SceneObjectPartSyncProperties.GroupID: case SceneObjectPartSyncProperties.Scale:
case SceneObjectPartSyncProperties.LastOwnerID: case SceneObjectPartSyncProperties.SitTargetPosition:
case SceneObjectPartSyncProperties.OwnerID: case SceneObjectPartSyncProperties.SitTargetPositionLL:
case SceneObjectPartSyncProperties.Sound: case SceneObjectPartSyncProperties.SOP_Acceleration:
propertyData["Value"] = OSD.FromUUID((UUID)LastUpdateValue); case SceneObjectPartSyncProperties.Velocity:
break; propertyData["Value"] = OSD.FromVector3((Vector3)LastUpdateValue);
break;
//case SceneObjectPartProperties.AttachedPos: ////////////////////////////
//////////////////////////// //SOP properties, UUID types
//SOP properties, uint types ////////////////////////////
//////////////////////////// case SceneObjectPartSyncProperties.AttachedAvatar:
case SceneObjectPartSyncProperties.AttachmentPoint: case SceneObjectPartSyncProperties.CollisionSound:
case SceneObjectPartSyncProperties.BaseMask: case SceneObjectPartSyncProperties.CreatorID:
case SceneObjectPartSyncProperties.Category: case SceneObjectPartSyncProperties.FolderID:
case SceneObjectPartSyncProperties.EveryoneMask: case SceneObjectPartSyncProperties.GroupID:
case SceneObjectPartSyncProperties.GroupMask: case SceneObjectPartSyncProperties.LastOwnerID:
case SceneObjectPartSyncProperties.InventorySerial: case SceneObjectPartSyncProperties.OwnerID:
case SceneObjectPartSyncProperties.NextOwnerMask: case SceneObjectPartSyncProperties.Sound:
case SceneObjectPartSyncProperties.OwnerMask: propertyData["Value"] = OSD.FromUUID((UUID)LastUpdateValue);
propertyData["Value"] = OSD.FromUInteger((uint)LastUpdateValue); break;
break;
//case SceneObjectPartProperties.BaseMask: //case SceneObjectPartProperties.AttachedPos:
//case SceneObjectPartProperties.Category: ////////////////////////////
//SOP properties, uint types
////////////////////////////
case SceneObjectPartSyncProperties.AttachmentPoint:
case SceneObjectPartSyncProperties.BaseMask:
case SceneObjectPartSyncProperties.Category:
case SceneObjectPartSyncProperties.EveryoneMask:
case SceneObjectPartSyncProperties.GroupMask:
case SceneObjectPartSyncProperties.InventorySerial:
case SceneObjectPartSyncProperties.NextOwnerMask:
case SceneObjectPartSyncProperties.OwnerMask:
propertyData["Value"] = OSD.FromUInteger((uint)LastUpdateValue);
break;
//////////////////////////// //case SceneObjectPartProperties.BaseMask:
//SOP properties, byte types //case SceneObjectPartProperties.Category:
////////////////////////////
case SceneObjectPartSyncProperties.ClickAction:
case SceneObjectPartSyncProperties.Material:
case SceneObjectPartSyncProperties.ObjectSaleType:
case SceneObjectPartSyncProperties.UpdateFlag:
propertyData["Value"] = OSD.FromInteger((byte)LastUpdateValue);
break;
//case SceneObjectPartProperties.CollisionSound:
//////////////////////////// ////////////////////////////
//SOP properties, float types //SOP properties, byte types
//////////////////////////// ////////////////////////////
case SceneObjectPartSyncProperties.CollisionSoundVolume: case SceneObjectPartSyncProperties.ClickAction:
propertyData["Value"] = OSD.FromReal((float)LastUpdateValue); case SceneObjectPartSyncProperties.Material:
break; case SceneObjectPartSyncProperties.ObjectSaleType:
case SceneObjectPartSyncProperties.UpdateFlag:
propertyData["Value"] = OSD.FromInteger((byte)LastUpdateValue);
break;
//case SceneObjectPartProperties.CollisionSound:
//////////////////////////// ////////////////////////////
//SOP properties, Color(struct type) //SOP properties, float types
//////////////////////////// ////////////////////////////
case SceneObjectPartSyncProperties.Color: case SceneObjectPartSyncProperties.CollisionSoundVolume:
propertyData["Value"] = OSD.FromString(PropertySerializer.SerializeColor((System.Drawing.Color)LastUpdateValue)); propertyData["Value"] = OSD.FromReal((float)LastUpdateValue);
break; break;
//////////////////////////// ////////////////////////////
//SOP properties, int types //SOP properties, Color(struct type)
//////////////////////////// ////////////////////////////
case SceneObjectPartSyncProperties.CreationDate: case SceneObjectPartSyncProperties.Color:
case SceneObjectPartSyncProperties.LinkNum: propertyData["Value"] = OSD.FromString(PropertySerializer.SerializeColor((System.Drawing.Color)LastUpdateValue));
case SceneObjectPartSyncProperties.OwnershipCost: break;
case SceneObjectPartSyncProperties.SalePrice:
case SceneObjectPartSyncProperties.ScriptAccessPin:
propertyData["Value"] = OSD.FromInteger((int)LastUpdateValue);
break;
//////////////////////////// ////////////////////////////
//SOP properties, string types //SOP properties, int types
//////////////////////////// ////////////////////////////
case SceneObjectPartSyncProperties.CreatorData: case SceneObjectPartSyncProperties.CreationDate:
case SceneObjectPartSyncProperties.Description: case SceneObjectPartSyncProperties.LinkNum:
case SceneObjectPartSyncProperties.MediaUrl: case SceneObjectPartSyncProperties.OwnershipCost:
case SceneObjectPartSyncProperties.Name: case SceneObjectPartSyncProperties.SalePrice:
case SceneObjectPartSyncProperties.SitName: case SceneObjectPartSyncProperties.ScriptAccessPin:
case SceneObjectPartSyncProperties.Text: propertyData["Value"] = OSD.FromInteger((int)LastUpdateValue);
case SceneObjectPartSyncProperties.TouchName: break;
propertyData["Value"] = OSD.FromString((string)LastUpdateValue);
break;
////////////////////////////
//SOP properties, byte[] types
////////////////////////////
case SceneObjectPartSyncProperties.ParticleSystem:
case SceneObjectPartSyncProperties.TextureAnimation:
propertyData["Value"] = OSD.FromBinary((byte[])LastUpdateValue);
break;
//////////////////////////// ////////////////////////////
//SOP properties, Quaternion types //SOP properties, string types
//////////////////////////// ////////////////////////////
case SceneObjectPartSyncProperties.RotationOffset: case SceneObjectPartSyncProperties.CreatorData:
case SceneObjectPartSyncProperties.SitTargetOrientation: case SceneObjectPartSyncProperties.Description:
case SceneObjectPartSyncProperties.SitTargetOrientationLL: case SceneObjectPartSyncProperties.MediaUrl:
propertyData["Value"] = OSD.FromQuaternion((Quaternion)LastUpdateValue); case SceneObjectPartSyncProperties.Name:
break; case SceneObjectPartSyncProperties.SitName:
case SceneObjectPartSyncProperties.Text:
case SceneObjectPartSyncProperties.TouchName:
propertyData["Value"] = OSD.FromString((string)LastUpdateValue);
break;
////////////////////////////
//SOP properties, byte[] types
////////////////////////////
case SceneObjectPartSyncProperties.ParticleSystem:
case SceneObjectPartSyncProperties.TextureAnimation:
propertyData["Value"] = OSD.FromBinary((byte[])LastUpdateValue);
break;
//////////////////////////////////// ////////////////////////////
//PhysActor properties, float type //SOP properties, Quaternion types
//////////////////////////////////// ////////////////////////////
case SceneObjectPartSyncProperties.Buoyancy: case SceneObjectPartSyncProperties.RotationOffset:
propertyData["Value"] = OSD.FromReal((float)LastUpdateValue); case SceneObjectPartSyncProperties.SitTargetOrientation:
break; case SceneObjectPartSyncProperties.SitTargetOrientationLL:
propertyData["Value"] = OSD.FromQuaternion((Quaternion)LastUpdateValue);
break;
//////////////////////////////////// ////////////////////////////////////
//PhysActor properties, bool type //PhysActor properties, float type
//////////////////////////////////// ////////////////////////////////////
case SceneObjectPartSyncProperties.Flying: case SceneObjectPartSyncProperties.Buoyancy:
case SceneObjectPartSyncProperties.IsColliding: propertyData["Value"] = OSD.FromReal((float)LastUpdateValue);
case SceneObjectPartSyncProperties.CollidingGround: break;
case SceneObjectPartSyncProperties.IsPhysical:
case SceneObjectPartSyncProperties.Kinematic:
propertyData["Value"] = OSD.FromBoolean((bool)LastUpdateValue);
break;
//////////////////////////////////// ////////////////////////////////////
//PhysActor properties, Vector3 type //PhysActor properties, bool type
//////////////////////////////////// ////////////////////////////////////
case SceneObjectPartSyncProperties.Force: case SceneObjectPartSyncProperties.Flying:
case SceneObjectPartSyncProperties.PA_Acceleration: case SceneObjectPartSyncProperties.IsColliding:
case SceneObjectPartSyncProperties.Position: case SceneObjectPartSyncProperties.CollidingGround:
case SceneObjectPartSyncProperties.RotationalVelocity: case SceneObjectPartSyncProperties.IsPhysical:
case SceneObjectPartSyncProperties.Size: case SceneObjectPartSyncProperties.Kinematic:
case SceneObjectPartSyncProperties.Torque: propertyData["Value"] = OSD.FromBoolean((bool)LastUpdateValue);
propertyData["Value"] = OSD.FromVector3((Vector3)LastUpdateValue); break;
break;
//////////////////////////////////// ////////////////////////////////////
//PhysActor properties, Quaternion type //PhysActor properties, Vector3 type
//////////////////////////////////// ////////////////////////////////////
case SceneObjectPartSyncProperties.Orientation: case SceneObjectPartSyncProperties.Force:
propertyData["Value"] = OSD.FromQuaternion((Quaternion)LastUpdateValue); case SceneObjectPartSyncProperties.PA_Acceleration:
break; case SceneObjectPartSyncProperties.Position:
case SceneObjectPartSyncProperties.RotationalVelocity:
case SceneObjectPartSyncProperties.Size:
case SceneObjectPartSyncProperties.Torque:
propertyData["Value"] = OSD.FromVector3((Vector3)LastUpdateValue);
break;
/////////////////////// ////////////////////////////////////
//SOG properties //PhysActor properties, Quaternion type
/////////////////////// ////////////////////////////////////
case SceneObjectPartSyncProperties.AbsolutePosition: case SceneObjectPartSyncProperties.Orientation:
propertyData["Value"] = OSD.FromVector3((Vector3)LastUpdateValue); propertyData["Value"] = OSD.FromQuaternion((Quaternion)LastUpdateValue);
break; break;
case SceneObjectPartSyncProperties.IsSelected:
propertyData["Value"] = OSD.FromBoolean((bool)LastUpdateValue);
break;
default: ///////////////////////
DebugLog.WarnFormat("PrimSynInfo.PropertyToOSD -- no handler for property {0} ", m_property); //SOG properties
break; ///////////////////////
case SceneObjectPartSyncProperties.AbsolutePosition:
propertyData["Value"] = OSD.FromVector3((Vector3)LastUpdateValue);
break;
case SceneObjectPartSyncProperties.IsSelected:
propertyData["Value"] = OSD.FromBoolean((bool)LastUpdateValue);
break;
default:
DebugLog.WarnFormat("PrimSynInfo.PropertyToOSD -- no handler for property {0} ", m_property);
break;
}
} }
return propertyData; return propertyData;
} }
@ -7077,18 +7080,23 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
{ {
lock (m_primsInSyncLock) lock (m_primsInSyncLock)
{ {
if (m_primsInSync.ContainsKey(primUUID)) if (m_primsInSync.ContainsKey(primUUID))
{ {
m_primsInSync[primUUID] = primSyncInfo; m_primsInSync[primUUID] = primSyncInfo;
return false; return false;
} }
/*
//copy the items from the old list and insert the new record //copy the items from the old list and insert the new record
Dictionary<UUID, PrimSyncInfo> newPrimsInSync = new Dictionary<UUID, PrimSyncInfo>(m_primsInSync); Dictionary<UUID, PrimSyncInfo> newPrimsInSync = new Dictionary<UUID, PrimSyncInfo>(m_primsInSync);
newPrimsInSync.Add(primUUID, primSyncInfo); newPrimsInSync.Add(primUUID, primSyncInfo);
//replace the old list //replace the old list
m_primsInSync = newPrimsInSync; m_primsInSync = newPrimsInSync;
* */
m_primsInSync.Add(primUUID, primSyncInfo);
} }
return true; return true;
} }
@ -7113,10 +7121,13 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
m_primsInSync[part.UUID] = primSyncInfo; m_primsInSync[part.UUID] = primSyncInfo;
return false; return false;
} }
/*
Dictionary<UUID, PrimSyncInfo> newPrimsInSync = new Dictionary<UUID, PrimSyncInfo>(m_primsInSync); Dictionary<UUID, PrimSyncInfo> newPrimsInSync = new Dictionary<UUID, PrimSyncInfo>(m_primsInSync);
newPrimsInSync.Add(part.UUID, primSyncInfo); newPrimsInSync.Add(part.UUID, primSyncInfo);
m_primsInSync = newPrimsInSync; m_primsInSync = newPrimsInSync;
* */
m_primsInSync.Add(part.UUID, primSyncInfo);
} }
return true; return true;
} }
@ -7126,6 +7137,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
lock (m_primsInSyncLock) lock (m_primsInSyncLock)
{ {
//copy the old list, update the copied list //copy the old list, update the copied list
/*
Dictionary<UUID, PrimSyncInfo> newPrimsInSync = new Dictionary<UUID, PrimSyncInfo>(m_primsInSync); Dictionary<UUID, PrimSyncInfo> newPrimsInSync = new Dictionary<UUID, PrimSyncInfo>(m_primsInSync);
foreach (KeyValuePair<UUID, PrimSyncInfo> valPair in multiPrimsSyncInfo) foreach (KeyValuePair<UUID, PrimSyncInfo> valPair in multiPrimsSyncInfo)
{ {
@ -7141,6 +7153,19 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
//replace the old list //replace the old list
m_primsInSync = newPrimsInSync; m_primsInSync = newPrimsInSync;
* */
foreach (KeyValuePair<UUID, PrimSyncInfo> valPair in multiPrimsSyncInfo)
{
UUID primUUID = valPair.Key;
PrimSyncInfo primSyncInfo = valPair.Value;
if (m_primsInSync.ContainsKey(primUUID))
{
m_primsInSync[primUUID] = primSyncInfo;
continue;
}
m_primsInSync.Add(primUUID, primSyncInfo);
}
} }
} }
@ -7152,22 +7177,27 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
} }
lock (m_primsInSyncLock) lock (m_primsInSyncLock)
{ {
/*
Dictionary<UUID, PrimSyncInfo> newPrimsInSync = new Dictionary<UUID, PrimSyncInfo>(m_primsInSync); Dictionary<UUID, PrimSyncInfo> newPrimsInSync = new Dictionary<UUID, PrimSyncInfo>(m_primsInSync);
newPrimsInSync.Remove(part.UUID); newPrimsInSync.Remove(part.UUID);
m_primsInSync = newPrimsInSync; m_primsInSync = newPrimsInSync;
* */
m_primsInSync.Remove(part.UUID);
} }
return true; return true;
} }
public PrimSyncInfo GetPrimSyncInfo(UUID primUUID) public PrimSyncInfo GetPrimSyncInfo(UUID primUUID)
{ {
if (m_primsInSync.ContainsKey(primUUID)) lock (m_primsInSyncLock)
{ {
return m_primsInSync[primUUID]; if (m_primsInSync.ContainsKey(primUUID))
{
return m_primsInSync[primUUID];
}
} }
else return null;
return null;
} }
public bool SetSOPPhyscActorProperties(SceneObjectPart part) public bool SetSOPPhyscActorProperties(SceneObjectPart part)