Merge branch 'dev_kitty' into physbucket
Conflicts: OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/RegionSyncModule.csdsg
						commit
						b76c233db3
					
				|  | @ -254,8 +254,6 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
|         /// </summary> | ||||
|         public void QueueAppearanceSend(UUID agentid) | ||||
|         { | ||||
|             // m_log.WarnFormat("[AVFACTORY]: Queue appearance send for {0}", agentid); | ||||
| 
 | ||||
|             // 10000 ticks per millisecond, 1000 milliseconds per second | ||||
|             long timestamp = DateTime.Now.Ticks + Convert.ToInt64(m_sendtime * 1000 * 10000); | ||||
|             lock (m_sendqueue) | ||||
|  | @ -263,7 +261,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
|                 m_sendqueue[agentid] = timestamp; | ||||
|                 m_updateTimer.Start(); | ||||
|             } | ||||
|             m_log.WarnFormat("[AVFACTORY]: Queue appearance send for {0} at {1} (now is {2})", agentid, timestamp,DateTime.Now.Ticks); | ||||
|             //m_log.DebugFormat("[AVFACTORY]: Queue appearance send for {0} at {1} (now is {2})", agentid, timestamp,DateTime.Now.Ticks); | ||||
|         } | ||||
| 
 | ||||
|         public void QueueAppearanceSave(UUID agentid) | ||||
|  | @ -382,7 +380,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
|                 { | ||||
|                     if (kvp.Value < now) | ||||
|                     { | ||||
|                         m_log.WarnFormat("[AVFACTORY]: send appearance for {0} at time {1}", kvp.Key, now); | ||||
|                         m_log.DebugFormat("[AVFACTORY]: send appearance for {0} at time {1}", kvp.Key, now); | ||||
|                         Util.FireAndForget(delegate(object o) { HandleAppearanceSend(kvp.Key); }); | ||||
|                         m_sendqueue.Remove(kvp.Key); | ||||
|                     } | ||||
|  |  | |||
|  | @ -771,11 +771,13 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | |||
|                                 sp.ControllingClient.SendAnimations(animIDs, seqs, sourceAgentID, objectIDs); | ||||
|                             } | ||||
|                         } | ||||
|                         /* | ||||
|                         else | ||||
|                         { | ||||
|                             m_log.WarnFormat("{0} Could not send animation for {1} because scene presence not found", | ||||
|                                 LogHeader(), agentID.ToString()); | ||||
|                         } | ||||
|                         */ | ||||
|                         return; | ||||
|                     } | ||||
|                 case RegionSyncMessage.MsgType.BalanceClientLoad: | ||||
|  |  | |||
|  | @ -282,7 +282,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | |||
|             // Existing value of 1 indicates that updates are currently being sent so skip updates this pass | ||||
|             if (Interlocked.Exchange(ref m_sendingUpdates, 1) == 1) | ||||
|             { | ||||
|                 m_log.WarnFormat("[REGION SYNC SERVER MODULE] SendUpdates(): An update thread is already running."); | ||||
|                 m_log.DebugFormat("[REGION SYNC SERVER MODULE] SendUpdates(): An update thread is already running."); | ||||
|                 return; | ||||
|             } | ||||
| 
 | ||||
|  |  | |||
|  | @ -193,159 +193,6 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | |||
|             get { return m_propertyBucketNames; } | ||||
|         } | ||||
| 
 | ||||
|         private RegionSyncListener m_localSyncListener = null; | ||||
|         private bool m_synced = false; | ||||
| 
 | ||||
|         // Lock is used to synchronize access to the update status and update queues | ||||
|         //private object m_updateSceneObjectPartLock = new object(); | ||||
|         //private Dictionary<UUID, SceneObjectGroup> m_primUpdates = new Dictionary<UUID, SceneObjectGroup>(); | ||||
|         private Dictionary<string, Object> m_primUpdateLocks = new Dictionary<string, object>(); | ||||
|         private Dictionary<string, Dictionary<UUID, SceneObjectPart>> m_primUpdates = new Dictionary<string, Dictionary<UUID, SceneObjectPart>>(); | ||||
| 
 | ||||
