Fixed the problem that notecard updating was not propagated -- now syned

across actors, bit viewers may not always get the correct update.
dsg
Huaiyu (Kitty) Liu 2011-05-31 16:23:06 -07:00
parent 0be7f9d804
commit a17f0a0ea1
3 changed files with 70 additions and 12 deletions

View File

@ -302,8 +302,8 @@ namespace OpenSim.Region.Framework.Scenes
{ {
get { return m_inventory; } get { return m_inventory; }
} }
//protected SceneObjectPartInventory m_inventory; protected SceneObjectPartInventory m_inventory;
protected SceneObjectPartInventoryBase m_inventory; //protected SceneObjectPartInventoryBase m_inventory;
public bool Undoing; public bool Undoing;
@ -405,7 +405,7 @@ namespace OpenSim.Region.Framework.Scenes
Rezzed = DateTime.UtcNow; Rezzed = DateTime.UtcNow;
//m_inventory = new SceneObjectPartInventory(this); //m_inventory = new SceneObjectPartInventory(this);
m_inventory = new SceneObjectPartInventoryBase(this); //m_inventory = new SceneObjectPartInventoryBase(this);
} }
/// <summary> /// <summary>
@ -457,7 +457,7 @@ namespace OpenSim.Region.Framework.Scenes
//m_undo = new UndoStack<UndoState>(ParentGroup.GetSceneMaxUndo()); //m_undo = new UndoStack<UndoState>(ParentGroup.GetSceneMaxUndo());
//m_inventory = new SceneObjectPartInventory(this); //m_inventory = new SceneObjectPartInventory(this);
m_inventory = new SceneObjectPartInventoryBase(this); //m_inventory = new SceneObjectPartInventoryBase(this);
} }
#endregion Constructors #endregion Constructors
@ -5056,6 +5056,7 @@ namespace OpenSim.Region.Framework.Scenes
public SceneObjectPart() public SceneObjectPart()
: base() : base()
{ {
m_inventory = new SceneObjectPartInventory(this);
} }
public SceneObjectPart( public SceneObjectPart(
@ -5063,6 +5064,7 @@ namespace OpenSim.Region.Framework.Scenes
Quaternion rotationOffset, Vector3 offsetPosition) Quaternion rotationOffset, Vector3 offsetPosition)
: base(ownerID, shape, groupPosition, rotationOffset, offsetPosition) : base(ownerID, shape, groupPosition, rotationOffset, offsetPosition)
{ {
m_inventory = new SceneObjectPartInventory(this);
} }
private static string m_localActorID = ""; private static string m_localActorID = "";
@ -5176,6 +5178,35 @@ namespace OpenSim.Region.Framework.Scenes
#endregion SceneObjectPartSyncProperties categorization #endregion SceneObjectPartSyncProperties categorization
/*
#region overridden SOPBase members
public new IEntityInventory Inventory
{
get { return m_inventory; }
}
protected new SceneObjectPartInventory m_inventory;
/// <value>
/// Access should be via Inventory directly - this property temporarily remains for xml serialization purposes
/// </value>
public new uint InventorySerial
{
get { return m_inventory.Serial; }
set { m_inventory.Serial = value; }
}
/// <value>
/// Access should be via Inventory directly - this property temporarily remains for xml serialization purposes
/// </value>
public new TaskInventoryDictionary TaskInventory
{
get { return m_inventory.Items; }
set { m_inventory.Items = value; }
}
#endregion //overridden SOPBase members
*/
#region overridden SOPBase functions #region overridden SOPBase functions
//Implementation of ScheduleFullUpdate and ScheduleTerseUpdate for Bucket //Implementation of ScheduleFullUpdate and ScheduleTerseUpdate for Bucket
//based synchronization //based synchronization
@ -5218,6 +5249,17 @@ namespace OpenSim.Region.Framework.Scenes
base.ScheduleTerseUpdate(updatedProperties); base.ScheduleTerseUpdate(updatedProperties);
} }
public void ScheduleSyncUpdate(List<SceneObjectPartSyncProperties> updatedProperties)
{
if (updatedProperties != null && updatedProperties.Count > 0)
{
if (m_parentGroup != null && m_parentGroup.Scene != null && m_parentGroup.Scene.RegionSyncModule != null)
{
m_parentGroup.Scene.RegionSyncModule.ProcessAndEnqueuePrimUpdatesByLocal(this, updatedProperties);
}
}
}
#endregion overridden SOPBase functions #endregion overridden SOPBase functions
#region DSG SYNC supporting functions #region DSG SYNC supporting functions

