Handling RemovedObject as event, instead of as object-update as in the previous approach.
parent
5c31e0bdd3
commit
f8a0de591d
|
@ -935,29 +935,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
SendSyncMessage(SymmetricSyncMessage.MsgType.Terrain, OSDParser.SerializeJsonString(data));
|
SendSyncMessage(SymmetricSyncMessage.MsgType.Terrain, OSDParser.SerializeJsonString(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void HandleRemovedObject(SymmetricSyncMessage msg)
|
|
||||||
{
|
|
||||||
// Get the data from message and error check
|
|
||||||
OSDMap data = DeserializeMessage(msg);
|
|
||||||
|
|
||||||
if (data == null)
|
|
||||||
{
|
|
||||||
|
|
||||||
SymmetricSyncMessage.HandleError(LogHeader, msg, "Could not deserialize JSON data.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the parameters from data
|
|
||||||
//ulong regionHandle = data["regionHandle"].AsULong();
|
|
||||||
//uint localID = data["UUID"].AsUInteger();
|
|
||||||
UUID sogUUID = data["UUID"].AsUUID();
|
|
||||||
|
|
||||||
SceneObjectGroup sog = m_scene.SceneGraph.GetGroupByPrim(sogUUID);
|
|
||||||
if (sog != null)
|
|
||||||
{
|
|
||||||
m_scene.DeleteSceneObjectBySynchronization(sog);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
HashSet<string> exceptions = new HashSet<string>();
|
HashSet<string> exceptions = new HashSet<string>();
|
||||||
private OSDMap DeserializeMessage(SymmetricSyncMessage msg)
|
private OSDMap DeserializeMessage(SymmetricSyncMessage msg)
|
||||||
|
@ -990,6 +968,34 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void HandleRemovedObject(SymmetricSyncMessage msg)
|
||||||
|
{
|
||||||
|
// Get the data from message and error check
|
||||||
|
OSDMap data = DeserializeMessage(msg);
|
||||||
|
string init_actorID = data["actorID"].AsString();
|
||||||
|
|
||||||
|
if (data == null)
|
||||||
|
{
|
||||||
|
|
||||||
|
SymmetricSyncMessage.HandleError(LogHeader, msg, "Could not deserialize JSON data.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
UUID sogUUID = data["UUID"].AsUUID();
|
||||||
|
|
||||||
|
SceneObjectGroup sog = m_scene.SceneGraph.GetGroupByPrim(sogUUID);
|
||||||
|
if (sog != null)
|
||||||
|
{
|
||||||
|
m_scene.DeleteSceneObjectBySynchronization(sog);
|
||||||
|
}
|
||||||
|
|
||||||
|
//if this is a relay node, forwards the event
|
||||||
|
if (m_isSyncRelay)
|
||||||
|
{
|
||||||
|
SendSceneEventToRelevantSyncConnectors(init_actorID, msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The common actions for handling remote events (event initiated at other actors and propogated here)
|
/// The common actions for handling remote events (event initiated at other actors and propogated here)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -1230,8 +1236,9 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Send a sync message to remove the given objects in all connected actors, if this is a relay node.
|
/// Send a sync message to remove the given objects in all connected actors.
|
||||||
/// UUID is used for identified a removed object.
|
/// UUID is used for identified a removed object. This function now should
|
||||||
|
/// only be triggered by an object removal that is initiated locally.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="sog"></param>
|
/// <param name="sog"></param>
|
||||||
private void RegionSyncModule_OnObjectBeingRemovedFromScene(SceneObjectGroup sog)
|
private void RegionSyncModule_OnObjectBeingRemovedFromScene(SceneObjectGroup sog)
|
||||||
|
@ -1239,20 +1246,19 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
//m_log.DebugFormat("RegionSyncModule_OnObjectBeingRemovedFromScene called at time {0}:{1}:{2}", DateTime.Now.Minute, DateTime.Now.Second, DateTime.Now.Millisecond);
|
//m_log.DebugFormat("RegionSyncModule_OnObjectBeingRemovedFromScene called at time {0}:{1}:{2}", DateTime.Now.Minute, DateTime.Now.Second, DateTime.Now.Millisecond);
|
||||||
|
|
||||||
//Only send the message out if this is a relay node for sync messages, or this actor caused deleting the object
|
//Only send the message out if this is a relay node for sync messages, or this actor caused deleting the object
|
||||||
if (m_isSyncRelay || CheckObjectForSendingUpdate(sog))
|
//if (m_isSyncRelay || CheckObjectForSendingUpdate(sog))
|
||||||
{
|
|
||||||
|
|
||||||
OSDMap data = new OSDMap(1);
|
OSDMap data = new OSDMap(1);
|
||||||
//data["regionHandle"] = OSD.FromULong(regionHandle);
|
//data["regionHandle"] = OSD.FromULong(regionHandle);
|
||||||
//data["localID"] = OSD.FromUInteger(sog.LocalId);
|
//data["localID"] = OSD.FromUInteger(sog.LocalId);
|
||||||
data["UUID"] = OSD.FromUUID(sog.UUID);
|
data["UUID"] = OSD.FromUUID(sog.UUID);
|
||||||
|
data["actorID"] = OSD.FromString(m_actorID);
|
||||||
|
|
||||||
SymmetricSyncMessage rsm = new SymmetricSyncMessage(SymmetricSyncMessage.MsgType.RemovedObject, OSDParser.SerializeJsonString(data));
|
SymmetricSyncMessage rsm = new SymmetricSyncMessage(SymmetricSyncMessage.MsgType.RemovedObject, OSDParser.SerializeJsonString(data));
|
||||||
SendObjectUpdateToRelevantSyncConnectors(sog, rsm);
|
SendObjectUpdateToRelevantSyncConnectors(sog, rsm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void PublishSceneEvent(EventManager.EventNames ev, Object[] evArgs)
|
public void PublishSceneEvent(EventManager.EventNames ev, Object[] evArgs)
|
||||||
{
|
{
|
||||||
switch (ev)
|
switch (ev)
|
||||||
|
|
|
@ -662,7 +662,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
if (UnlinkSceneObject(group, false))
|
if (UnlinkSceneObject(group, false))
|
||||||
{
|
{
|
||||||
EventManager.TriggerObjectBeingRemovedFromScene(group);
|
//For object removals caused by remote events (by other actors), do not trigger local event ObjectBeingRemovedFromScene
|
||||||
|
//EventManager.TriggerObjectBeingRemovedFromScene(group);
|
||||||
EventManager.TriggerParcelPrimCountTainted();
|
EventManager.TriggerParcelPrimCountTainted();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2424,12 +2425,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
//SYMMETRIC SYNC
|
//SYMMETRIC SYNC
|
||||||
//Set the ActorID and TimeStamp info for this latest update
|
//Set the ActorID and TimeStamp info for this latest update
|
||||||
|
/*
|
||||||
foreach (SceneObjectPart part in group.Parts)
|
foreach (SceneObjectPart part in group.Parts)
|
||||||
{
|
{
|
||||||
part.SyncInfoUpdate();
|
part.SyncInfoUpdate();
|
||||||
}
|
}
|
||||||
//end of SYMMETRIC SYNC
|
//end of SYMMETRIC SYNC
|
||||||
|
* */
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -478,10 +478,12 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
updates = new List<SceneObjectGroup>(m_updateList.Values);
|
updates = new List<SceneObjectGroup>(m_updateList.Values);
|
||||||
|
|
||||||
|
/*
|
||||||
if (updates.Count > 0)
|
if (updates.Count > 0)
|
||||||
{
|
{
|
||||||
m_log.Debug("SceneGraph: " + updates.Count + " objects to send updates for");
|
m_log.Debug("SceneGraph: " + updates.Count + " objects to send updates for");
|
||||||
}
|
}
|
||||||
|
* */
|
||||||
|
|
||||||
|
|
||||||
m_updateList.Clear();
|
m_updateList.Clear();
|
||||||
|
|
|
@ -1155,12 +1155,15 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
SceneObjectPart part = parts[i];
|
SceneObjectPart part = parts[i];
|
||||||
|
|
||||||
|
//SYMMETRIC SYNC: object remove should be handled through RegionSyncModule
|
||||||
|
/*
|
||||||
// REGION SYNC
|
// REGION SYNC
|
||||||
if (Scene.IsSyncedServer())
|
if (Scene.IsSyncedServer())
|
||||||
{
|
{
|
||||||
Scene.RegionSyncServerModule.DeleteObject(part.RegionHandle, part.LocalId, part);
|
Scene.RegionSyncServerModule.DeleteObject(part.RegionHandle, part.LocalId, part);
|
||||||
//return;
|
//return;
|
||||||
}
|
}
|
||||||
|
* */
|
||||||
|
|
||||||
Scene.ForEachScenePresence(delegate(ScenePresence avatar)
|
Scene.ForEachScenePresence(delegate(ScenePresence avatar)
|
||||||
{
|
{
|
||||||
|
|
|
@ -5066,14 +5066,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
this.m_lastUpdateActorID = updatedPart.LastUpdateActorID;
|
this.m_lastUpdateActorID = updatedPart.LastUpdateActorID;
|
||||||
this.m_lastUpdateTimeStamp = updatedPart.LastUpdateTimeStamp;
|
this.m_lastUpdateTimeStamp = updatedPart.LastUpdateTimeStamp;
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
this.m_inventory.Items = (TaskInventoryDictionary)updatedPart.m_inventory.Items.Clone();
|
|
||||||
//update shape information, for now, only update fileds in Shape whose set functions are defined in PrimitiveBaseShape
|
|
||||||
this.Shape = updatedPart.Shape.Copy();
|
|
||||||
this.Shape.TextureEntry = updatedPart.Shape.TextureEntry;
|
|
||||||
* */
|
|
||||||
|
|
||||||
return partUpdateResult;
|
return partUpdateResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5083,7 +5075,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void ScheduleFullUpdate_SyncInfoUnchanged()
|
public void ScheduleFullUpdate_SyncInfoUnchanged()
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[SCENE OBJECT PART]: ScheduleFullUpdate_SyncInfoUnchanged for {0} {1}", Name, LocalId);
|
//m_log.DebugFormat("[SCENE OBJECT PART]: ScheduleFullUpdate_SyncInfoUnchanged for {0} {1}", Name, LocalId);
|
||||||
|
|
||||||
if (m_parentGroup != null)
|
if (m_parentGroup != null)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue