From 1a7efc2c64ac70b4ea77a370964c7a3df2c283e2 Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Sat, 23 Aug 2014 17:33:14 +0200 Subject: Change the map tile system to be multi-grid hosting compatible Conflicts: OpenSim/Server/Handlers/Map/MapRemoveServerConnector.cs --- .../MapImage/MapImageServicesConnector.cs | 8 +++-- OpenSim/Services/Interfaces/IMapImageService.cs | 6 ++-- .../Services/MapImageService/MapImageService.cs | 39 ++++++++++++---------- 3 files changed, 29 insertions(+), 24 deletions(-) (limited to 'OpenSim/Services') diff --git a/OpenSim/Services/Connectors/MapImage/MapImageServicesConnector.cs b/OpenSim/Services/Connectors/MapImage/MapImageServicesConnector.cs index 267dd71..6095598 100644 --- a/OpenSim/Services/Connectors/MapImage/MapImageServicesConnector.cs +++ b/OpenSim/Services/Connectors/MapImage/MapImageServicesConnector.cs @@ -86,13 +86,14 @@ namespace OpenSim.Services.Connectors m_ServerURI = serviceURI.TrimEnd('/'); } - public bool RemoveMapTile(int x, int y, out string reason) + public bool RemoveMapTile(int x, int y, UUID scopeID, out string reason) { reason = string.Empty; int tickstart = Util.EnvironmentTickCount(); Dictionary sendData = new Dictionary(); sendData["X"] = x.ToString(); sendData["Y"] = y.ToString(); + sendData["SCOPE"] = scopeID.ToString(); string reqString = ServerUtils.BuildQueryString(sendData); string uri = m_ServerURI + "/removemap"; @@ -146,13 +147,14 @@ namespace OpenSim.Services.Connectors return false; } - public bool AddMapTile(int x, int y, byte[] jpgData, out string reason) + public bool AddMapTile(int x, int y, byte[] jpgData, UUID scopeID, out string reason) { reason = string.Empty; int tickstart = Util.EnvironmentTickCount(); Dictionary sendData = new Dictionary(); sendData["X"] = x.ToString(); sendData["Y"] = y.ToString(); + sendData["SCOPE"] = scopeID.ToString(); sendData["TYPE"] = "image/jpeg"; sendData["DATA"] = Convert.ToBase64String(jpgData); @@ -209,7 +211,7 @@ namespace OpenSim.Services.Connectors } - public byte[] GetMapTile(string fileName, out string format) + public byte[] GetMapTile(string fileName, UUID scopeID, out string format) { format = string.Empty; new Exception("GetMapTile method not Implemented"); diff --git a/OpenSim/Services/Interfaces/IMapImageService.cs b/OpenSim/Services/Interfaces/IMapImageService.cs index 78daa5f..b8d45dd 100644 --- a/OpenSim/Services/Interfaces/IMapImageService.cs +++ b/OpenSim/Services/Interfaces/IMapImageService.cs @@ -34,8 +34,8 @@ namespace OpenSim.Services.Interfaces public interface IMapImageService { //List GetMapBlocks(UUID scopeID, int minX, int minY, int maxX, int maxY); - bool AddMapTile(int x, int y, byte[] imageData, out string reason); - bool RemoveMapTile(int x, int y, out string reason); - byte[] GetMapTile(string fileName, out string format); + bool AddMapTile(int x, int y, byte[] imageData, UUID scopeID, out string reason); + bool RemoveMapTile(int x, int y, UUID scopeID, out string reason); + byte[] GetMapTile(string fileName, UUID scopeID, out string format); } } diff --git a/OpenSim/Services/MapImageService/MapImageService.cs b/OpenSim/Services/MapImageService/MapImageService.cs index e2f256f..9de5085 100644 --- a/OpenSim/Services/MapImageService/MapImageService.cs +++ b/OpenSim/Services/MapImageService/MapImageService.cs @@ -94,10 +94,10 @@ namespace OpenSim.Services.MapImageService #region IMapImageService - public bool AddMapTile(int x, int y, byte[] imageData, out string reason) + public bool AddMapTile(int x, int y, byte[] imageData, UUID scopeID, out string reason) { reason = string.Empty; - string fileName = GetFileName(1, x, y); + string fileName = GetFileName(1, x, y, scopeID); lock (m_Sync) { @@ -114,13 +114,13 @@ namespace OpenSim.Services.MapImageService } } - return UpdateMultiResolutionFiles(x, y, out reason); + return UpdateMultiResolutionFiles(x, y, scopeID, out reason); } - public bool RemoveMapTile(int x, int y, out string reason) + public bool RemoveMapTile(int x, int y, UUID scopeID, out string reason) { reason = String.Empty; - string fileName = GetFileName(1, x, y); + string fileName = GetFileName(1, x, y, scopeID); lock (m_Sync) { @@ -136,10 +136,10 @@ namespace OpenSim.Services.MapImageService } } - return UpdateMultiResolutionFiles(x, y, out reason); + return UpdateMultiResolutionFiles(x, y, scopeID, out reason); } - private bool UpdateMultiResolutionFiles(int x, int y, out string reason) + private bool UpdateMultiResolutionFiles(int x, int y, UUID scopeID, out string reason) { reason = String.Empty; lock (m_Sync) @@ -153,7 +153,7 @@ namespace OpenSim.Services.MapImageService int x1 = x - (x % width); int y1 = y - (y % width); - if (!CreateTile(zoomLevel, x1, y1)) + if (!CreateTile(zoomLevel, x1, y1, scopeID)) { m_log.WarnFormat("[MAP IMAGE SERVICE]: Unable to create tile for {0},{1} at zoom level {1}", x, y, zoomLevel); reason = string.Format("Map tile at zoom level {0} failed", zoomLevel); @@ -165,12 +165,13 @@ namespace OpenSim.Services.MapImageService return true; } - public byte[] GetMapTile(string fileName, out string format) + public byte[] GetMapTile(string fileName, UUID scopeID, out string format) { // m_log.DebugFormat("[MAP IMAGE SERVICE]: Getting map tile {0}", fileName); format = ".jpg"; - string fullName = Path.Combine(m_TilesStoragePath, fileName); + string fullName = Path.Combine(m_TilesStoragePath, scopeID.ToString()); + fullName = Path.Combine(fullName, fileName); if (File.Exists(fullName)) { format = Path.GetExtension(fileName).ToLower(); @@ -191,10 +192,12 @@ namespace OpenSim.Services.MapImageService #endregion - private string GetFileName(uint zoomLevel, int x, int y) + private string GetFileName(uint zoomLevel, int x, int y, UUID scopeID) { string extension = "jpg"; - return Path.Combine(m_TilesStoragePath, string.Format("map-{0}-{1}-{2}-objects.{3}", zoomLevel, x, y, extension)); + string path = Path.Combine(m_TilesStoragePath, scopeID.ToString()); + Directory.CreateDirectory(path); + return Path.Combine(path, string.Format("map-{0}-{1}-{2}-objects.{3}", zoomLevel, x, y, extension)); } private Bitmap GetInputTileImage(string fileName) @@ -235,7 +238,7 @@ namespace OpenSim.Services.MapImageService return null; } - private bool CreateTile(uint zoomLevel, int x, int y) + private bool CreateTile(uint zoomLevel, int x, int y, UUID scopeID) { // m_log.DebugFormat("[MAP IMAGE SERVICE]: Create tile for {0} {1}, zoom {2}", x, y, zoomLevel); int prevWidth = (int)Math.Pow(2, (double)zoomLevel - 2); @@ -250,13 +253,13 @@ namespace OpenSim.Services.MapImageService int yOut = y - (y % thisWidth); // Try to open the four input tiles from the previous zoom level - Bitmap inputBL = GetInputTileImage(GetFileName(zoomLevel - 1, xIn, yIn)); - Bitmap inputBR = GetInputTileImage(GetFileName(zoomLevel - 1, xIn + prevWidth, yIn)); - Bitmap inputTL = GetInputTileImage(GetFileName(zoomLevel - 1, xIn, yIn + prevWidth)); - Bitmap inputTR = GetInputTileImage(GetFileName(zoomLevel - 1, xIn + prevWidth, yIn + prevWidth)); + Bitmap inputBL = GetInputTileImage(GetFileName(zoomLevel - 1, xIn, yIn, scopeID)); + Bitmap inputBR = GetInputTileImage(GetFileName(zoomLevel - 1, xIn + prevWidth, yIn, scopeID)); + Bitmap inputTL = GetInputTileImage(GetFileName(zoomLevel - 1, xIn, yIn + prevWidth, scopeID)); + Bitmap inputTR = GetInputTileImage(GetFileName(zoomLevel - 1, xIn + prevWidth, yIn + prevWidth, scopeID)); // Open the output tile (current zoom level) - string outputFile = GetFileName(zoomLevel, xOut, yOut); + string outputFile = GetFileName(zoomLevel, xOut, yOut, scopeID); Bitmap output = GetOutputTileImage(outputFile); if (output == null) return false; -- cgit v1.1 From 39e052982baebb60801984965d8865886f20931d Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Sat, 23 Aug 2014 19:10:15 +0200 Subject: Fix a null ref that will cause an exception if a grid region doesnt' specify a URI. --- OpenSim/Services/Interfaces/IGridService.cs | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'OpenSim/Services') diff --git a/OpenSim/Services/Interfaces/IGridService.cs b/OpenSim/Services/Interfaces/IGridService.cs index 3f4c958..a3d237f 100644 --- a/OpenSim/Services/Interfaces/IGridService.cs +++ b/OpenSim/Services/Interfaces/IGridService.cs @@ -141,6 +141,12 @@ namespace OpenSim.Services.Interfaces } } set { + if ( value == null) + { + m_serverURI = String.Empty; + return; + } + if ( value.EndsWith("/") ) { m_serverURI = value; } else { -- cgit v1.1