View File

@ -41,8 +41,8 @@ using OpenSim.Region.Framework.Scenes.Serialization;
namespace OpenSim.Region.Framework.Scenes namespace OpenSim.Region.Framework.Scenes
{ {
//public class SceneObjectPartInventory : IEntityInventory public class SceneObjectPartInventory : IEntityInventory
public class SceneObjectPartInventoryBase : IEntityInventory //public class SceneObjectPartInventoryBase : IEntityInventory
{ {
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
@ -53,8 +53,8 @@ namespace OpenSim.Region.Framework.Scenes
/// <value> /// <value>
/// The part to which the inventory belongs. /// The part to which the inventory belongs.
/// </value> /// </value>
//private SceneObjectPart m_part; private SceneObjectPart m_part;
private SceneObjectPartBase m_part; //private SceneObjectPartBase m_part;
/// <summary> /// <summary>
/// Serial count for inventory file , used to tell if inventory has changed /// Serial count for inventory file , used to tell if inventory has changed
@ -100,8 +100,8 @@ namespace OpenSim.Region.Framework.Scenes
/// <param name="part"> /// <param name="part">
/// A <see cref="SceneObjectPart"/> /// A <see cref="SceneObjectPart"/>
/// </param> /// </param>
//public SceneObjectPartInventory(SceneObjectPart part) public SceneObjectPartInventory(SceneObjectPart part)
public SceneObjectPartInventoryBase(SceneObjectPartBase part) //public SceneObjectPartInventoryBase(SceneObjectPartBase part)
{ {
m_part = part; m_part = part;
} }
@ -695,7 +695,8 @@ namespace OpenSim.Region.Framework.Scenes
return UpdateInventoryItem(item, fireScriptEvents, true); return UpdateInventoryItem(item, fireScriptEvents, true);
} }
public bool UpdateInventoryItem(TaskInventoryItem item, bool fireScriptEvents, bool considerChanged) //public bool UpdateInventoryItem(TaskInventoryItem item, bool fireScriptEvents, bool considerChanged)
public virtual bool UpdateInventoryItem(TaskInventoryItem item, bool fireScriptEvents, bool considerChanged)
{ {
TaskInventoryItem it = GetInventoryItem(item.ItemID); TaskInventoryItem it = GetInventoryItem(item.ItemID);
if (it != null) if (it != null)
@ -1183,6 +1184,7 @@ namespace OpenSim.Region.Framework.Scenes
#endregion REGION SYNC #endregion REGION SYNC
} }
/*
#region DSG SYNC #region DSG SYNC
public class SceneObjectPartInventory : SceneObjectPartInventoryBase public class SceneObjectPartInventory : SceneObjectPartInventoryBase
{ {
@ -1200,6 +1202,19 @@ namespace OpenSim.Region.Framework.Scenes
base.Serial = value; base.Serial = value;
} }
} }
public override bool UpdateInventoryItem(TaskInventoryItem item, bool fireScriptEvents, bool considerChanged)
{
if (base.UpdateInventoryItem(item, fireScriptEvents, considerChanged))
{
m_part.ScheduleSyncUpdate(new List<SceneObjectPartSyncProperties>() { SceneObjectPartSyncProperties.TaskInventory, SceneObjectPartSyncProperties.InventorySerial });
return true;
}
else
return false;
}
} }
#endregion #endregion
* */
} }

View File

@ -5415,7 +5415,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
m_host.Name = name!=null?name:String.Empty; m_host.Name = name!=null?name:String.Empty;
//DSG SYNC //DSG SYNC
m_host.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>() { SceneObjectPartSyncProperties.Name }); //m_host.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>() { SceneObjectPartSyncProperties.Name });
m_host.ScheduleSyncUpdate(new List<SceneObjectPartSyncProperties>() { SceneObjectPartSyncProperties.Name });
} }
public LSL_String llGetDate() public LSL_String llGetDate()