|         private delegate void PrimUpdatePerBucketSender(string bucketName, List<SceneObjectPart> primUpdates); | ||||
|         private Dictionary<string,PrimUpdatePerBucketSender> m_primUpdatesPerBucketSender = new Dictionary<string,PrimUpdatePerBucketSender>(); | ||||
| 
 | ||||
|         private object m_updateScenePresenceLock = new object(); | ||||
|         private Dictionary<UUID, ScenePresence> m_presenceUpdates = new Dictionary<UUID, ScenePresence>(); | ||||
|         private int m_sendingUpdates=0; | ||||
| 
 | ||||
|         private int m_maxNumOfPropertyBuckets;  | ||||
| 
 | ||||
|         //Read in configuration for which property-bucket each property belongs to, and the description of each bucket | ||||
|         private void PopulatePropertyBucketMap(IConfig config) | ||||
|         { | ||||
|             //We start with a default bucket map. Will add the code to read in configuration from config files later. | ||||
|             PopulatePropertyBuketMapByDefault(); | ||||
| 
 | ||||
|             //Pass the bucket information to SceneObjectPart. | ||||
|             SceneObjectPart.InitializePropertyBucketInfo(m_primPropertyBucketMap, m_propertyBucketNames, m_actorID); | ||||
| 
 | ||||
|         } | ||||
| 
 | ||||
