From bc3c16467a9abee3858124c814bad79e7cde9915 Mon Sep 17 00:00:00 2001 From: Adam Frisby Date: Sun, 24 Jun 2007 17:43:57 +0000 Subject: [PATCH] * Added partial support for OGS/1 grid servers with the Sugilite patch. --- .../OGS1GridServices.cs | 71 ++++++++++++++++++- 1 file changed, 68 insertions(+), 3 deletions(-) diff --git a/Common/OpenGrid.Framework.Communications.OGS1/OGS1GridServices.cs b/Common/OpenGrid.Framework.Communications.OGS1/OGS1GridServices.cs index ff3538aada..a6301f38f8 100644 --- a/Common/OpenGrid.Framework.Communications.OGS1/OGS1GridServices.cs +++ b/Common/OpenGrid.Framework.Communications.OGS1/OGS1GridServices.cs @@ -14,11 +14,14 @@ namespace OpenGrid.Framework.Communications.OGS1 public class OGS1GridServices : IGridServices { public RegionCommsListener listener; + public GridInfo grid; public RegionCommsListener RegisterRegion(RegionInfo regionInfo, GridInfo gridInfo) { Hashtable GridParams = new Hashtable(); + grid = gridInfo; + // Login / Authentication GridParams["authkey"] = gridInfo.GridServerSendKey; GridParams["UUID"] = regionInfo.SimUUID.ToStringHyphenated(); @@ -26,7 +29,7 @@ namespace OpenGrid.Framework.Communications.OGS1 GridParams["sim_port"] = regionInfo.CommsIPListenPort.ToString(); // Package into an XMLRPC Request - ArrayList SendParams = new ArrayList(); + ArrayList SendParams = new ArrayList(); SendParams.Add(GridParams); // Send Request @@ -51,15 +54,77 @@ namespace OpenGrid.Framework.Communications.OGS1 public List RequestNeighbours(RegionInfo regionInfo) { - return null; + Hashtable param = new Hashtable(); + param["xmin"] = regionInfo.RegionLocX - 1; + param["ymin"] = regionInfo.RegionLocY - 1; + param["xmax"] = regionInfo.RegionLocX + 1; + param["ymax"] = regionInfo.RegionLocY + 1; + IList parameters = new ArrayList(); + parameters.Add(param); + XmlRpcRequest req = new XmlRpcRequest("map_block", parameters); + XmlRpcResponse resp = req.Send(grid.GridServerURI, 3000); + Hashtable respData = (Hashtable)resp.Value; + + List neighbours = new List(); + + foreach (Hashtable n in (Hashtable)respData.Values) + { + RegionInfo neighbour = new RegionInfo(); + + //OGS1 + neighbour.RegionHandle = (ulong)n["regionhandle"]; + neighbour.RegionLocX = (uint)n["x"]; + neighbour.RegionLocY = (uint)n["y"]; + neighbour.RegionName = (string)n["name"]; + + //OGS1+ + neighbour.CommsIPListenAddr = (string)n["sim_ip"]; + neighbour.CommsIPListenPort = (int)n["sim_port"]; + neighbour.CommsExternalAddress = (string)n["sim_uri"]; + neighbour.SimUUID = (string)n["uuid"]; + + neighbours.Add(neighbour); + } + + return neighbours; } public RegionInfo RequestNeighbourInfo(ulong regionHandle) { + OpenSim.Framework.Console.MainLog.Instance.Warn("Unimplemented - RequestNeighbourInfo()"); return null; } public List RequestNeighbourMapBlocks(int minX, int minY, int maxX, int maxY) { - return null; + Hashtable param = new Hashtable(); + param["xmin"] = minX; + param["ymin"] = minY; + param["xmax"] = maxX; + param["ymax"] = maxY; + IList parameters = new ArrayList(); + parameters.Add(param); + XmlRpcRequest req = new XmlRpcRequest("map_block", parameters); + XmlRpcResponse resp = req.Send(grid.GridServerURI, 3000); + Hashtable respData = (Hashtable)resp.Value; + + List neighbours = new List(); + + foreach (Hashtable n in (Hashtable)respData.Values) + { + MapBlockData neighbour = new MapBlockData(); + + neighbour.X = (ushort)n["x"]; + neighbour.Y = (ushort)n["y"]; + + neighbour.Name = (string)n["name"]; + neighbour.Access = (byte)n["access"]; + neighbour.RegionFlags = (uint)n["region-flags"]; + neighbour.WaterHeight = (byte)n["water-height"]; + neighbour.MapImageId = (string)n["map-image-id"]; + + neighbours.Add(neighbour); + } + + return neighbours; } } }