aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Communications
diff options
context:
space:
mode:
authordiva2008-12-31 20:49:04 +0000
committerdiva2008-12-31 20:49:04 +0000
commit06803f182b82f3533be66eb3f073014c06576923 (patch)
treeea43ed0e0defc2f5921b9dac9b91359aba5b5b20 /OpenSim/Region/Communications
parentSlight optimisation: Don't check for duplication if we won't use the result a... (diff)
downloadopensim-SC-06803f182b82f3533be66eb3f073014c06576923.zip
opensim-SC-06803f182b82f3533be66eb3f073014c06576923.tar.gz
opensim-SC-06803f182b82f3533be66eb3f073014c06576923.tar.bz2
opensim-SC-06803f182b82f3533be66eb3f073014c06576923.tar.xz
Minor bug fix in HG home regions management, removing the use of m_knownRegions.Count for creating the local handler. Local handlers are now created using a random number generator.
Diffstat (limited to 'OpenSim/Region/Communications')
-rw-r--r--OpenSim/Region/Communications/Hypergrid/HGGridServices.cs23
1 files changed, 15 insertions, 8 deletions
diff --git a/OpenSim/Region/Communications/Hypergrid/HGGridServices.cs b/OpenSim/Region/Communications/Hypergrid/HGGridServices.cs
index fa29460..691cd4a 100644
--- a/OpenSim/Region/Communications/Hypergrid/HGGridServices.cs
+++ b/OpenSim/Region/Communications/Hypergrid/HGGridServices.cs
@@ -113,6 +113,8 @@ namespace OpenSim.Region.Communications.Hypergrid
113 set { m_userProfileCache = value; } 113 set { m_userProfileCache = value; }
114 } 114 }
115 115
116 private Random random;
117
116 /// <summary> 118 /// <summary>
117 /// Contructor. Adds "expect_hg_user" and "check" xmlrpc method handlers 119 /// Contructor. Adds "expect_hg_user" and "check" xmlrpc method handlers
118 /// </summary> 120 /// </summary>
@@ -125,6 +127,8 @@ namespace OpenSim.Region.Communications.Hypergrid
125 m_assetcache = asscache; 127 m_assetcache = asscache;
126 m_sceneman = sman; 128 m_sceneman = sman;
127 129
130 random = new Random();
131
128 httpServer.AddXmlRPCHandler("link_region", LinkRegionRequest); 132 httpServer.AddXmlRPCHandler("link_region", LinkRegionRequest);
129 httpServer.AddXmlRPCHandler("expect_hg_user", ExpectHGUser); 133 httpServer.AddXmlRPCHandler("expect_hg_user", ExpectHGUser);
130 134
@@ -243,7 +247,7 @@ namespace OpenSim.Region.Communications.Hypergrid
243 /// <returns></returns> 247 /// <returns></returns>
244 public virtual RegionInfo RequestNeighbourInfo(ulong regionHandle) 248 public virtual RegionInfo RequestNeighbourInfo(ulong regionHandle)
245 { 249 {
246 //Console.WriteLine("RequestNeighbourInfo for " + regionHandle); 250 //Console.WriteLine(" >> RequestNeighbourInfo for " + regionHandle);
247 foreach (RegionInfo info in m_hyperlinkRegions) 251 foreach (RegionInfo info in m_hyperlinkRegions)
248 { 252 {
249 //Console.WriteLine(" .. " + info.RegionHandle); 253 //Console.WriteLine(" .. " + info.RegionHandle);
@@ -254,7 +258,7 @@ namespace OpenSim.Region.Communications.Hypergrid
254 { 258 {
255 if (info.RegionHandle == regionHandle) 259 if (info.RegionHandle == regionHandle)
256 { 260 {
257 //Console.WriteLine("XXX------ Found known region " + info.RegionHandle); 261 //Console.WriteLine("XXX------ known region " + info.RegionHandle);
258 return info; 262 return info;
259 } 263 }
260 } 264 }
@@ -762,6 +766,12 @@ namespace OpenSim.Region.Communications.Hypergrid
762 // 1 - Preload the user data 766 // 1 - Preload the user data
763 m_userProfileCache.PreloadUserCache(userData.ID, userData); 767 m_userProfileCache.PreloadUserCache(userData.ID, userData);
764 768
769 if (m_knownRegions.ContainsKey(userData.ID))
770 {
771 // This was left here when the user departed
772 m_knownRegions.Remove(userData.ID);
773 }
774
765 // 2 - Load the region info into list of known regions 775 // 2 - Load the region info into list of known regions
766 RegionInfo rinfo = new RegionInfo(); 776 RegionInfo rinfo = new RegionInfo();
767 rinfo.RegionID = userData.HomeRegionID; 777 rinfo.RegionID = userData.HomeRegionID;
@@ -771,7 +781,7 @@ namespace OpenSim.Region.Communications.Hypergrid
771 rinfo.RegionID = userData.HomeRegionID; 781 rinfo.RegionID = userData.HomeRegionID;
772 // X=0 on the map 782 // X=0 on the map
773 rinfo.RegionLocX = 0; 783 rinfo.RegionLocX = 0;
774 rinfo.RegionLocY = (uint)m_knownRegions.Count; 784 rinfo.RegionLocY = (uint)(random.Next(0, Int32.MaxValue)); //(uint)m_knownRegions.Count;
775 rinfo.regionSecret = userRegionHandle.ToString(); 785 rinfo.regionSecret = userRegionHandle.ToString();
776 //Console.WriteLine("XXX--- Here: handle = " + rinfo.regionSecret); 786 //Console.WriteLine("XXX--- Here: handle = " + rinfo.regionSecret);
777 try 787 try
@@ -792,9 +802,6 @@ namespace OpenSim.Region.Communications.Hypergrid
792 802
793 if (!m_knownRegions.ContainsKey(userData.ID)) 803 if (!m_knownRegions.ContainsKey(userData.ID))
794 m_knownRegions.Add(userData.ID, rinfo); 804 m_knownRegions.Add(userData.ID, rinfo);
795 else
796 // just update it. The previous one was left there when the user departed
797 m_knownRegions[userData.ID] = rinfo;
798 805
799 // 3 - Send the reply 806 // 3 - Send the reply
800 Hashtable respdata = new Hashtable(); 807 Hashtable respdata = new Hashtable();
@@ -950,8 +957,8 @@ namespace OpenSim.Region.Communications.Hypergrid
950 retValue.ToString()); 957 retValue.ToString());
951 958
952 // Remove the info from this region 959 // Remove the info from this region
953 if (m_knownRegions.ContainsKey(uinfo.UserProfile.ID)) 960 //if (m_knownRegions.ContainsKey(uinfo.UserProfile.ID))
954 m_knownRegions.Remove(uinfo.UserProfile.ID); 961 // m_knownRegions.Remove(uinfo.UserProfile.ID);
955 962
956 return retValue; 963 return retValue;
957 } 964 }