|         //As of current version, we still use the xml serialization as most of SOP's properties are in the General bucket. | ||||
|         //Going forward, we may serialize the properties differently, e.g. using OSDMap  | ||||
|         private void PrimUpdatesGeneralBucketSender(string bucketName, List<SceneObjectPart> primUpdates) | ||||
|         { | ||||
|             Dictionary<UUID, SceneObjectGroup> updatedObjects = new Dictionary<UUID, SceneObjectGroup>(); | ||||
|             foreach (SceneObjectPart part in primUpdates) | ||||
|             { | ||||
|                 updatedObjects[part.ParentGroup.UUID] = part.ParentGroup; | ||||
|             } | ||||
|             foreach (SceneObjectGroup sog in updatedObjects.Values) | ||||
|             { | ||||
|                 sog.UpdateTaintedBucketSyncInfo(bucketName, DateTime.Now.Ticks); //this update the timestamp and clear the taint info of the bucket | ||||
|                 string sogxml = SceneObjectSerializer.ToXml2Format(sog); | ||||
|                 SymmetricSyncMessage syncMsg = new SymmetricSyncMessage(SymmetricSyncMessage.MsgType.UpdatedObject, sogxml); | ||||
|                 m_log.DebugFormat("{0}: GeneralBucketSender for {1}", LogHeader, sog.UUID); | ||||
|                 SendObjectUpdateToRelevantSyncConnectors(sog, syncMsg); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         private void PrimUpdatesPhysicsBucketSender(string bucketName, List<SceneObjectPart> primUpdates) | ||||
|         { | ||||
|             foreach (SceneObjectPart updatedPart in primUpdates) | ||||
|             { | ||||
|                 updatedPart.UpdateTaintedBucketSyncInfo(bucketName, DateTime.Now.Ticks); | ||||
| 
 | ||||
|                 Physics.Manager.PhysicsActor pa = updatedPart.PhysActor; | ||||
|                 if (pa == null) | ||||
|                     return; | ||||
| 
 | ||||
|                 OSDMap data = new OSDMap(); | ||||
| 
 | ||||
|                 // data["UUID"] = OSD.FromUUID(updatedPart.UUID); | ||||
|                 data["UUID"] = OSD.FromUUID(pa.UUID); | ||||
|                 data["Bucket"] = OSD.FromString(bucketName); | ||||
|                  | ||||
|                 data["GroupPosition"] = OSD.FromVector3(updatedPart.GroupPosition); | ||||
|                 data["OffsetPosition"] = OSD.FromVector3(updatedPart.OffsetPosition); | ||||
|                 data["Scale"] = OSD.FromVector3(updatedPart.Scale); | ||||
|                 data["AngularVelocity"] = OSD.FromVector3(updatedPart.AngularVelocity); | ||||
|                 data["RotationOffset"] = OSD.FromQuaternion(updatedPart.RotationOffset); | ||||
|                 data["Size"] = OSD.FromVector3(pa.Size); | ||||
|                 data["Position"] = OSD.FromVector3(pa.Position); | ||||
|                 data["Force"] = OSD.FromVector3(pa.Force); | ||||
|                 data["Velocity"] = OSD.FromVector3(pa.Velocity); | ||||
|                 data["RotationalVelocity"] = OSD.FromVector3(pa.RotationalVelocity); | ||||
|                 data["PA_Acceleration"] = OSD.FromVector3(pa.Acceleration); | ||||
|                 data["Torque"] = OSD.FromVector3(pa.Torque); | ||||
|                 data["Orientation"] = OSD.FromQuaternion(pa.Orientation); | ||||
|                 data["IsPhysical"] = OSD.FromBoolean(pa.IsPhysical); | ||||
|                 data["Flying"] = OSD.FromBoolean(pa.Flying); | ||||
|                 data["Kinematic"] = OSD.FromBoolean(pa.Kinematic); | ||||
|                 data["Buoyancy"] = OSD.FromReal(pa.Buoyancy); | ||||
|                 data["CollidingGround"] = OSD.FromBoolean(pa.CollidingGround); | ||||
|                 data["IsColliding"] = OSD.FromBoolean(pa.IsColliding); | ||||
| 
 | ||||
|                 data["LastUpdateTimeStamp"] = OSD.FromLong(updatedPart.BucketSyncInfoList[bucketName].LastUpdateTimeStamp); | ||||
|                 data["LastUpdateActorID"] = OSD.FromString(updatedPart.BucketSyncInfoList[bucketName].LastUpdateActorID); | ||||
| 
 | ||||
|                 SymmetricSyncMessage syncMsg = new SymmetricSyncMessage(SymmetricSyncMessage.MsgType.UpdatedBucketProperties, OSDParser.SerializeJsonString(data)); | ||||
|                 m_log.DebugFormat("{0}: PhysBucketSender for {1}, pos={2}", LogHeader, updatedPart.UUID.ToString(), pa.Position.ToString()); | ||||
|                 SendObjectUpdateToRelevantSyncConnectors(updatedPart, syncMsg); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         //If nothing configured in the config file, this is the default settings for grouping properties into different bucket | ||||
|         private void PopulatePropertyBuketMapByDefault() | ||||
|         { | ||||
|             //by default, there are two property buckets: the "General" bucket and the "Physics" bucket. | ||||
|             string generalBucketName = "General"; | ||||
|             string physicsBucketName = "Physics"; | ||||
|             m_propertyBucketNames.Add(generalBucketName); | ||||
|             m_propertyBucketNames.Add(physicsBucketName); | ||||
|             m_maxNumOfPropertyBuckets = m_propertyBucketNames.Count; | ||||
| 
 | ||||
|             //Linking each bucket with the sender function that serializes the properties in the bucket and send out sync message | ||||
|             m_primUpdatesPerBucketSender.Add("General", PrimUpdatesGeneralBucketSender); | ||||
|             m_primUpdatesPerBucketSender.Add("Physics", PrimUpdatesPhysicsBucketSender); | ||||
| 
 | ||||
|             //Mapping properties to buckets. | ||||
|             foreach (SceneObjectPartProperties property in Enum.GetValues(typeof(SceneObjectPartProperties))) | ||||
|             { | ||||
|                 switch (property) | ||||
|                 { | ||||
|                     case SceneObjectPartProperties.GroupPosition: | ||||
|                     case SceneObjectPartProperties.OffsetPosition: | ||||
|                     case SceneObjectPartProperties.Scale: | ||||
|                     case SceneObjectPartProperties.AngularVelocity: | ||||
|                     case SceneObjectPartProperties.RotationOffset: | ||||
|                     case SceneObjectPartProperties.Size: | ||||
|                     case SceneObjectPartProperties.Position: | ||||
|                     case SceneObjectPartProperties.Force: | ||||
|                     case SceneObjectPartProperties.Velocity: | ||||
|                     case SceneObjectPartProperties.RotationalVelocity: | ||||
|                     case SceneObjectPartProperties.PA_Acceleration: | ||||
|                     case SceneObjectPartProperties.Torque: | ||||
|                     case SceneObjectPartProperties.Orientation: | ||||
|                     case SceneObjectPartProperties.IsPhysical: | ||||
|                     case SceneObjectPartProperties.Flying: | ||||
|                     case SceneObjectPartProperties.Kinematic: | ||||
|                     case SceneObjectPartProperties.Buoyancy: | ||||
|                     case SceneObjectPartProperties.IsCollidingGround: | ||||
|                     case SceneObjectPartProperties.IsColliding: | ||||
|                         m_primPropertyBucketMap.Add(property, physicsBucketName); | ||||
|                         break; | ||||
|                     default: | ||||
|                         //all other properties belong to the "General" bucket. | ||||
|                         m_primPropertyBucketMap.Add(property, generalBucketName); | ||||
|                         break; | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             //create different lists to keep track which SOP has what properties updated (which bucket of properties) | ||||
|             foreach (string bucketName in m_propertyBucketNames) | ||||
|             { | ||||
|                 m_primUpdates.Add(bucketName, new Dictionary<UUID, SceneObjectPart>()); | ||||
|                 m_primUpdateLocks.Add(bucketName, new Object()); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         private bool IsSyncingWithOtherActors() | ||||
|         { | ||||
|             return (m_syncConnectors.Count > 0); | ||||
|         } | ||||
| 
 | ||||
|         public void QueueSceneObjectPartForUpdate(SceneObjectPart part) | ||||
|         { | ||||
|              | ||||
|  | @ -385,7 +232,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | |||
|             // Existing value of 1 indicates that updates are currently being sent so skip updates this pass | ||||
|             if (Interlocked.Exchange(ref m_sendingUpdates, 1) == 1) | ||||
|             { | ||||
|                 m_log.WarnFormat("[REGION SYNC MODULE] SendUpdates(): An update thread is already running."); | ||||
|                 m_log.DebugFormat("[REGION SYNC MODULE] SendUpdates(): An update thread is already running."); | ||||
|                 return; | ||||
|             } | ||||
| 
 | ||||
|  | @ -812,12 +659,154 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | |||
| 
 | ||||
|         //Timers for periodically status report has not been implemented yet. | ||||
|         private System.Timers.Timer m_statsTimer = new System.Timers.Timer(1000); | ||||
| 
 | ||||
|         private RegionSyncListener m_localSyncListener = null; | ||||
|         private bool m_synced = false; | ||||
| 
 | ||||
|         // Lock is used to synchronize access to the update status and update queues | ||||
|         //private object m_updateSceneObjectPartLock = new object(); | ||||
|         //private Dictionary<UUID, SceneObjectGroup> m_primUpdates = new Dictionary<UUID, SceneObjectGroup>(); | ||||
|         private Dictionary<string, Object> m_primUpdateLocks = new Dictionary<string, object>(); | ||||
|         private Dictionary<string, Dictionary<UUID, SceneObjectPart>> m_primUpdates = new Dictionary<string, Dictionary<UUID, SceneObjectPart>>(); | ||||
| 
 | ||||
|         private delegate void PrimUpdatePerBucketSender(string bucketName, List<SceneObjectPart> primUpdates); | ||||
|         private Dictionary<string, PrimUpdatePerBucketSender> m_primUpdatesPerBucketSender = new Dictionary<string, PrimUpdatePerBucketSender>(); | ||||
| 
 | ||||
|         private object m_updateScenePresenceLock = new object(); | ||||
|         private Dictionary<UUID, ScenePresence> m_presenceUpdates = new Dictionary<UUID, ScenePresence>(); | ||||
|         private int m_sendingUpdates = 0; | ||||
| 
 | ||||
|         private int m_maxNumOfPropertyBuckets; | ||||
| 
 | ||||
|         private void StatsTimerElapsed(object source, System.Timers.ElapsedEventArgs e) | ||||
|         { | ||||
|             //TO BE IMPLEMENTED | ||||
|             m_log.Warn("[REGION SYNC MODULE]: StatsTimerElapsed -- NOT yet implemented."); | ||||
|         } | ||||
| 
 | ||||
|         //Read in configuration for which property-bucket each property belongs to, and the description of each bucket | ||||
|         private void PopulatePropertyBucketMap(IConfig config) | ||||
|         { | ||||
|             //We start with a default bucket map. Will add the code to read in configuration from config files later. | ||||
|             PopulatePropertyBuketMapByDefault(); | ||||
| 
 | ||||
|             //Pass the bucket information to SceneObjectPart. | ||||
|             SceneObjectPart.InitializePropertyBucketInfo(m_primPropertyBucketMap, m_propertyBucketNames, m_actorID); | ||||
|         } | ||||
| 
 | ||||
|         //As of current version, we still use the xml serialization as most of SOP's properties are in the General bucket. | ||||
|         //Going forward, we may serialize the properties differently, e.g. using OSDMap  | ||||
|         private void PrimUpdatesGeneralBucketSender(string bucketName, List<SceneObjectPart> primUpdates) | ||||
|         { | ||||
|             Dictionary<UUID, SceneObjectGroup> updatedObjects = new Dictionary<UUID, SceneObjectGroup>(); | ||||
|             foreach (SceneObjectPart part in primUpdates) | ||||
|             { | ||||
|                 updatedObjects[part.ParentGroup.UUID] = part.ParentGroup; | ||||
|             } | ||||
|             foreach (SceneObjectGroup sog in updatedObjects.Values) | ||||
|             { | ||||
|                 sog.UpdateTaintedBucketSyncInfo(bucketName, DateTime.Now.Ticks); //this update the timestamp and clear the taint info of the bucket | ||||
|                 string sogxml = SceneObjectSerializer.ToXml2Format(sog); | ||||
|                 SymmetricSyncMessage syncMsg = new SymmetricSyncMessage(SymmetricSyncMessage.MsgType.UpdatedObject, sogxml); | ||||
|                 SendObjectUpdateToRelevantSyncConnectors(sog, syncMsg); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         private void PrimUpdatesPhysicsBucketSender(string bucketName, List<SceneObjectPart> primUpdates) | ||||
|         { | ||||
|             foreach (SceneObjectPart updatedPart in primUpdates) | ||||
|             { | ||||
|                 updatedPart.UpdateTaintedBucketSyncInfo(bucketName, DateTime.Now.Ticks); | ||||
| 
 | ||||
|                 OSDMap data = new OSDMap(); | ||||
| 
 | ||||
|                 data["UUID"] = OSD.FromUUID(updatedPart.UUID); | ||||
|                 data["Bucket"] = OSD.FromString(bucketName); | ||||
| 
 | ||||
|                 data["GroupPosition"] = OSD.FromVector3(updatedPart.GroupPosition); | ||||
|                 data["OffsetPosition"] = OSD.FromVector3(updatedPart.OffsetPosition); | ||||
|                 data["RotationOffset"] = OSD.FromQuaternion(updatedPart.RotationOffset); | ||||
|                 data["Velocity"] = OSD.FromVector3(updatedPart.Velocity); | ||||
|                 data["Scale"] = OSD.FromVector3(updatedPart.Scale); | ||||
|                 //Other properties to be included | ||||
|                 /* | ||||
|                 "Position": | ||||
|                 "Size": | ||||
|                 "Force": | ||||
|                 "RotationalVelocity": | ||||
|                 "PA_Acceleration": | ||||
|                 "Torque": | ||||
|                 "Orientation": | ||||
|                 "IsPhysical": | ||||
|                 "Flying": | ||||
|                 "Buoyancy": | ||||
|                  * */ | ||||
| 
 | ||||
|                 data["LastUpdateTimeStamp"] = OSD.FromLong(updatedPart.BucketSyncInfoList[bucketName].LastUpdateTimeStamp); | ||||
|                 data["LastUpdateActorID"] = OSD.FromString(updatedPart.BucketSyncInfoList[bucketName].LastUpdateActorID); | ||||
| 
 | ||||
|                 SymmetricSyncMessage syncMsg = new SymmetricSyncMessage(SymmetricSyncMessage.MsgType.UpdatedBucketProperties, OSDParser.SerializeJsonString(data)); | ||||
|                 SendObjectUpdateToRelevantSyncConnectors(updatedPart, syncMsg); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         //If nothing configured in the config file, this is the default settings for grouping properties into different bucket | ||||
|         private void PopulatePropertyBuketMapByDefault() | ||||
|         { | ||||
|             //by default, there are two property buckets: the "General" bucket and the "Physics" bucket. | ||||
|             string generalBucketName = "General"; | ||||
|             string physicsBucketName = "Physics"; | ||||
|             m_propertyBucketNames.Add(generalBucketName); | ||||
|             m_propertyBucketNames.Add(physicsBucketName); | ||||
|             m_maxNumOfPropertyBuckets = m_propertyBucketNames.Count; | ||||
| 
 | ||||
|             //Linking each bucket with the sender function that serializes the properties in the bucket and send out sync message | ||||
|             m_primUpdatesPerBucketSender.Add("General", PrimUpdatesGeneralBucketSender); | ||||
|             m_primUpdatesPerBucketSender.Add("Physics", PrimUpdatesPhysicsBucketSender); | ||||
| 
 | ||||
|             //Mapping properties to buckets. | ||||
|             foreach (SceneObjectPartProperties property in Enum.GetValues(typeof(SceneObjectPartProperties))) | ||||
|             { | ||||
|                 switch (property) | ||||
|                 { | ||||
|                     case SceneObjectPartProperties.GroupPosition: | ||||
|                     case SceneObjectPartProperties.OffsetPosition: | ||||
|                     case SceneObjectPartProperties.Scale: | ||||
|                     case SceneObjectPartProperties.Velocity: | ||||
|                     case SceneObjectPartProperties.AngularVelocity: | ||||
|                     case SceneObjectPartProperties.RotationOffset: | ||||
|                     case SceneObjectPartProperties.Position: | ||||
|                     case SceneObjectPartProperties.Size: | ||||
|                     case SceneObjectPartProperties.Force: | ||||
|                     case SceneObjectPartProperties.RotationalVelocity: | ||||
|                     case SceneObjectPartProperties.PA_Acceleration: | ||||
|                     case SceneObjectPartProperties.Torque: | ||||
|                     case SceneObjectPartProperties.Orientation: | ||||
|                     case SceneObjectPartProperties.IsPhysical: | ||||
|                     case SceneObjectPartProperties.Flying: | ||||
|                     case SceneObjectPartProperties.Buoyancy: | ||||
|                         m_primPropertyBucketMap.Add(property, physicsBucketName); | ||||
|                         break; | ||||
|                     default: | ||||
|                         //all other properties belong to the "General" bucket. | ||||
|                         m_primPropertyBucketMap.Add(property, generalBucketName); | ||||
|                         break; | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             //create different lists to keep track which SOP has what properties updated (which bucket of properties) | ||||
|             foreach (string bucketName in m_propertyBucketNames) | ||||
|             { | ||||
|                 m_primUpdates.Add(bucketName, new Dictionary<UUID, SceneObjectPart>()); | ||||
|                 m_primUpdateLocks.Add(bucketName, new Object()); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         private bool IsSyncingWithOtherActors() | ||||
|         { | ||||
|             return (m_syncConnectors.Count > 0); | ||||
|         } | ||||
| 
 | ||||
|         //Object updates are sent by enqueuing into each connector's outQueue. | ||||
|         private void SendObjectUpdateToRelevantSyncConnectors(SceneObjectGroup sog, SymmetricSyncMessage syncMsg) | ||||
|         { | ||||
|  | @ -2409,4 +2398,4 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | |||
| 
 | ||||
|     } | ||||
|   | ||||
| } | ||||
| } | ||||
|  |  | |||
|  | @ -434,6 +434,12 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
|         } | ||||
| 
 | ||||
|         #region SYNC SERVER | ||||
|         /// <summary> | ||||
|         /// Register the SyncServerID, address and port for a particular endpoint. | ||||
|         /// The internal address and port are not registered. | ||||
|         /// </summary> | ||||
|         /// <param name="gei"></param> | ||||
|         /// <returns>'true' if the registration was successful and 'false' otherwise</returns> | ||||
|         public virtual bool RegisterEndpoint(GridEndpointInfo gei) | ||||
|         { | ||||
|             NameValueCollection requestArgs = new NameValueCollection | ||||
|  | @ -456,6 +462,42 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
|             return false; | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Lookup a particular endpoint given the SyncServerID of the endpoint. | ||||
|         /// </summary> | ||||
|         /// <param name="syncServerID"></param> | ||||
|         /// <returns>endpoint information or 'null' if not found</returns> | ||||
|         public virtual GridEndpointInfo LookupEndpoint(string syncServerID) | ||||
|         { | ||||
|             NameValueCollection requestArgs = new NameValueCollection | ||||
|             { | ||||
|                 { "RequestMethod", "GetEndpoint" }, | ||||
|                 { "SyncServerID", syncServerID }, | ||||
|             }; | ||||
| 
 | ||||
|             OSDMap response = WebUtil.PostToService(m_ServerURI, requestArgs); | ||||
|             if (response["Success"].AsBoolean()) | ||||
|             { | ||||
|                 GridEndpointInfo gai = new GridEndpointInfo(); | ||||
|                 gai.syncServerID = response["SyncServerID"].AsString(); | ||||
|                 gai.address = response["Address"].AsString(); | ||||
|                 gai.port = (uint)response["Port"].AsInteger(); | ||||
|                 gai.internalAddress = response["InternalAddress"].AsString(); | ||||
|                 gai.internalPort = (uint)response["InternalPort"].AsInteger(); | ||||
|                 return gai; | ||||
|             } | ||||
|             m_log.ErrorFormat("{0}: Lookup of endpoint failed: {1}", | ||||
|                         "[SIMIAN GRID CONNECTOR]", response["Message"]); | ||||
|             return null; | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Register an actor association with a SyncServer. | ||||
|         /// </summary> | ||||
|         /// <param name="actorID">unique identification of the actor (actor's "name")</param> | ||||
|         /// <param name="actorType">actor type identification string</param> | ||||
|         /// <param name="syncServerID">sync server identification</param> | ||||
|         /// <returns>'true' if registration successful. 'false' otherwise</returns> | ||||
|         public virtual bool RegisterActor(string actorID, string actorType, string syncServerID) | ||||
|         { | ||||
|             NameValueCollection requestArgs = new NameValueCollection | ||||
|  | @ -479,6 +521,13 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
|             return false; | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Register a quark on a SyncServer. | ||||
|         /// </summary> | ||||
|         /// <param name="syncServerID"></param> | ||||
|         /// <param name="locX"></param> | ||||
|         /// <param name="locY"></param> | ||||
|         /// <returns>'true' if registration successful. 'false' otherwise</returns> | ||||
|         public virtual bool RegisterQuark(string syncServerID, uint locX, uint locY) | ||||
|         { | ||||
|             NameValueCollection requestArgs = new NameValueCollection | ||||
|  | @ -501,6 +550,12 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
|             return false; | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Given a quark location, return all the endpoints associated with that quark; | ||||
|         /// </summary> | ||||
|         /// <param name="locX">quark home X location</param> | ||||
|         /// <param name="locY">quark home Y location</param> | ||||
|         /// <returns>list of endpoints and actor types associated with the quark</returns> | ||||
|         public virtual List<GridEndpointInfo> LookupQuark(uint locX, uint locY) | ||||
|         { | ||||
|             NameValueCollection requestArgs = new NameValueCollection | ||||
|  | @ -512,6 +567,15 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
|             return LookupQuark(requestArgs); | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Given a quark location and an actor type, return all endpoints associated with | ||||
|         /// the quark that have that actor. This is equivilent to the previous request but | ||||
|         /// filtered by the actor type. | ||||
|         /// </summary> | ||||
|         /// <param name="locX">quark home X location</param> | ||||
|         /// <param name="locY">quark home Y location</param> | ||||
|         /// <param name="actorType">actor definition string</param> | ||||
|         /// <returns>list of endpoints having that actor and the quark</returns> | ||||
|         public virtual List<GridEndpointInfo> LookupQuark(uint locX, uint locY, string actorType) | ||||
|         { | ||||
|             NameValueCollection requestArgs = new NameValueCollection | ||||
|  |  | |||
|  | @ -203,7 +203,11 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
|         public PresenceInfo GetAgent(UUID sessionID) | ||||
|         { | ||||
| //            m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Requesting session data for agent with sessionID " + sessionID); | ||||
| 
 | ||||
|             if(sessionID == UUID.Zero) | ||||
|             { | ||||
|                 m_log.Debug("[SIMIAN PRESENCE CONNECTOR]: GetAgent called with UUID.Zero!"); | ||||
|                 return null; | ||||
|             } | ||||
|             NameValueCollection requestArgs = new NameValueCollection | ||||
|             { | ||||
|                 { "RequestMethod", "GetSession" }, | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Robert Adams
						Robert Adams