SyncOutPrimUpdates linked with EncodePrimProperties and SendPrimUpdateToRelevantSyncConnectors.
parent
a06dad37fd
commit
9d3de471a5
|
@ -3108,12 +3108,47 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
m_primPropertyUpdates.Clear();
|
||||
}
|
||||
|
||||
//Enqueue sync message for sending out
|
||||
if (primPropertyUpdates.Count > 0)
|
||||
{
|
||||
//OSDMap propertiesToSync = m_primSyncInfoManager.EncodePrimProperties(part, propertiesWithSyncInfoUpdated);
|
||||
//Starting a new thread to prepare sync message and enqueue it to SyncConnectors
|
||||
System.Threading.ThreadPool.QueueUserWorkItem(delegate
|
||||
{
|
||||
//OSDMap syncData = new OSDMap();
|
||||
//syncData["primCount"] = OSD.FromInteger(primPropertyUpdates.Count);
|
||||
//OSDArray primDataArray = new OSDArray();
|
||||
//syncData["primData"] = (OSD)primDataArray;
|
||||
|
||||
|
||||
foreach (KeyValuePair<UUID, HashSet<SceneObjectPartProperties>> updatedPrimProperties in primPropertyUpdates)
|
||||
{
|
||||
UUID primUUID = updatedPrimProperties.Key;
|
||||
HashSet<SceneObjectPartProperties> updatedProperties = updatedPrimProperties.Value;
|
||||
OSDMap syncData = m_primSyncInfoManager.EncodePrimProperties(primUUID, updatedProperties);
|
||||
|
||||
SymmetricSyncMessage syncMsg = new SymmetricSyncMessage(SymmetricSyncMessage.MsgType.UpdatedObject, OSDParser.SerializeJsonString(syncData));
|
||||
SendPrimUpdateToRelevantSyncConnectors(primUUID, syncMsg);
|
||||
}
|
||||
|
||||
// Indicate that the current batch of updates has been completed
|
||||
Interlocked.Exchange(ref m_sendingPrimPropertyUpdates, 0);
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
Interlocked.Exchange(ref m_sendingPrimPropertyUpdates, 0);
|
||||
}
|
||||
}
|
||||
|
||||
//Object updates are sent by enqueuing into each connector's outQueue.
|
||||
private void SendPrimUpdateToRelevantSyncConnectors(UUID primUUID, SymmetricSyncMessage syncMsg)
|
||||
{
|
||||
SceneObjectPart updatedPart = m_scene.GetSceneObjectPart(primUUID);
|
||||
if (updatedPart == null)
|
||||
return;
|
||||
|
||||
HashSet<SyncConnector> syncConnectors = GetSyncConnectorsForPrimUpdates(updatedPart);
|
||||
foreach (SyncConnector connector in syncConnectors)
|
||||
{
|
||||
connector.EnqueueOutgoingUpdate(updatedPart.UUID, syncMsg.ToBytes());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5180,13 +5215,16 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
}
|
||||
}
|
||||
|
||||
public OSDMap EncodePrimProperties(SceneObjectPart part, List<SceneObjectPartProperties> updatedProperties)
|
||||
public OSDMap EncodePrimProperties(UUID primUUID, HashSet<SceneObjectPartProperties> updatedProperties)
|
||||
{
|
||||
OSDMap data = new OSDMap();
|
||||
data["primUUID"] = OSDMap.FromUUID(part.UUID);
|
||||
data["primUUID"] = OSDMap.FromUUID(primUUID);
|
||||
OSDArray propertyData = new OSDArray();
|
||||
data["propertyData"] = propertyData;
|
||||
|
||||
foreach (SceneObjectPartProperties property in updatedProperties)
|
||||
{
|
||||
// data[property.ToString()] =
|
||||
propertyData.Add(m_primsInSync[primUUID].EncodeUpdatedProperties(updatedProperties));
|
||||
}
|
||||
|
||||
return data;
|
||||
|
|
|
@ -32,6 +32,12 @@ using OpenMetaverse;
|
|||
|
||||
namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||
{
|
||||
public enum SyncConnectorState
|
||||
{
|
||||
Idle, //not connected
|
||||
Initialization, //initializing local copy of Scene
|
||||
Syncing, //done initialization, in normal process of syncing terrain, objects, etc
|
||||
}
|
||||
// For implementations, a lot was copied from RegionSyncClientView, especially the SendLoop/ReceiveLoop.
|
||||
public class SyncConnector : ISyncStatistics
|
||||
{
|
||||
|
@ -53,11 +59,15 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
private long bytesIn=0;
|
||||
private long bytesOut=0;
|
||||
private DateTime lastStatTime;
|
||||
|
||||
// A queue for outgoing traffic.
|
||||
private BlockingUpdateQueue m_outQ = new BlockingUpdateQueue();
|
||||
|
||||
|
||||
private RegionSyncModule m_regionSyncModule = null;
|
||||
|
||||
//members for keeping track of state of this connector
|
||||
private SyncConnectorState m_syncState = SyncConnectorState.Idle;
|
||||
|
||||
// unique connector number across all regions
|
||||
private static int m_connectorNum = 0;
|
||||
public int ConnectorNum
|
||||
|
|
Loading…
Reference in New Issue