diff options
author | Teravus Ovares | 2008-01-21 23:04:42 +0000 |
---|---|---|
committer | Teravus Ovares | 2008-01-21 23:04:42 +0000 |
commit | 3fe6b2280d0b335ef8d9f2b0dc3406a47e6c0b53 (patch) | |
tree | bb8cbf0b5918448c92f6b0f42fec5013450d7e25 /OpenSim/Region/Communications/OGS1/OGS1GridServices.cs | |
parent | Another attempt to squash the animation bug. Wish I could get this to fail at... (diff) | |
download | opensim-SC-3fe6b2280d0b335ef8d9f2b0dc3406a47e6c0b53.zip opensim-SC-3fe6b2280d0b335ef8d9f2b0dc3406a47e6c0b53.tar.gz opensim-SC-3fe6b2280d0b335ef8d9f2b0dc3406a47e6c0b53.tar.bz2 opensim-SC-3fe6b2280d0b335ef8d9f2b0dc3406a47e6c0b53.tar.xz |
* Shutting down child agents properly in neighbor regions.
Diffstat (limited to 'OpenSim/Region/Communications/OGS1/OGS1GridServices.cs')
-rw-r--r-- | OpenSim/Region/Communications/OGS1/OGS1GridServices.cs | 64 |
1 files changed, 62 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 |