aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Communications/OGS1
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Communications/OGS1')
-rw-r--r--OpenSim/Region/Communications/OGS1/OGS1GridServices.cs64
-rw-r--r--OpenSim/Region/Communications/OGS1/OGS1InterSimComms.cs28
2 files changed, 90 insertions, 2 deletions
diff --git a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
index 2ca9022..683fbfb 100644
--- a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
+++ b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
@@ -491,7 +491,8 @@ namespace OpenSim.Region.Communications.OGS1
491 InterRegionSingleton.Instance.OnPrimGroupNear += TriggerExpectPrimCrossing; 491 InterRegionSingleton.Instance.OnPrimGroupNear += TriggerExpectPrimCrossing;
492 InterRegionSingleton.Instance.OnRegionUp += TriggerRegionUp; 492 InterRegionSingleton.Instance.OnRegionUp += TriggerRegionUp;
493 InterRegionSingleton.Instance.OnChildAgentUpdate += TriggerChildAgentUpdate; 493 InterRegionSingleton.Instance.OnChildAgentUpdate += TriggerChildAgentUpdate;
494 //InterRegionSingleton.Instance.OnRegionUp += RegionUp; 494 InterRegionSingleton.Instance.OnTellRegionToCloseChildConnection += TriggerTellRegionToCloseChildConnection;
495
495 } 496 }
496 497
497 #region Methods called by regions in this instance 498 #region Methods called by regions in this instance
@@ -959,8 +960,53 @@ namespace OpenSim.Region.Communications.OGS1
959 } 960 }
960 } 961 }
961 962
962 public void TellRegionToCloseChildConnection(ulong regionHandle, LLUUID agentID) 963 public bool TellRegionToCloseChildConnection(ulong regionHandle, LLUUID agentID)
963 { 964 {
965 RegionInfo regInfo = null;
966 try
967 {
968 if (m_localBackend.TriggerTellRegionToCloseChildConnection(regionHandle, agentID))
969 {
970 return true;
971 }
972
973 regInfo = RequestNeighbourInfo(regionHandle);
974 if (regInfo != null)
975 {
976 bool retValue = false;
977 OGS1InterRegionRemoting remObject = (OGS1InterRegionRemoting)Activator.GetObject(
978 typeof(OGS1InterRegionRemoting),
979 "tcp://" + regInfo.RemotingAddress +
980 ":" + regInfo.RemotingPort +
981 "/InterRegions");
982 if (remObject != null)
983 {
984 retValue =
985 remObject.TellRegionToCloseChildConnection(regionHandle, agentID.UUID);
986 }
987 else
988 {
989 Console.WriteLine("remoting object not found");
990 }
991 remObject = null;
992
993 return true;
994 }
995 //TODO need to see if we know about where this region is and use .net remoting
996 // to inform it.
997 return false;
998 }
999 catch (RemotingException e)
1000 {
1001 MainLog.Instance.Warn("Remoting Error: Unable to connect to adjacent region to tell it to close child agents: " + regInfo.RegionName +
1002 " " + regInfo.RegionLocX + "," + regInfo.RegionLocY);
1003 //MainLog.Instance.Debug(e.ToString());
1004 return false;
1005 }
1006 catch
1007 {
1008 return false;
1009 }
964 } 1010 }
965 1011
966 public bool AcknowledgeAgentCrossed(ulong regionHandle, LLUUID agentId) 1012 public bool AcknowledgeAgentCrossed(ulong regionHandle, LLUUID agentId)
@@ -1086,6 +1132,20 @@ namespace OpenSim.Region.Communications.OGS1
1086 } 1132 }
1087 } 1133 }
1088 1134
1135 public bool TriggerTellRegionToCloseChildConnection(ulong regionHandle, LLUUID agentID)
1136 {
1137 try
1138 {
1139 return m_localBackend.TriggerTellRegionToCloseChildConnection(regionHandle, agentID);
1140 }
1141 catch (RemotingException)
1142 {
1143 MainLog.Instance.Verbose("INTERREGION", "Remoting Error: Unable to connect to neighbour to tell it to close a child connection");
1144 return false;
1145 }
1146
1147 }
1148
1089 #endregion 1149 #endregion
1090 1150
1091 #endregion 1151 #endregion
diff --git a/OpenSim/Region/Communications/OGS1/OGS1InterSimComms.cs b/OpenSim/Region/Communications/OGS1/OGS1InterSimComms.cs
index a0da07e..b39e0b7 100644
--- a/OpenSim/Region/Communications/OGS1/OGS1InterSimComms.cs
+++ b/OpenSim/Region/Communications/OGS1/OGS1InterSimComms.cs
@@ -45,6 +45,8 @@ namespace OpenSim.Region.Communications.OGS1
45 45
46 public delegate bool ChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate childUpdate); 46 public delegate bool ChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate childUpdate);
47 47
48 public delegate bool TellRegionToCloseChildConnection(ulong regionHandle, LLUUID agentID);
49
48 public sealed class InterRegionSingleton 50 public sealed class InterRegionSingleton
49 { 51 {
50 private static readonly InterRegionSingleton instance = new InterRegionSingleton(); 52 private static readonly InterRegionSingleton instance = new InterRegionSingleton();
@@ -55,6 +57,8 @@ namespace OpenSim.Region.Communications.OGS1
55 public event PrimGroupArrival OnPrimGroupArrival; 57 public event PrimGroupArrival OnPrimGroupArrival;
56 public event RegionUp OnRegionUp; 58 public event RegionUp OnRegionUp;
57 public event ChildAgentUpdate OnChildAgentUpdate; 59 public event ChildAgentUpdate OnChildAgentUpdate;
60 public event TellRegionToCloseChildConnection OnTellRegionToCloseChildConnection;
61
58 62
59 63
60 static InterRegionSingleton() 64 static InterRegionSingleton()
@@ -123,6 +127,16 @@ namespace OpenSim.Region.Communications.OGS1
123 } 127 }
124 return false; 128 return false;
125 } 129 }
130
131 public bool TellRegionToCloseChildConnection(ulong regionHandle, LLUUID agentID)
132 {
133 if (OnTellRegionToCloseChildConnection != null)
134 {
135
136 return OnTellRegionToCloseChildConnection(regionHandle, agentID);
137 }
138 return false;
139 }
126 } 140 }
127 141
128 public class OGS1InterRegionRemoting : MarshalByRefObject 142 public class OGS1InterRegionRemoting : MarshalByRefObject
@@ -171,6 +185,7 @@ namespace OpenSim.Region.Communications.OGS1
171 } 185 }
172 } 186 }
173 187
188
174 public bool ExpectAvatarCrossing(ulong regionHandle, Guid agentID, sLLVector3 position, bool isFlying) 189 public bool ExpectAvatarCrossing(ulong regionHandle, Guid agentID, sLLVector3 position, bool isFlying)
175 { 190 {
176 try 191 try
@@ -215,5 +230,18 @@ namespace OpenSim.Region.Communications.OGS1
215 return false; 230 return false;
216 } 231 }
217 } 232 }
233 public bool TellRegionToCloseChildConnection(ulong regionHandle, Guid agentID)
234 {
235 try
236 {
237 return InterRegionSingleton.Instance.TellRegionToCloseChildConnection(regionHandle, new LLUUID(agentID));
238
239 }
240 catch (RemotingException)
241 {
242 OpenSim.Framework.Console.MainLog.Instance.Verbose("INTERREGION", "Remoting Error: Unable to connect to remote region: " + regionHandle.ToString());
243 return false;
244 }
245 }
218 } 246 }
219} \ No newline at end of file 247} \ No newline at end of file