aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Communications
diff options
context:
space:
mode:
authorlbsa712007-10-22 17:55:49 +0000
committerlbsa712007-10-22 17:55:49 +0000
commitdd770c384c2e63cf8a1e2f522741afb8adfab4c2 (patch)
tree97bc7dacf15388d8b32639219ea51872961de2cd /OpenSim/Region/Communications
parentafter a small misunderstanding with the match group numbers (diff)
downloadopensim-SC-dd770c384c2e63cf8a1e2f522741afb8adfab4c2.zip
opensim-SC-dd770c384c2e63cf8a1e2f522741afb8adfab4c2.tar.gz
opensim-SC-dd770c384c2e63cf8a1e2f522741afb8adfab4c2.tar.bz2
opensim-SC-dd770c384c2e63cf8a1e2f522741afb8adfab4c2.tar.xz
* Made EstateSetting static since there's only one instance, and we only need to create it once
* Now cacheing RegionInfos indefinitively; we should add a tiomeout to this cache
Diffstat (limited to 'OpenSim/Region/Communications')
-rw-r--r--OpenSim/Region/Communications/Local/LocalBackEndServices.cs5
-rw-r--r--OpenSim/Region/Communications/OGS1/OGS1GridServices.cs62
2 files changed, 39 insertions, 28 deletions
diff --git a/OpenSim/Region/Communications/Local/LocalBackEndServices.cs b/OpenSim/Region/Communications/Local/LocalBackEndServices.cs
index b14bd3d..dbac148 100644
--- a/OpenSim/Region/Communications/Local/LocalBackEndServices.cs
+++ b/OpenSim/Region/Communications/Local/LocalBackEndServices.cs
@@ -39,6 +39,7 @@ namespace OpenSim.Region.Communications.Local
39 { 39 {
40 protected Dictionary<ulong, RegionInfo> m_regions = new Dictionary<ulong, RegionInfo>(); 40 protected Dictionary<ulong, RegionInfo> m_regions = new Dictionary<ulong, RegionInfo>();
41 protected Dictionary<ulong, RegionCommsListener> m_regionListeners = new Dictionary<ulong, RegionCommsListener>(); 41 protected Dictionary<ulong, RegionCommsListener> m_regionListeners = new Dictionary<ulong, RegionCommsListener>();
42 private Dictionary<ulong, RegionInfo> m_remoteRegionInfoCache = new Dictionary<ulong, RegionInfo>();
42 43
43 public LocalBackEndServices() 44 public LocalBackEndServices()
44 { 45 {
@@ -128,8 +129,8 @@ namespace OpenSim.Region.Communications.Local
128 map.Name = regInfo.RegionName; 129 map.Name = regInfo.RegionName;
129 map.X = (ushort)regInfo.RegionLocX; 130 map.X = (ushort)regInfo.RegionLocX;
130 map.Y = (ushort)regInfo.RegionLocY; 131 map.Y = (ushort)regInfo.RegionLocY;
131 map.WaterHeight = (byte)regInfo.estateSettings.waterHeight; 132 map.WaterHeight = (byte)regInfo.EstateSettings.waterHeight;
132 map.MapImageId = regInfo.estateSettings.terrainImageID; //new LLUUID("00000000-0000-0000-9999-000000000007"); 133 map.MapImageId = regInfo.EstateSettings.terrainImageID; //new LLUUID("00000000-0000-0000-9999-000000000007");
133 map.Agents = 1; 134 map.Agents = 1;
134 map.RegionFlags = 72458694; 135 map.RegionFlags = 72458694;
135 map.Access = 13; 136 map.Access = 13;
diff --git a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
index cc56078..9e74148 100644
--- a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
+++ b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
@@ -50,6 +50,7 @@ namespace OpenSim.Region.Communications.OGS1
50 public class OGS1GridServices : IGridServices, IInterRegionCommunications 50 public class OGS1GridServices : IGridServices, IInterRegionCommunications
51 { 51 {
52 private LocalBackEndServices m_localBackend = new LocalBackEndServices(); 52 private LocalBackEndServices m_localBackend = new LocalBackEndServices();
53 private Dictionary<ulong, RegionInfo> m_remoteRegionInfoCache = new Dictionary<ulong, RegionInfo>();
53 54
54 public BaseHttpServer httpListener; 55 public BaseHttpServer httpListener;
55 public NetworkServersInfo serversInfo; 56 public NetworkServersInfo serversInfo;
@@ -89,7 +90,7 @@ namespace OpenSim.Region.Communications.OGS1
89 GridParams["sim_name"] = regionInfo.RegionName; 90 GridParams["sim_name"] = regionInfo.RegionName;
90 GridParams["http_port"] = serversInfo.HttpListenerPort.ToString(); 91 GridParams["http_port"] = serversInfo.HttpListenerPort.ToString();
91 GridParams["remoting_port"] = serversInfo.RemotingListenerPort.ToString(); 92 GridParams["remoting_port"] = serversInfo.RemotingListenerPort.ToString();
92 GridParams["map-image-id"] = regionInfo.estateSettings.terrainImageID.ToStringHyphenated(); 93 GridParams["map-image-id"] = regionInfo.EstateSettings.terrainImageID.ToStringHyphenated();
93 94
94 // Package into an XMLRPC Request 95 // Package into an XMLRPC Request
95 ArrayList SendParams = new ArrayList(); 96 ArrayList SendParams = new ArrayList();
@@ -152,6 +153,7 @@ namespace OpenSim.Region.Communications.OGS1
152 return neighbours; 153 return neighbours;
153 } 154 }
154 155
156
155 /// <summary> 157 /// <summary>
156 /// 158 ///
157 /// </summary> 159 /// </summary>
@@ -166,37 +168,45 @@ namespace OpenSim.Region.Communications.OGS1
166 return regionInfo; 168 return regionInfo;
167 } 169 }
168 170
169 Hashtable requestData = new Hashtable(); 171 if (m_remoteRegionInfoCache.TryGetValue(regionHandle, out regionInfo))
170 requestData["region_handle"] = regionHandle.ToString();
171 requestData["authkey"] = this.serversInfo.GridSendKey;
172 ArrayList SendParams = new ArrayList();
173 SendParams.Add(requestData);
174 XmlRpcRequest GridReq = new XmlRpcRequest("simulator_data_request", SendParams);
175 XmlRpcResponse GridResp = GridReq.Send(this.serversInfo.GridURL, 3000);
176
177 Hashtable responseData = (Hashtable)GridResp.Value;
178
179 if (responseData.ContainsKey("error"))
180 { 172 {
181 Console.WriteLine("error received from grid server" + responseData["error"]);
182 return null;
183 } 173 }
174 else
175 {
176 Hashtable requestData = new Hashtable();
177 requestData["region_handle"] = regionHandle.ToString();
178 requestData["authkey"] = this.serversInfo.GridSendKey;
179 ArrayList SendParams = new ArrayList();
180 SendParams.Add(requestData);
181 XmlRpcRequest GridReq = new XmlRpcRequest("simulator_data_request", SendParams);
182 XmlRpcResponse GridResp = GridReq.Send(this.serversInfo.GridURL, 3000);
184 183
185 uint regX = Convert.ToUInt32((string)responseData["region_locx"]); 184 Hashtable responseData = (Hashtable) GridResp.Value;
186 uint regY = Convert.ToUInt32((string)responseData["region_locy"]);
187 string internalIpStr = (string)responseData["sim_ip"];
188 uint port = Convert.ToUInt32(responseData["sim_port"]);
189 string externalUri = (string)responseData["sim_uri"];
190 185
191 IPEndPoint neighbourInternalEndPoint = new IPEndPoint(IPAddress.Parse(internalIpStr), (int)port); 186 if (responseData.ContainsKey("error"))
192 string neighbourExternalUri = externalUri; 187 {
193 regionInfo = new RegionInfo(regX, regY, neighbourInternalEndPoint, internalIpStr); 188 Console.WriteLine("error received from grid server" + responseData["error"]);
189 return null;
190 }
191
192 uint regX = Convert.ToUInt32((string) responseData["region_locx"]);
193 uint regY = Convert.ToUInt32((string) responseData["region_locy"]);
194 string internalIpStr = (string) responseData["sim_ip"];
195 uint port = Convert.ToUInt32(responseData["sim_port"]);
196 string externalUri = (string) responseData["sim_uri"];
194 197
195 regionInfo.RemotingPort = Convert.ToUInt32((string)responseData["remoting_port"]); 198 IPEndPoint neighbourInternalEndPoint = new IPEndPoint(IPAddress.Parse(internalIpStr), (int) port);
196 regionInfo.RemotingAddress = internalIpStr; 199 string neighbourExternalUri = externalUri;
200 regionInfo = new RegionInfo(regX, regY, neighbourInternalEndPoint, internalIpStr);
197 201
198 regionInfo.RegionID = new LLUUID((string)responseData["region_UUID"]); 202 regionInfo.RemotingPort = Convert.ToUInt32((string) responseData["remoting_port"]);
199 regionInfo.RegionName = (string)responseData["region_name"]; 203 regionInfo.RemotingAddress = internalIpStr;
204
205 regionInfo.RegionID = new LLUUID((string) responseData["region_UUID"]);
206 regionInfo.RegionName = (string) responseData["region_name"];
207
208 m_remoteRegionInfoCache.Add( regionHandle, regionInfo );
209 }
200 210
201 return regionInfo; 211 return regionInfo;
202 } 212 }