aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs5
-rw-r--r--OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs99
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs79
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs3
-rw-r--r--OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs4
-rw-r--r--OpenSim/Region/CoreModules/Hypergrid/HGWorldMapModule.cs103
-rw-r--r--OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs3
-rw-r--r--OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs2
-rw-r--r--OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs10
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneGraph.cs11
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs5
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs7
-rw-r--r--OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs2
-rw-r--r--OpenSim/Region/Physics/Meshing/Meshmerizer.cs6
14 files changed, 208 insertions, 131 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index eed8878..6048518 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -438,6 +438,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
438 438
439 #endregion Properties 439 #endregion Properties
440 440
441// ~LLClientView()
442// {
443// m_log.DebugFormat("[LLCLIENTVIEW]: Destructor called for {0}, circuit code {1}", Name, CircuitCode);
444// }
445
441 /// <summary> 446 /// <summary>
442 /// Constructor 447 /// Constructor
443 /// </summary> 448 /// </summary>
diff --git a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs
index 7cba702..9ef5bc9 100644
--- a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs
+++ b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs
@@ -64,13 +64,13 @@ namespace Flotsam.RegionModules.AssetCache
64 private bool m_Enabled; 64 private bool m_Enabled;
65 65
66 private const string m_ModuleName = "FlotsamAssetCache"; 66 private const string m_ModuleName = "FlotsamAssetCache";
67 private const string m_DefaultCacheDirectory = m_ModuleName; 67 private const string m_DefaultCacheDirectory = "./assetcache";
68 private string m_CacheDirectory = m_DefaultCacheDirectory; 68 private string m_CacheDirectory = m_DefaultCacheDirectory;
69 69
70 private readonly List<char> m_InvalidChars = new List<char>(); 70 private readonly List<char> m_InvalidChars = new List<char>();
71 71
72 private int m_LogLevel = 0; 72 private int m_LogLevel = 0;
73 private ulong m_HitRateDisplay = 1; // How often to display hit statistics, given in requests 73 private ulong m_HitRateDisplay = 100; // How often to display hit statistics, given in requests
74 74
75 private static ulong m_Requests; 75 private static ulong m_Requests;
76 private static ulong m_RequestsForInprogress; 76 private static ulong m_RequestsForInprogress;
@@ -87,14 +87,14 @@ namespace Flotsam.RegionModules.AssetCache
87#endif 87#endif
88 88
89 private ExpiringCache<string, AssetBase> m_MemoryCache; 89 private ExpiringCache<string, AssetBase> m_MemoryCache;
90 private bool m_MemoryCacheEnabled = true; 90 private bool m_MemoryCacheEnabled = false;
91 91
92 // Expiration is expressed in hours. 92 // Expiration is expressed in hours.
93 private const double m_DefaultMemoryExpiration = 1.0; 93 private const double m_DefaultMemoryExpiration = 2;
94 private const double m_DefaultFileExpiration = 48; 94 private const double m_DefaultFileExpiration = 48;
95 private TimeSpan m_MemoryExpiration = TimeSpan.FromHours(m_DefaultMemoryExpiration); 95 private TimeSpan m_MemoryExpiration = TimeSpan.FromHours(m_DefaultMemoryExpiration);
96 private TimeSpan m_FileExpiration = TimeSpan.FromHours(m_DefaultFileExpiration); 96 private TimeSpan m_FileExpiration = TimeSpan.FromHours(m_DefaultFileExpiration);
97 private TimeSpan m_FileExpirationCleanupTimer = TimeSpan.FromHours(m_DefaultFileExpiration); 97 private TimeSpan m_FileExpirationCleanupTimer = TimeSpan.FromHours(0.166);
98 98
99 private static int m_CacheDirectoryTiers = 1; 99 private static int m_CacheDirectoryTiers = 1;
100 private static int m_CacheDirectoryTierLen = 3; 100 private static int m_CacheDirectoryTierLen = 3;
@@ -141,26 +141,38 @@ namespace Flotsam.RegionModules.AssetCache
141 IConfig assetConfig = source.Configs["AssetCache"]; 141 IConfig assetConfig = source.Configs["AssetCache"];
142 if (assetConfig == null) 142 if (assetConfig == null)
143 { 143 {
144 m_log.Warn("[FLOTSAM ASSET CACHE]: AssetCache missing from OpenSim.ini, using defaults."); 144 m_log.Warn(
145 m_log.InfoFormat("[FLOTSAM ASSET CACHE]: Cache Directory", m_DefaultCacheDirectory); 145 "[FLOTSAM ASSET CACHE]: AssetCache section missing from config (not copied config-include/FlotsamCache.ini.example? Using defaults.");
146 return;
147 } 146 }
147 else
148 {
149 m_CacheDirectory = assetConfig.GetString("CacheDirectory", m_DefaultCacheDirectory);
148 150
149 m_CacheDirectory = assetConfig.GetString("CacheDirectory", m_DefaultCacheDirectory); 151 m_MemoryCacheEnabled = assetConfig.GetBoolean("MemoryCacheEnabled", m_MemoryCacheEnabled);
150 m_log.InfoFormat("[FLOTSAM ASSET CACHE]: Cache Directory", m_CacheDirectory); 152 m_MemoryExpiration = TimeSpan.FromHours(assetConfig.GetDouble("MemoryCacheTimeout", m_DefaultMemoryExpiration));
153
154 #if WAIT_ON_INPROGRESS_REQUESTS
155 m_WaitOnInprogressTimeout = assetConfig.GetInt("WaitOnInprogressTimeout", 3000);
156 #endif
157
158 m_LogLevel = assetConfig.GetInt("LogLevel", m_LogLevel);
159 m_HitRateDisplay = (ulong)assetConfig.GetLong("HitRateDisplay", (long)m_HitRateDisplay);
151 160
152 m_MemoryCacheEnabled = assetConfig.GetBoolean("MemoryCacheEnabled", false); 161 m_FileExpiration = TimeSpan.FromHours(assetConfig.GetDouble("FileCacheTimeout", m_DefaultFileExpiration));
153 m_MemoryExpiration = TimeSpan.FromHours(assetConfig.GetDouble("MemoryCacheTimeout", m_DefaultMemoryExpiration)); 162 m_FileExpirationCleanupTimer
163 = TimeSpan.FromHours(
164 assetConfig.GetDouble("FileCleanupTimer", m_FileExpirationCleanupTimer.TotalHours));
154 165
155#if WAIT_ON_INPROGRESS_REQUESTS 166 m_CacheDirectoryTiers = assetConfig.GetInt("CacheDirectoryTiers", m_CacheDirectoryTiers);
156 m_WaitOnInprogressTimeout = assetConfig.GetInt("WaitOnInprogressTimeout", 3000); 167 m_CacheDirectoryTierLen = assetConfig.GetInt("CacheDirectoryTierLength", m_CacheDirectoryTierLen);
157#endif 168
169 m_CacheWarnAt = assetConfig.GetInt("CacheWarnAt", m_CacheWarnAt);
170
171 m_DeepScanBeforePurge = assetConfig.GetBoolean("DeepScanBeforePurge", m_DeepScanBeforePurge);
172 }
158 173
159 m_LogLevel = assetConfig.GetInt("LogLevel", 0); 174 m_log.InfoFormat("[FLOTSAM ASSET CACHE]: Cache Directory {0}", m_CacheDirectory);
160 m_HitRateDisplay = (ulong)assetConfig.GetInt("HitRateDisplay", 1000);
161 175
162 m_FileExpiration = TimeSpan.FromHours(assetConfig.GetDouble("FileCacheTimeout", m_DefaultFileExpiration));
163 m_FileExpirationCleanupTimer = TimeSpan.FromHours(assetConfig.GetDouble("FileCleanupTimer", m_DefaultFileExpiration));
164 if ((m_FileExpiration > TimeSpan.Zero) && (m_FileExpirationCleanupTimer > TimeSpan.Zero)) 176 if ((m_FileExpiration > TimeSpan.Zero) && (m_FileExpirationCleanupTimer > TimeSpan.Zero))
165 { 177 {
166 m_CacheCleanTimer = new System.Timers.Timer(m_FileExpirationCleanupTimer.TotalMilliseconds); 178 m_CacheCleanTimer = new System.Timers.Timer(m_FileExpirationCleanupTimer.TotalMilliseconds);
@@ -170,7 +182,6 @@ namespace Flotsam.RegionModules.AssetCache
170 m_CacheCleanTimer.Start(); 182 m_CacheCleanTimer.Start();
171 } 183 }
172 184
173 m_CacheDirectoryTiers = assetConfig.GetInt("CacheDirectoryTiers", 1);
174 if (m_CacheDirectoryTiers < 1) 185 if (m_CacheDirectoryTiers < 1)
175 { 186 {
176 m_CacheDirectoryTiers = 1; 187 m_CacheDirectoryTiers = 1;
@@ -180,7 +191,6 @@ namespace Flotsam.RegionModules.AssetCache
180 m_CacheDirectoryTiers = 3; 191 m_CacheDirectoryTiers = 3;
181 } 192 }
182 193
183 m_CacheDirectoryTierLen = assetConfig.GetInt("CacheDirectoryTierLength", 3);
184 if (m_CacheDirectoryTierLen < 1) 194 if (m_CacheDirectoryTierLen < 1)
185 { 195 {
186 m_CacheDirectoryTierLen = 1; 196 m_CacheDirectoryTierLen = 1;
@@ -190,14 +200,10 @@ namespace Flotsam.RegionModules.AssetCache
190 m_CacheDirectoryTierLen = 4; 200 m_CacheDirectoryTierLen = 4;
191 } 201 }
192 202
193 m_CacheWarnAt = assetConfig.GetInt("CacheWarnAt", 30000); 203 MainConsole.Instance.Commands.AddCommand(Name, true, "fcache status", "fcache status", "Display cache status", HandleConsoleCommand);
194 204 MainConsole.Instance.Commands.AddCommand(Name, true, "fcache clear", "fcache clear [file] [memory]", "Remove all assets in the cache. If file or memory is specified then only this cache is cleared.", HandleConsoleCommand);
195 m_DeepScanBeforePurge = assetConfig.GetBoolean("DeepScanBeforePurge", false); 205 MainConsole.Instance.Commands.AddCommand(Name, true, "fcache assets", "fcache assets", "Attempt a deep scan and cache of all assets in all scenes", HandleConsoleCommand);
196 206 MainConsole.Instance.Commands.AddCommand(Name, true, "fcache expire", "fcache expire <datetime>", "Purge cached assets older then the specified date/time", HandleConsoleCommand);
197 MainConsole.Instance.Commands.AddCommand(this.Name, true, "fcache status", "fcache status", "Display cache status", HandleConsoleCommand);
198 MainConsole.Instance.Commands.AddCommand(this.Name, true, "fcache clear", "fcache clear [file] [memory]", "Remove all assets in the file and/or memory cache", HandleConsoleCommand);
199 MainConsole.Instance.Commands.AddCommand(this.Name, true, "fcache assets", "fcache assets", "Attempt a deep scan and cache of all assets in all scenes", HandleConsoleCommand);
200 MainConsole.Instance.Commands.AddCommand(this.Name, true, "fcache expire", "fcache expire <datetime>", "Purge cached assets older then the specified date/time", HandleConsoleCommand);
201 } 207 }
202 } 208 }
203 } 209 }
@@ -732,24 +738,39 @@ namespace Flotsam.RegionModules.AssetCache
732 break; 738 break;
733 739
734 case "clear": 740 case "clear":
735 if (cmdparams.Length < 3) 741 if (cmdparams.Length < 2)
736 { 742 {
737 m_log.Warn("[FLOTSAM ASSET CACHE] Please specify memory and/or file cache."); 743 m_log.Warn("[FLOTSAM ASSET CACHE] Usage is fcache clear [file] [memory]");
738 break; 744 break;
739 } 745 }
746
747 bool clearMemory = false, clearFile = false;
748
749 if (cmdparams.Length == 2)
750 {
751 clearMemory = true;
752 clearFile = true;
753 }
740 foreach (string s in cmdparams) 754 foreach (string s in cmdparams)
741 { 755 {
742 if (s.ToLower() == "memory") 756 if (s.ToLower() == "memory")
743 { 757 clearMemory = true;
744 m_MemoryCache.Clear();
745 m_log.Info("[FLOTSAM ASSET CACHE] Memory cache cleared.");
746 }
747 else if (s.ToLower() == "file") 758 else if (s.ToLower() == "file")
748 { 759 clearFile = true;
749 ClearFileCache();
750 m_log.Info("[FLOTSAM ASSET CACHE] File cache cleared.");
751 }
752 } 760 }
761
762 if (clearMemory)
763 {
764 m_MemoryCache.Clear();
765 m_log.Info("[FLOTSAM ASSET CACHE] Memory cache cleared.");
766 }
767
768 if (clearFile)
769 {
770 ClearFileCache();
771 m_log.Info("[FLOTSAM ASSET CACHE] File cache cleared.");
772 }
773
753 break; 774 break;
754 775
755 776
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs
index b9d6719..40506a5 100644
--- a/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs
@@ -29,6 +29,8 @@ using System;
29using System.Collections; 29using System.Collections;
30using System.Collections.Generic; 30using System.Collections.Generic;
31using System.Reflection; 31using System.Reflection;
32using System.Threading;
33
32using log4net; 34using log4net;
33using Nini.Config; 35using Nini.Config;
34using Nwc.XmlRpc; 36using Nwc.XmlRpc;
@@ -194,46 +196,46 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
194 196
195 //} 197 //}
196 198
197 private void CollectOnlineFriendsElsewhere(UUID userID, List<string> foreignFriends) 199 //private void CollectOnlineFriendsElsewhere(UUID userID, List<string> foreignFriends)
198 { 200 //{
199 // let's divide the friends on a per-domain basis 201 // // let's divide the friends on a per-domain basis
200 Dictionary<string, List<string>> friendsPerDomain = new Dictionary<string, List<string>>(); 202 // Dictionary<string, List<string>> friendsPerDomain = new Dictionary<string, List<string>>();
201 foreach (string friend in foreignFriends) 203 // foreach (string friend in foreignFriends)
202 { 204 // {
203 UUID friendID; 205 // UUID friendID;
204 if (!UUID.TryParse(friend, out friendID)) 206 // if (!UUID.TryParse(friend, out friendID))
205 { 207 // {
206 // it's a foreign friend 208 // // it's a foreign friend
207 string url = string.Empty, tmp = string.Empty; 209 // string url = string.Empty, tmp = string.Empty;
208 if (Util.ParseUniversalUserIdentifier(friend, out friendID, out url, out tmp, out tmp, out tmp)) 210 // if (Util.ParseUniversalUserIdentifier(friend, out friendID, out url, out tmp, out tmp, out tmp))
209 { 211 // {
210 if (!friendsPerDomain.ContainsKey(url)) 212 // if (!friendsPerDomain.ContainsKey(url))
211 friendsPerDomain[url] = new List<string>(); 213 // friendsPerDomain[url] = new List<string>();
212 friendsPerDomain[url].Add(friend); 214 // friendsPerDomain[url].Add(friend);
213 } 215 // }
214 } 216 // }
215 } 217 // }
216 218
217 // Now, call those worlds 219 // // Now, call those worlds
218 220
219 foreach (KeyValuePair<string, List<string>> kvp in friendsPerDomain) 221 // foreach (KeyValuePair<string, List<string>> kvp in friendsPerDomain)
220 { 222 // {
221 List<string> ids = new List<string>(); 223 // List<string> ids = new List<string>();
222 foreach (string f in kvp.Value) 224 // foreach (string f in kvp.Value)
223 ids.Add(f); 225 // ids.Add(f);
224 UserAgentServiceConnector uConn = new UserAgentServiceConnector(kvp.Key); 226 // UserAgentServiceConnector uConn = new UserAgentServiceConnector(kvp.Key);
225 List<UUID> online = uConn.GetOnlineFriends(userID, ids); 227 // List<UUID> online = uConn.GetOnlineFriends(userID, ids);
226 // Finally send the notifications to the user 228 // // Finally send the notifications to the user
227 // this whole process may take a while, so let's check at every 229 // // this whole process may take a while, so let's check at every
228 // iteration that the user is still here 230 // // iteration that the user is still here
229 IClientAPI client = LocateClientObject(userID); 231 // IClientAPI client = LocateClientObject(userID);
230 if (client != null) 232 // if (client != null)
231 client.SendAgentOnline(online.ToArray()); 233 // client.SendAgentOnline(online.ToArray());
232 else 234 // else
233 break; 235 // break;
234 } 236 // }
235 237
236 } 238 //}
237 239
238 protected override void StatusNotify(List<FriendInfo> friendList, UUID userID, bool online) 240 protected override void StatusNotify(List<FriendInfo> friendList, UUID userID, bool online)
239 { 241 {
@@ -278,8 +280,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
278 List<string> ids = new List<string>(); 280 List<string> ids = new List<string>();
279 foreach (FriendInfo f in kvp.Value) 281 foreach (FriendInfo f in kvp.Value)
280 ids.Add(f.Friend); 282 ids.Add(f.Friend);
281 UserAgentServiceConnector uConn = new UserAgentServiceConnector(kvp.Key); 283 UserAgentServiceConnector uConn = new UserAgentServiceConnector(kvp.Key, false);
282 List<UUID> friendsOnline = uConn.StatusNotification(ids, userID, online); 284 List<UUID> friendsOnline = uConn.StatusNotification(ids, userID, online);
285 Thread.Sleep(100);
283 // need to debug this here 286 // need to debug this here
284 if (online) 287 if (online)
285 { 288 {
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
index d6ef5df..8858ad5 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
@@ -147,8 +147,10 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
147 { 147 {
148 base.AgentHasMovedAway(sp, logout); 148 base.AgentHasMovedAway(sp, logout);
149 if (logout) 149 if (logout)
150 {
150 // Log them out of this grid 151 // Log them out of this grid
151 m_aScene.PresenceService.LogoutAgent(sp.ControllingClient.SessionId); 152 m_aScene.PresenceService.LogoutAgent(sp.ControllingClient.SessionId);
153 }
152 } 154 }
153 155
154 protected override bool CreateAgent(ScenePresence sp, GridRegion reg, GridRegion finalDestination, AgentCircuitData agentCircuit, uint teleportFlags, out string reason, out bool logout) 156 protected override bool CreateAgent(ScenePresence sp, GridRegion reg, GridRegion finalDestination, AgentCircuitData agentCircuit, uint teleportFlags, out string reason, out bool logout)
@@ -285,7 +287,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
285 287
286 } 288 }
287 289
288
289 #endregion 290 #endregion
290 291
291 #region IUserAgentVerificationModule 292 #region IUserAgentVerificationModule
diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
index ae4336c..accd094 100644
--- a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
@@ -82,8 +82,8 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
82 // } 82 // }
83 //} 83 //}
84 MainConsole.Instance.Commands.AddCommand("grid", true, 84 MainConsole.Instance.Commands.AddCommand("grid", true,
85 "show user-names", 85 "show names",
86 "show user-names", 86 "show names",
87 "Show the bindings between user UUIDs and user names", 87 "Show the bindings between user UUIDs and user names",
88 String.Empty, 88 String.Empty,
89 HandleShowUsers); 89 HandleShowUsers);
diff --git a/OpenSim/Region/CoreModules/Hypergrid/HGWorldMapModule.cs b/OpenSim/Region/CoreModules/Hypergrid/HGWorldMapModule.cs
index f066f83..0c60391 100644
--- a/OpenSim/Region/CoreModules/Hypergrid/HGWorldMapModule.cs
+++ b/OpenSim/Region/CoreModules/Hypergrid/HGWorldMapModule.cs
@@ -41,7 +41,10 @@ namespace OpenSim.Region.CoreModules.Hypergrid
41{ 41{
42 public class HGWorldMapModule : WorldMapModule 42 public class HGWorldMapModule : WorldMapModule
43 { 43 {
44 //private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 44 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
45
46 // Remember the map area that each client has been exposed to in this region
47 private Dictionary<UUID, List<MapBlockData>> m_SeenMapBlocks = new Dictionary<UUID, List<MapBlockData>>();
45 48
46 #region INonSharedRegionModule Members 49 #region INonSharedRegionModule Members
47 50
@@ -52,6 +55,13 @@ namespace OpenSim.Region.CoreModules.Hypergrid
52 m_Enabled = true; 55 m_Enabled = true;
53 } 56 }
54 57
58 public override void AddRegion(Scene scene)
59 {
60 base.AddRegion(scene);
61
62 scene.EventManager.OnClientClosed += new EventManager.ClientClosed(EventManager_OnClientClosed);
63 }
64
55 public override string Name 65 public override string Name
56 { 66 {
57 get { return "HGWorldMap"; } 67 get { return "HGWorldMap"; }
@@ -59,65 +69,70 @@ namespace OpenSim.Region.CoreModules.Hypergrid
59 69
60 #endregion 70 #endregion
61 71
62 protected override void GetAndSendBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY, uint flag) 72 void EventManager_OnClientClosed(UUID clientID, Scene scene)
63 { 73 {
64 List<MapBlockData> mapBlocks = new List<MapBlockData>(); 74 ScenePresence sp = scene.GetScenePresence(clientID);
65 List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID, 75 if (sp != null)
66 minX * (int)Constants.RegionSize, maxX * (int)Constants.RegionSize,
67 minY * (int)Constants.RegionSize, maxY * (int)Constants.RegionSize);
68
69 foreach (GridRegion r in regions)
70 { 76 {
71 uint x = 0, y = 0; 77 if (m_SeenMapBlocks.ContainsKey(clientID))
72 long handle = 0;
73 if (r.RegionSecret != null && r.RegionSecret != string.Empty)
74 { 78 {
75 if (long.TryParse(r.RegionSecret, out handle)) 79 List<MapBlockData> mapBlocks = m_SeenMapBlocks[clientID];
80 foreach (MapBlockData b in mapBlocks)
76 { 81 {
77 Utils.LongToUInts((ulong)handle, out x, out y); 82 b.Name = string.Empty;
78 x = x / Constants.RegionSize; 83 b.Access = 254; // means 'simulator is offline'. We need this because the viewer ignores 255's
79 y = y / Constants.RegionSize;
80 } 84 }
85
86 m_log.DebugFormat("[HG MAP]: Reseting {0} blocks", mapBlocks.Count);
87 sp.ControllingClient.SendMapBlock(mapBlocks, 0);
88 m_SeenMapBlocks.Remove(clientID);
81 } 89 }
90 }
91 }
82 92
83 if (handle == 0 || 93 protected override List<MapBlockData> GetAndSendBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY, uint flag)
84 // Check the distance from the current region 94 {
85 (handle != 0 && Math.Abs((int)(x - m_scene.RegionInfo.RegionLocX)) < 4096 && Math.Abs((int)(y - m_scene.RegionInfo.RegionLocY)) < 4096)) 95 List<MapBlockData> mapBlocks = base.GetAndSendBlocks(remoteClient, minX, minY, maxX, maxY, flag);
96 lock (m_SeenMapBlocks)
97 {
98 if (!m_SeenMapBlocks.ContainsKey(remoteClient.AgentId))
99 {
100 m_SeenMapBlocks.Add(remoteClient.AgentId, mapBlocks);
101 }
102 else
86 { 103 {
87 MapBlockData block = new MapBlockData(); 104 List<MapBlockData> seen = m_SeenMapBlocks[remoteClient.AgentId];
88 MapBlockFromGridRegion(block, r); 105 List<MapBlockData> newBlocks = new List<MapBlockData>();
89 mapBlocks.Add(block); 106 foreach (MapBlockData b in mapBlocks)
107 if (seen.Find(delegate(MapBlockData bdata) { return bdata.X == b.X && bdata.Y == b.Y; }) == null)
108 newBlocks.Add(b);
109 seen.AddRange(newBlocks);
90 } 110 }
91 } 111 }
92 112
93 // Different from super 113 return mapBlocks;
94 FillInMap(mapBlocks, minX, minY, maxX, maxY); 114 }
95 //
96 115
97 remoteClient.SendMapBlock(mapBlocks, 0); 116 }
98 117
99 } 118 class MapArea
119 {
120 public int minX;
121 public int minY;
122 public int maxX;
123 public int maxY;
100 124
125 public MapArea(int mix, int miy, int max, int may)
126 {
127 minX = mix;
128 minY = miy;
129 maxX = max;
130 maxY = may;
131 }
101 132
102 private void FillInMap(List<MapBlockData> mapBlocks, int minX, int minY, int maxX, int maxY) 133 public void Print()
103 { 134 {
104 for (int x = minX; x <= maxX; x++) 135 Console.WriteLine(String.Format(" --> Area is minX={0} minY={1} minY={2} maxY={3}", minX, minY, maxY, maxY));
105 {
106 for (int y = minY; y <= maxY; y++)
107 {
108 MapBlockData mblock = mapBlocks.Find(delegate(MapBlockData mb) { return ((mb.X == x) && (mb.Y == y)); });
109 if (mblock == null)
110 {
111 mblock = new MapBlockData();
112 mblock.X = (ushort)x;
113 mblock.Y = (ushort)y;
114 mblock.Name = "";
115 mblock.Access = 254; // means 'simulator is offline'. We need this because the viewer ignores 255's
116 mblock.MapImageId = UUID.Zero;
117 mapBlocks.Add(mblock);
118 }
119 }
120 }
121 } 136 }
122 } 137 }
123} 138}
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs
index d11d677..f85a917 100644
--- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs
+++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs
@@ -506,6 +506,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
506 currentRegionSettings.Elevation2SE = loadedRegionSettings.Elevation2SE; 506 currentRegionSettings.Elevation2SE = loadedRegionSettings.Elevation2SE;
507 currentRegionSettings.Elevation2SW = loadedRegionSettings.Elevation2SW; 507 currentRegionSettings.Elevation2SW = loadedRegionSettings.Elevation2SW;
508 currentRegionSettings.FixedSun = loadedRegionSettings.FixedSun; 508 currentRegionSettings.FixedSun = loadedRegionSettings.FixedSun;
509 currentRegionSettings.SunPosition = loadedRegionSettings.SunPosition;
509 currentRegionSettings.ObjectBonus = loadedRegionSettings.ObjectBonus; 510 currentRegionSettings.ObjectBonus = loadedRegionSettings.ObjectBonus;
510 currentRegionSettings.RestrictPushing = loadedRegionSettings.RestrictPushing; 511 currentRegionSettings.RestrictPushing = loadedRegionSettings.RestrictPushing;
511 currentRegionSettings.TerrainLowerLimit = loadedRegionSettings.TerrainLowerLimit; 512 currentRegionSettings.TerrainLowerLimit = loadedRegionSettings.TerrainLowerLimit;
@@ -518,6 +519,8 @@ namespace OpenSim.Region.CoreModules.World.Archiver
518 currentRegionSettings.WaterHeight = loadedRegionSettings.WaterHeight; 519 currentRegionSettings.WaterHeight = loadedRegionSettings.WaterHeight;
519 520
520 currentRegionSettings.Save(); 521 currentRegionSettings.Save();
522
523 m_scene.TriggerEstateSunUpdate();
521 524
522 IEstateModule estateModule = m_scene.RequestModuleInterface<IEstateModule>(); 525 IEstateModule estateModule = m_scene.RequestModuleInterface<IEstateModule>();
523 526
diff --git a/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs b/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs
index 34e2e23..6ba3459 100644
--- a/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs
+++ b/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs
@@ -440,6 +440,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests
440 rs.Elevation2SE = 9.2; 440 rs.Elevation2SE = 9.2;
441 rs.Elevation2SW = 2.1; 441 rs.Elevation2SW = 2.1;
442 rs.FixedSun = true; 442 rs.FixedSun = true;
443 rs.SunPosition = 12.0;
443 rs.ObjectBonus = 1.4; 444 rs.ObjectBonus = 1.4;
444 rs.RestrictPushing = true; 445 rs.RestrictPushing = true;
445 rs.TerrainLowerLimit = 0.4; 446 rs.TerrainLowerLimit = 0.4;
@@ -485,6 +486,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests
485 Assert.That(loadedRs.Elevation2SE, Is.EqualTo(9.2)); 486 Assert.That(loadedRs.Elevation2SE, Is.EqualTo(9.2));
486 Assert.That(loadedRs.Elevation2SW, Is.EqualTo(2.1)); 487 Assert.That(loadedRs.Elevation2SW, Is.EqualTo(2.1));
487 Assert.That(loadedRs.FixedSun, Is.True); 488 Assert.That(loadedRs.FixedSun, Is.True);
489 Assert.AreEqual(12.0, loadedRs.SunPosition);
488 Assert.That(loadedRs.ObjectBonus, Is.EqualTo(1.4)); 490 Assert.That(loadedRs.ObjectBonus, Is.EqualTo(1.4));
489 Assert.That(loadedRs.RestrictPushing, Is.True); 491 Assert.That(loadedRs.RestrictPushing, Is.True);
490 Assert.That(loadedRs.TerrainLowerLimit, Is.EqualTo(0.4)); 492 Assert.That(loadedRs.TerrainLowerLimit, Is.EqualTo(0.4));
diff --git a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
index 3f6f359..fc240d3 100644
--- a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
+++ b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
@@ -209,16 +209,16 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
209 // path, param, agentID.ToString()); 209 // path, param, agentID.ToString());
210 210
211 // There is a major hack going on in this method. The viewer doesn't request 211 // There is a major hack going on in this method. The viewer doesn't request
212 // map blocks (RequestMapBlocks) above 4096. That means that if we don't hack, 212 // map blocks (RequestMapBlocks) above 2048. That means that if we don't hack,
213 // grids above that cell don't have a map at all. So, here's the hack: we wait 213 // grids above that cell don't have a map at all. So, here's the hack: we wait
214 // for this CAP request to come, and we inject the map blocks at this point. 214 // for this CAP request to come, and we inject the map blocks at this point.
215 // In a normal scenario, this request simply sends back the MapLayer (the blue color). 215 // In a normal scenario, this request simply sends back the MapLayer (the blue color).
216 // In the hacked scenario, it also sends the map blocks via UDP. 216 // In the hacked scenario, it also sends the map blocks via UDP.
217 // 217 //
218 // 6/8/2011 -- I'm adding an explicit 4096 check, so that we never forget that there is 218 // 6/8/2011 -- I'm adding an explicit 2048 check, so that we never forget that there is
219 // a hack here, and so that regions below 4096 don't get spammed with unnecessary map blocks. 219 // a hack here, and so that regions below 4096 don't get spammed with unnecessary map blocks.
220 220
221 if (m_scene.RegionInfo.RegionLocX >= 4096 || m_scene.RegionInfo.RegionLocY >= 4096) 221 if (m_scene.RegionInfo.RegionLocX >= 2048 || m_scene.RegionInfo.RegionLocY >= 2048)
222 { 222 {
223 ScenePresence avatarPresence = null; 223 ScenePresence avatarPresence = null;
224 224
@@ -845,7 +845,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
845 } 845 }
846 } 846 }
847 847
848 protected virtual void GetAndSendBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY, uint flag) 848 protected virtual List<MapBlockData> GetAndSendBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY, uint flag)
849 { 849 {
850 List<MapBlockData> mapBlocks = new List<MapBlockData>(); 850 List<MapBlockData> mapBlocks = new List<MapBlockData>();
851 List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID, 851 List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID,
@@ -860,6 +860,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
860 mapBlocks.Add(block); 860 mapBlocks.Add(block);
861 } 861 }
862 remoteClient.SendMapBlock(mapBlocks, 0); 862 remoteClient.SendMapBlock(mapBlocks, 0);
863
864 return mapBlocks;
863 } 865 }
864 866
865 protected void MapBlockFromGridRegion(MapBlockData block, GridRegion r) 867 protected void MapBlockFromGridRegion(MapBlockData block, GridRegion r)
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index c0236f4..39d4a29 100644
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -1584,7 +1584,7 @@ namespace OpenSim.Region.Framework.Scenes
1584 } 1584 }
1585 1585
1586 /// <summary> 1586 /// <summary>
1587 /// 1587 /// Handle a prim description set request from a viewer.
1588 /// </summary> 1588 /// </summary>
1589 /// <param name="primLocalID"></param> 1589 /// <param name="primLocalID"></param>
1590 /// <param name="description"></param> 1590 /// <param name="description"></param>
@@ -1601,8 +1601,17 @@ namespace OpenSim.Region.Framework.Scenes
1601 } 1601 }
1602 } 1602 }
1603 1603
1604 /// <summary>
1605 /// Set a click action for the prim.
1606 /// </summary>
1607 /// <param name="remoteClient"></param>
1608 /// <param name="primLocalID"></param>
1609 /// <param name="clickAction"></param>
1604 protected internal void PrimClickAction(IClientAPI remoteClient, uint primLocalID, string clickAction) 1610 protected internal void PrimClickAction(IClientAPI remoteClient, uint primLocalID, string clickAction)
1605 { 1611 {
1612// m_log.DebugFormat(
1613// "[SCENEGRAPH]: User {0} set click action for {1} to {2}", remoteClient.Name, primLocalID, clickAction);
1614
1606 SceneObjectGroup group = GetGroupByPrim(primLocalID); 1615 SceneObjectGroup group = GetGroupByPrim(primLocalID);
1607 if (group != null) 1616 if (group != null)
1608 { 1617 {
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 74d24a6..482597d 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -563,6 +563,11 @@ namespace OpenSim.Region.Framework.Scenes
563 563
564 #endregion 564 #endregion
565 565
566// ~SceneObjectGroup()
567// {
568// m_log.DebugFormat("[SCENE OBJECT GROUP]: Destructor called for {0}, local id {1}", Name, LocalId);
569// }
570
566 #region Constructors 571 #region Constructors
567 572
568 /// <summary> 573 /// <summary>
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index cb321aa..43dd835 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -357,6 +357,13 @@ namespace OpenSim.Region.Framework.Scenes
357 357
358 #endregion Fields 358 #endregion Fields
359 359
360// ~SceneObjectPart()
361// {
362// m_log.DebugFormat(
363// "[SCENE OBJECT PART]: Destructor called for {0}, local id {1}, parent {2} {3}",
364// Name, LocalId, ParentGroup.Name, ParentGroup.LocalId);
365// }
366
360 #region Constructors 367 #region Constructors
361 368
362 /// <summary> 369 /// <summary>
diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
index 5c284b9..9174070 100644
--- a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
+++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
@@ -1178,7 +1178,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
1178 writer.WriteElementString("R", sop.Color.R.ToString(Utils.EnUsCulture)); 1178 writer.WriteElementString("R", sop.Color.R.ToString(Utils.EnUsCulture));
1179 writer.WriteElementString("G", sop.Color.G.ToString(Utils.EnUsCulture)); 1179 writer.WriteElementString("G", sop.Color.G.ToString(Utils.EnUsCulture));
1180 writer.WriteElementString("B", sop.Color.B.ToString(Utils.EnUsCulture)); 1180 writer.WriteElementString("B", sop.Color.B.ToString(Utils.EnUsCulture));
1181 writer.WriteElementString("A", sop.Color.G.ToString(Utils.EnUsCulture)); 1181 writer.WriteElementString("A", sop.Color.A.ToString(Utils.EnUsCulture));
1182 writer.WriteEndElement(); 1182 writer.WriteEndElement();
1183 1183
1184 writer.WriteElementString("Text", sop.Text); 1184 writer.WriteElementString("Text", sop.Text);
diff --git a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs
index f89b824..99b2d84 100644
--- a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs
+++ b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs
@@ -303,7 +303,11 @@ namespace OpenSim.Region.Physics.Meshing
303 if (meshOsd is OSDMap) 303 if (meshOsd is OSDMap)
304 { 304 {
305 OSDMap map = (OSDMap)meshOsd; 305 OSDMap map = (OSDMap)meshOsd;
306 OSDMap physicsParms = (OSDMap)map["physics_shape"]; 306 OSDMap physicsParms = (OSDMap)map["physics_shape"]; // old asset format
307
308 if (physicsParms.Count == 0)
309 physicsParms = (OSDMap)map["physics_mesh"]; // new asset format
310
307 int physOffset = physicsParms["offset"].AsInteger() + (int)start; 311 int physOffset = physicsParms["offset"].AsInteger() + (int)start;
308 int physSize = physicsParms["size"].AsInteger(); 312 int physSize = physicsParms["size"].AsInteger();
309 313