* Added some inter-region comms glue for allowing sims to chat amongst themsevles about an agent behind the agent's back.
* Will be using this glue Tomorrow/today to tell other regions what the agent's draw distance is and what region they're actually in so the region can make decisions on what prim to send, if any.afrisby
parent
65b9fa9a5f
commit
f2b175ef08
|
@ -0,0 +1,23 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace OpenSim.Framework
|
||||
{
|
||||
[Serializable]
|
||||
public class ChildAgentDataUpdate
|
||||
{
|
||||
public ChildAgentDataUpdate()
|
||||
{
|
||||
|
||||
}
|
||||
public sLLVector3 Position;
|
||||
public ulong regionHandle;
|
||||
public float drawdistance;
|
||||
public sLLVector3 cameraPosition;
|
||||
public sLLVector3 Velocity;
|
||||
public float AVHeight;
|
||||
public Guid AgentID;
|
||||
public float godlevel;
|
||||
}
|
||||
}
|
|
@ -36,6 +36,7 @@ namespace OpenSim.Framework.Communications
|
|||
bool InformRegionOfChildAgent(ulong regionHandle, AgentCircuitData agentData);
|
||||
bool InformRegionOfPrimCrossing(ulong regionHandle, LLUUID primID, string objData);
|
||||
bool RegionUp(SearializableRegionInfo region, ulong regionhandle);
|
||||
bool ChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData);
|
||||
|
||||
bool ExpectAvatarCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isFlying);
|
||||
bool ExpectPrimCrossing(ulong regionHandle, LLUUID primID, LLVector3 position, bool isFlying);
|
||||
|
|
|
@ -48,6 +48,8 @@ namespace OpenSim.Framework
|
|||
|
||||
public delegate bool RegionUp(RegionInfo region);
|
||||
|
||||
public delegate bool ChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData);
|
||||
|
||||
|
||||
|
||||
public interface IRegionCommsListener
|
||||
|
@ -62,6 +64,7 @@ namespace OpenSim.Framework
|
|||
event UpdateNeighbours OnNeighboursUpdate;
|
||||
event CloseAgentConnection OnCloseAgentConnection;
|
||||
event RegionUp OnRegionUp;
|
||||
event ChildAgentUpdate OnChildAgentUpdate;
|
||||
|
||||
}
|
||||
}
|
|
@ -43,6 +43,7 @@ namespace OpenSim.Framework
|
|||
public event AcknowledgePrimCross OnAcknowledgePrimCrossed;
|
||||
public event CloseAgentConnection OnCloseAgentConnection;
|
||||
public event RegionUp OnRegionUp;
|
||||
public event ChildAgentUpdate OnChildAgentUpdate;
|
||||
public string debugRegionName="";
|
||||
|
||||
|
||||
|
@ -81,6 +82,16 @@ namespace OpenSim.Framework
|
|||
return false;
|
||||
}
|
||||
|
||||
public virtual bool TriggerChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData)
|
||||
{
|
||||
if (OnChildAgentUpdate != null)
|
||||
{
|
||||
OnChildAgentUpdate(regionHandle, cAgentData);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public virtual bool TriggerExpectAvatarCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position,
|
||||
bool isFlying)
|
||||
{
|
||||
|
|
|
@ -205,6 +205,19 @@ namespace OpenSim.Region.Communications.Local
|
|||
return false;
|
||||
}
|
||||
|
||||
public virtual bool ChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData)
|
||||
{
|
||||
if (m_regionListeners.ContainsKey(regionHandle))
|
||||
{
|
||||
// Console.WriteLine("CommsManager- Informing a region to expect child agent");
|
||||
m_regionListeners[regionHandle].TriggerChildAgentUpdate(regionHandle, cAgentData);
|
||||
//MainLog.Instance.Verbose("INTER", rdebugRegionName + ":Local BackEnd: Got Listener trigginering local event: " + agentData.firstname + " " + agentData.lastname);
|
||||
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool TriggerRegionUp(RegionInfo region, ulong regionhandle)
|
||||
{
|
||||
if (m_regionListeners.ContainsKey(regionhandle))
|
||||
|
@ -215,6 +228,15 @@ namespace OpenSim.Region.Communications.Local
|
|||
return false;
|
||||
}
|
||||
|
||||
public bool TriggerChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData)
|
||||
{
|
||||
if (m_regionListeners.ContainsKey(regionHandle))
|
||||
{
|
||||
return m_regionListeners[regionHandle].TriggerChildAgentUpdate(regionHandle,cAgentData);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// </summary>
|
||||
/// <param name="regionHandle"></param>
|
||||
|
|
|
@ -462,12 +462,83 @@ namespace OpenSim.Region.Communications.OGS1
|
|||
InterRegionSingleton.Instance.OnPrimGroupArrival += IncomingPrim;
|
||||
InterRegionSingleton.Instance.OnPrimGroupNear += TriggerExpectPrimCrossing;
|
||||
InterRegionSingleton.Instance.OnRegionUp += TriggerRegionUp;
|
||||
InterRegionSingleton.Instance.OnChildAgentUpdate += TriggerChildAgentUpdate;
|
||||
//InterRegionSingleton.Instance.OnRegionUp += RegionUp;
|
||||
}
|
||||
|
||||
#region Methods called by regions in this instance
|
||||
|
||||
public bool ChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData)
|
||||
{
|
||||
RegionInfo regInfo = null;
|
||||
try
|
||||
{
|
||||
if (m_localBackend.ChildAgentUpdate(regionHandle, cAgentData))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
regInfo = RequestNeighbourInfo(regionHandle);
|
||||
if (regInfo != null)
|
||||
{
|
||||
//don't want to be creating a new link to the remote instance every time like we are here
|
||||
bool retValue = false;
|
||||
|
||||
|
||||
OGS1InterRegionRemoting remObject = (OGS1InterRegionRemoting)Activator.GetObject(
|
||||
typeof(OGS1InterRegionRemoting),
|
||||
"tcp://" + regInfo.RemotingAddress +
|
||||
":" + regInfo.RemotingPort +
|
||||
"/InterRegions");
|
||||
|
||||
if (remObject != null)
|
||||
{
|
||||
retValue = remObject.ChildAgentUpdate(regionHandle, cAgentData);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("remoting object not found");
|
||||
}
|
||||
remObject = null;
|
||||
MainLog.Instance.Verbose("INTER", gdebugRegionName + ": OGS1 tried to Update Child Agent data on outside region and got " + retValue.ToString());
|
||||
|
||||
return retValue;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
catch (RemotingException e)
|
||||
{
|
||||
MainLog.Instance.Warn("Remoting Error: Unable to connect to adjacent region: " + regInfo.RegionName + " " + regInfo.RegionLocX + "," + regInfo.RegionLocY);
|
||||
MainLog.Instance.Debug(e.ToString());
|
||||
return false;
|
||||
}
|
||||
catch (SocketException e)
|
||||
{
|
||||
MainLog.Instance.Warn("Socket Error: Unable to connect to adjacent region: " + regInfo.RegionName + " " + regInfo.RegionLocX + "," + regInfo.RegionLocY);
|
||||
MainLog.Instance.Debug(e.ToString());
|
||||
return false;
|
||||
}
|
||||
catch (InvalidCredentialException e)
|
||||
{
|
||||
MainLog.Instance.Warn("Invalid Credentials: Unable to connect to adjacent region: " + regInfo.RegionName + " " + regInfo.RegionLocX + "," + regInfo.RegionLocY);
|
||||
MainLog.Instance.Debug(e.ToString());
|
||||
return false;
|
||||
}
|
||||
catch (AuthenticationException e)
|
||||
{
|
||||
MainLog.Instance.Warn("Authentication exception: Unable to connect to adjacent region: " + regInfo.RegionName + " " + regInfo.RegionLocX + "," + regInfo.RegionLocY);
|
||||
MainLog.Instance.Debug(e.ToString());
|
||||
return false;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
MainLog.Instance.Warn("Unknown exception: Unable to connect to adjacent region: " + regInfo.RegionName + " " + regInfo.RegionLocX + "," + regInfo.RegionLocY);
|
||||
MainLog.Instance.Debug(e.ToString());
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
|
@ -877,6 +948,21 @@ namespace OpenSim.Region.Communications.OGS1
|
|||
return false;
|
||||
}
|
||||
}
|
||||
public bool TriggerChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData)
|
||||
{
|
||||
MainLog.Instance.Verbose("INTER", "Incoming OGS1 Child Agent Data Update");
|
||||
|
||||
try
|
||||
{
|
||||
return m_localBackend.TriggerChildAgentUpdate(regionHandle, cAgentData);
|
||||
}
|
||||
catch (RemotingException e)
|
||||
{
|
||||
MainLog.Instance.Error("Remoting Error: Unable to connect to adjacent region.\n" + e.ToString());
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
|
|
|
@ -43,6 +43,8 @@ namespace OpenSim.Region.Communications.OGS1
|
|||
|
||||
public delegate bool RegionUp (SearializableRegionInfo region, ulong regionhandle);
|
||||
|
||||
public delegate bool ChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate childUpdate);
|
||||
|
||||
public sealed class InterRegionSingleton
|
||||
{
|
||||
private static readonly InterRegionSingleton instance = new InterRegionSingleton();
|
||||
|
@ -52,6 +54,7 @@ namespace OpenSim.Region.Communications.OGS1
|
|||
public event InformRegionPrimGroup OnPrimGroupNear;
|
||||
public event PrimGroupArrival OnPrimGroupArrival;
|
||||
public event RegionUp OnRegionUp;
|
||||
public event ChildAgentUpdate OnChildAgentUpdate;
|
||||
|
||||
|
||||
static InterRegionSingleton()
|
||||
|
@ -86,6 +89,15 @@ namespace OpenSim.Region.Communications.OGS1
|
|||
return false;
|
||||
}
|
||||
|
||||
public bool ChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentUpdate)
|
||||
{
|
||||
if (OnChildAgentUpdate != null)
|
||||
{
|
||||
return OnChildAgentUpdate(regionHandle, cAgentUpdate);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool ExpectAvatarCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isFlying)
|
||||
{
|
||||
if (OnArrival != null)
|
||||
|
@ -143,6 +155,20 @@ namespace OpenSim.Region.Communications.OGS1
|
|||
}
|
||||
}
|
||||
|
||||
public bool ChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData)
|
||||
{
|
||||
try
|
||||
{
|
||||
return InterRegionSingleton.Instance.ChildAgentUpdate(regionHandle,cAgentData);
|
||||
}
|
||||
catch (RemotingException e)
|
||||
{
|
||||
Console.WriteLine("Remoting Error: Unable to send Child agent update to remote region.\n" + e.ToString());
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public bool ExpectAvatarCrossing(ulong regionHandle, Guid agentID, sLLVector3 position, bool isFlying)
|
||||
{
|
||||
try
|
||||
|
|
Loading…
Reference in New Issue