diff options
Diffstat (limited to 'OpenSim/Services/GridService/GridService.cs')
-rw-r--r-- | OpenSim/Services/GridService/GridService.cs | 65 |
1 files changed, 11 insertions, 54 deletions
diff --git a/OpenSim/Services/GridService/GridService.cs b/OpenSim/Services/GridService/GridService.cs index 6aa1c4f..2229421 100644 --- a/OpenSim/Services/GridService/GridService.cs +++ b/OpenSim/Services/GridService/GridService.cs | |||
@@ -88,13 +88,18 @@ namespace OpenSim.Services.GridService | |||
88 | return m_Database.Delete(regionID); | 88 | return m_Database.Delete(regionID); |
89 | } | 89 | } |
90 | 90 | ||
91 | public List<SimpleRegionInfo> GetNeighbours(UUID scopeID, int x, int y) | 91 | public List<SimpleRegionInfo> GetNeighbours(UUID scopeID, UUID regionID) |
92 | { | 92 | { |
93 | List<RegionData> rdatas = m_Database.Get(x - 1, y - 1, x + 1, y + 1, scopeID); | ||
94 | List<SimpleRegionInfo> rinfos = new List<SimpleRegionInfo>(); | 93 | List<SimpleRegionInfo> rinfos = new List<SimpleRegionInfo>(); |
95 | foreach (RegionData rdata in rdatas) | 94 | RegionData region = m_Database.Get(regionID, scopeID); |
96 | rinfos.Add(RegionData2RegionInfo(rdata)); | 95 | if (region != null) |
96 | { | ||
97 | // Not really? Maybe? | ||
98 | List<RegionData> rdatas = m_Database.Get(region.posX - 1, region.posY - 1, region.posX + 1, region.posY + 1, scopeID); | ||
99 | foreach (RegionData rdata in rdatas) | ||
100 | rinfos.Add(RegionData2RegionInfo(rdata)); | ||
97 | 101 | ||
102 | } | ||
98 | return rinfos; | 103 | return rinfos; |
99 | } | 104 | } |
100 | 105 | ||
@@ -164,68 +169,20 @@ namespace OpenSim.Services.GridService | |||
164 | rdata.posX = (int)rinfo.RegionLocX; | 169 | rdata.posX = (int)rinfo.RegionLocX; |
165 | rdata.posY = (int)rinfo.RegionLocY; | 170 | rdata.posY = (int)rinfo.RegionLocY; |
166 | rdata.RegionID = rinfo.RegionID; | 171 | rdata.RegionID = rinfo.RegionID; |
172 | rdata.Data = rinfo.ToKeyValuePairs(); | ||
167 | //rdata.RegionName = rinfo.RegionName; | 173 | //rdata.RegionName = rinfo.RegionName; |
168 | rdata.Data["external_ip_address"] = rinfo.ExternalEndPoint.Address.ToString(); | ||
169 | rdata.Data["external_port"] = rinfo.ExternalEndPoint.Port.ToString(); | ||
170 | rdata.Data["external_host_name"] = rinfo.ExternalHostName; | ||
171 | rdata.Data["http_port"] = rinfo.HttpPort.ToString(); | ||
172 | rdata.Data["internal_ip_address"] = rinfo.InternalEndPoint.Address.ToString(); | ||
173 | rdata.Data["internal_port"] = rinfo.InternalEndPoint.Port.ToString(); | ||
174 | rdata.Data["alternate_ports"] = rinfo.m_allow_alternate_ports.ToString(); | ||
175 | rdata.Data["server_uri"] = rinfo.ServerURI; | ||
176 | 174 | ||
177 | return rdata; | 175 | return rdata; |
178 | } | 176 | } |
179 | 177 | ||
180 | protected SimpleRegionInfo RegionData2RegionInfo(RegionData rdata) | 178 | protected SimpleRegionInfo RegionData2RegionInfo(RegionData rdata) |
181 | { | 179 | { |
182 | SimpleRegionInfo rinfo = new SimpleRegionInfo(); | 180 | SimpleRegionInfo rinfo = new SimpleRegionInfo(rdata.Data); |
183 | rinfo.RegionLocX = (uint)rdata.posX; | 181 | rinfo.RegionLocX = (uint)rdata.posX; |
184 | rinfo.RegionLocY = (uint)rdata.posY; | 182 | rinfo.RegionLocY = (uint)rdata.posY; |
185 | rinfo.RegionID = rdata.RegionID; | 183 | rinfo.RegionID = rdata.RegionID; |
186 | //rinfo.RegionName = rdata.RegionName; | 184 | //rinfo.RegionName = rdata.RegionName; |
187 | 185 | ||
188 | // Now for the variable data | ||
189 | if ((rdata.Data["external_ip_address"] != null) && (rdata.Data["external_port"] != null)) | ||
190 | { | ||
191 | int port = 0; | ||
192 | Int32.TryParse((string)rdata.Data["external_port"], out port); | ||
193 | IPEndPoint ep = new IPEndPoint(IPAddress.Parse((string)rdata.Data["external_ip_address"]), port); | ||
194 | rinfo.ExternalEndPoint = ep; | ||
195 | } | ||
196 | else | ||
197 | rinfo.ExternalEndPoint = new IPEndPoint(new IPAddress(0), 0); | ||
198 | |||
199 | if (rdata.Data["external_host_name"] != null) | ||
200 | rinfo.ExternalHostName = (string)rdata.Data["external_host_name"] ; | ||
201 | |||
202 | if (rdata.Data["http_port"] != null) | ||
203 | { | ||
204 | UInt32 port = 0; | ||
205 | UInt32.TryParse((string)rdata.Data["http_port"], out port); | ||
206 | rinfo.HttpPort = port; | ||
207 | } | ||
208 | |||
209 | if ((rdata.Data["internal_ip_address"] != null) && (rdata.Data["internal_port"] != null)) | ||
210 | { | ||
211 | int port = 0; | ||
212 | Int32.TryParse((string)rdata.Data["internal_port"], out port); | ||
213 | IPEndPoint ep = new IPEndPoint(IPAddress.Parse((string)rdata.Data["internal_ip_address"]), port); | ||
214 | rinfo.InternalEndPoint = ep; | ||
215 | } | ||
216 | else | ||
217 | rinfo.InternalEndPoint = new IPEndPoint(new IPAddress(0), 0); | ||
218 | |||
219 | if (rdata.Data["alternate_ports"] != null) | ||
220 | { | ||
221 | bool alts = false; | ||
222 | Boolean.TryParse((string)rdata.Data["alternate_ports"], out alts); | ||
223 | rinfo.m_allow_alternate_ports = alts; | ||
224 | } | ||
225 | |||
226 | if (rdata.Data["server_uri"] != null) | ||
227 | rinfo.ServerURI = (string)rdata.Data["server_uri"]; | ||
228 | |||
229 | return rinfo; | 186 | return rinfo; |
230 | } | 187 | } |
231 | 188 | ||