diff options
author | Melanie Thielker | 2014-06-21 00:39:55 +0200 |
---|---|---|
committer | Melanie Thielker | 2014-06-21 00:39:55 +0200 |
commit | 159fcbf150b7da0e229b29aa7b94793484543d12 (patch) | |
tree | b8c0ff3b4c758a3fba8315b556c923ef4c02a185 /OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs | |
parent | Merge commit '68c8633ba18f0a11cfc0ed04d1d0c7c59e6cec76' (diff) | |
parent | Merge branch 'master' into careminster (diff) | |
download | opensim-SC_OLD-159fcbf150b7da0e229b29aa7b94793484543d12.zip opensim-SC_OLD-159fcbf150b7da0e229b29aa7b94793484543d12.tar.gz opensim-SC_OLD-159fcbf150b7da0e229b29aa7b94793484543d12.tar.bz2 opensim-SC_OLD-159fcbf150b7da0e229b29aa7b94793484543d12.tar.xz |
Merge branch 'master' of ssh://3dhosting.de/var/git/careminster
Conflicts:
OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
Diffstat (limited to 'OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs')
-rw-r--r-- | OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs | 147 |
1 files changed, 81 insertions, 66 deletions
diff --git a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs index bf18616..5412359 100644 --- a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs +++ b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs | |||
@@ -115,6 +115,11 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
115 | "export-map [<path>]", | 115 | "export-map [<path>]", |
116 | "Save an image of the world map", HandleExportWorldMapConsoleCommand); | 116 | "Save an image of the world map", HandleExportWorldMapConsoleCommand); |
117 | 117 | ||
118 | m_scene.AddCommand( | ||
119 | "Regions", this, "generate map", | ||
120 | "generate map", | ||
121 | "Generates and stores a new maptile.", HandleGenerateMapConsoleCommand); | ||
122 | |||
118 | AddHandlers(); | 123 | AddHandlers(); |
119 | } | 124 | } |
120 | } | 125 | } |
@@ -162,7 +167,16 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
162 | regionimage = regionimage.Replace("-", ""); | 167 | regionimage = regionimage.Replace("-", ""); |
163 | m_log.Info("[WORLD MAP]: JPEG Map location: " + m_scene.RegionInfo.ServerURI + "index.php?method=" + regionimage); | 168 | m_log.Info("[WORLD MAP]: JPEG Map location: " + m_scene.RegionInfo.ServerURI + "index.php?method=" + regionimage); |
164 | 169 | ||
165 | MainServer.Instance.AddHTTPHandler(regionimage, OnHTTPGetMapImage); | 170 | MainServer.Instance.AddHTTPHandler(regionimage, |
171 | new GenericHTTPDOSProtector(OnHTTPGetMapImage, OnHTTPThrottled, new BasicDosProtectorOptions() | ||
172 | { | ||
173 | AllowXForwardedFor = false, | ||
174 | ForgetTimeSpan = TimeSpan.FromMinutes(2), | ||
175 | MaxRequestsInTimeframe = 4, | ||
176 | ReportingName = "MAPDOSPROTECTOR", | ||
177 | RequestTimeSpan = TimeSpan.FromSeconds(10), | ||
178 | ThrottledAction = BasicDOSProtector.ThrottleAction.DoThrottledMethod | ||
179 | }).Process); | ||
166 | MainServer.Instance.AddLLSDHandler( | 180 | MainServer.Instance.AddLLSDHandler( |
167 | "/MAP/MapItems/" + m_scene.RegionInfo.RegionHandle.ToString(), HandleRemoteMapItemRequest); | 181 | "/MAP/MapItems/" + m_scene.RegionInfo.RegionHandle.ToString(), HandleRemoteMapItemRequest); |
168 | 182 | ||
@@ -1131,6 +1145,16 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
1131 | block.Y = (ushort)(r.RegionLocY / Constants.RegionSize); | 1145 | block.Y = (ushort)(r.RegionLocY / Constants.RegionSize); |
1132 | } | 1146 | } |
1133 | 1147 | ||
1148 | public Hashtable OnHTTPThrottled(Hashtable keysvals) | ||
1149 | { | ||
1150 | Hashtable reply = new Hashtable(); | ||
1151 | int statuscode = 500; | ||
1152 | reply["str_response_string"] = ""; | ||
1153 | reply["int_response_code"] = statuscode; | ||
1154 | reply["content_type"] = "text/plain"; | ||
1155 | return reply; | ||
1156 | } | ||
1157 | |||
1134 | public Hashtable OnHTTPGetMapImage(Hashtable keysvals) | 1158 | public Hashtable OnHTTPGetMapImage(Hashtable keysvals) |
1135 | { | 1159 | { |
1136 | m_log.Debug("[WORLD MAP]: Sending map image jpeg"); | 1160 | m_log.Debug("[WORLD MAP]: Sending map image jpeg"); |
@@ -1305,6 +1329,16 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
1305 | m_scene.RegionInfo.RegionName, exportPath); | 1329 | m_scene.RegionInfo.RegionName, exportPath); |
1306 | } | 1330 | } |
1307 | 1331 | ||
1332 | public void HandleGenerateMapConsoleCommand(string module, string[] cmdparams) | ||
1333 | { | ||
1334 | Scene consoleScene = m_scene.ConsoleScene(); | ||
1335 | |||
1336 | if (consoleScene != null && consoleScene != m_scene) | ||
1337 | return; | ||
1338 | |||
1339 | GenerateMaptile(); | ||
1340 | } | ||
1341 | |||
1308 | public OSD HandleRemoteMapItemRequest(string path, OSD request, string endpoint) | 1342 | public OSD HandleRemoteMapItemRequest(string path, OSD request, string endpoint) |
1309 | { | 1343 | { |
1310 | uint xstart = 0; | 1344 | uint xstart = 0; |
@@ -1542,88 +1576,69 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
1542 | 1576 | ||
1543 | private Byte[] GenerateOverlay() | 1577 | private Byte[] GenerateOverlay() |
1544 | { | 1578 | { |
1545 | Bitmap overlay = new Bitmap(256, 256); | 1579 | using (Bitmap overlay = new Bitmap(256, 256)) |
1546 | |||
1547 | bool[,] saleBitmap = new bool[64, 64]; | ||
1548 | for (int x = 0 ; x < 64 ; x++) | ||
1549 | { | 1580 | { |
1550 | for (int y = 0 ; y < 64 ; y++) | 1581 | bool[,] saleBitmap = new bool[64, 64]; |
1551 | saleBitmap[x, y] = false; | 1582 | for (int x = 0 ; x < 64 ; x++) |
1552 | } | 1583 | { |
1553 | 1584 | for (int y = 0 ; y < 64 ; y++) | |
1554 | bool landForSale = false; | 1585 | saleBitmap[x, y] = false; |
1586 | } | ||
1555 | 1587 | ||
1556 | List<ILandObject> parcels = m_scene.LandChannel.AllParcels(); | 1588 | bool landForSale = false; |
1557 | 1589 | ||
1558 | Color background = Color.FromArgb(0, 0, 0, 0); | 1590 | List<ILandObject> parcels = m_scene.LandChannel.AllParcels(); |
1559 | SolidBrush transparent = new SolidBrush(background); | ||
1560 | Graphics g = Graphics.FromImage(overlay); | ||
1561 | g.FillRectangle(transparent, 0, 0, 255, 255); | ||
1562 | 1591 | ||
1563 | SolidBrush yellow = new SolidBrush(Color.FromArgb(255, 249, 223, 9)); | 1592 | Color background = Color.FromArgb(0, 0, 0, 0); |
1564 | Pen grey = new Pen(Color.FromArgb(255, 92, 92, 92)); | ||
1565 | 1593 | ||
1566 | foreach (ILandObject land in parcels) | 1594 | using (Graphics g = Graphics.FromImage(overlay)) |
1567 | { | ||
1568 | // m_log.DebugFormat("[WORLD MAP]: Parcel {0} flags {1}", land.LandData.Name, land.LandData.Flags); | ||
1569 | if ((land.LandData.Flags & (uint)ParcelFlags.ForSale) != 0) | ||
1570 | { | 1595 | { |
1571 | landForSale = true; | 1596 | using (SolidBrush transparent = new SolidBrush(background)) |
1572 | 1597 | g.FillRectangle(transparent, 0, 0, 256, 256); | |
1573 | bool[,] landBitmap = land.GetLandBitmap(); | ||
1574 | 1598 | ||
1575 | for (int x = 0 ; x < 64 ; x++) | 1599 | |
1600 | foreach (ILandObject land in parcels) | ||
1576 | { | 1601 | { |
1577 | for (int y = 0 ; y < 64 ; y++) | 1602 | // m_log.DebugFormat("[WORLD MAP]: Parcel {0} flags {1}", land.LandData.Name, land.LandData.Flags); |
1603 | if ((land.LandData.Flags & (uint)ParcelFlags.ForSale) != 0) | ||
1578 | { | 1604 | { |
1579 | if (landBitmap[x, y]) | 1605 | landForSale = true; |
1606 | |||
1607 | saleBitmap = land.MergeLandBitmaps(saleBitmap, land.GetLandBitmap()); | ||
1608 | } | ||
1609 | } | ||
1610 | |||
1611 | if (!landForSale) | ||
1612 | { | ||
1613 | m_log.DebugFormat("[WORLD MAP]: Region {0} has no parcels for sale, not generating overlay", m_scene.RegionInfo.RegionName); | ||
1614 | return null; | ||
1615 | } | ||
1616 | |||
1617 | m_log.DebugFormat("[WORLD MAP]: Region {0} has parcels for sale, generating overlay", m_scene.RegionInfo.RegionName); | ||
1618 | |||
1619 | using (SolidBrush yellow = new SolidBrush(Color.FromArgb(255, 249, 223, 9))) | ||
1620 | { | ||
1621 | for (int x = 0 ; x < 64 ; x++) | ||
1622 | { | ||
1623 | for (int y = 0 ; y < 64 ; y++) | ||
1580 | { | 1624 | { |
1581 | g.FillRectangle(yellow, x * 4, 252 - (y * 4), 4, 4); | 1625 | if (saleBitmap[x, y]) |
1582 | 1626 | g.FillRectangle(yellow, x * 4, 252 - (y * 4), 4, 4); | |
1583 | if (x > 0) | ||
1584 | { | ||
1585 | if ((saleBitmap[x - 1, y] || landBitmap[x - 1, y]) == false) | ||
1586 | g.DrawLine(grey, x * 4, 252 - (y * 4), x * 4, 255 - (y * 4)); | ||
1587 | } | ||
1588 | if (y > 0) | ||
1589 | { | ||
1590 | if ((saleBitmap[x, y-1] || landBitmap[x, y-1]) == false) | ||
1591 | g.DrawLine(grey, x * 4, 255 - (y * 4), x * 4 + 3, 255 - (y * 4)); | ||
1592 | } | ||
1593 | if (x < 63) | ||
1594 | { | ||
1595 | if ((saleBitmap[x + 1, y] || landBitmap[x + 1, y]) == false) | ||
1596 | g.DrawLine(grey, x * 4 + 3, 252 - (y * 4), x * 4 + 3, 255 - (y * 4)); | ||
1597 | } | ||
1598 | if (y < 63) | ||
1599 | { | ||
1600 | if ((saleBitmap[x, y + 1] || landBitmap[x, y + 1]) == false) | ||
1601 | g.DrawLine(grey, x * 4, 252 - (y * 4), x * 4 + 3, 252 - (y * 4)); | ||
1602 | } | ||
1603 | } | 1627 | } |
1604 | } | 1628 | } |
1605 | } | 1629 | } |
1606 | |||
1607 | saleBitmap = land.MergeLandBitmaps(saleBitmap, landBitmap); | ||
1608 | } | 1630 | } |
1609 | } | ||
1610 | 1631 | ||
1611 | if (!landForSale) | 1632 | try |
1612 | { | 1633 | { |
1613 | m_log.DebugFormat("[WORLD MAP]: Region {0} has no parcels for sale, not generating overlay", m_scene.RegionInfo.RegionName); | 1634 | return OpenJPEG.EncodeFromImage(overlay, true); |
1614 | return null; | 1635 | } |
1636 | catch (Exception e) | ||
1637 | { | ||
1638 | m_log.DebugFormat("[WORLD MAP]: Error creating parcel overlay: " + e.ToString()); | ||
1639 | } | ||
1615 | } | 1640 | } |
1616 | 1641 | ||
1617 | m_log.DebugFormat("[WORLD MAP]: Region {0} has parcels for sale, generating overlay", m_scene.RegionInfo.RegionName); | ||
1618 | |||
1619 | try | ||
1620 | { | ||
1621 | return OpenJPEG.EncodeFromImage(overlay, true); | ||
1622 | } | ||
1623 | catch (Exception e) | ||
1624 | { | ||
1625 | m_log.DebugFormat("[WORLD MAP]: Error creating parcel overlay: " + e.ToString()); | ||
1626 | } | ||
1627 | return null; | 1642 | return null; |
1628 | } | 1643 | } |
1629 | } | 1644 | } |