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)
|
||||
{
|
||||
|
|
|
@ -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