diff options
Diffstat (limited to 'OpenSim/Region')
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; | |||
29 | using System.Collections; | 29 | using System.Collections; |
30 | using System.Collections.Generic; | 30 | using System.Collections.Generic; |
31 | using System.Reflection; | 31 | using System.Reflection; |
32 | using System.Threading; | ||
33 | |||
32 | using log4net; | 34 | using log4net; |
33 | using Nini.Config; | 35 | using Nini.Config; |
34 | using Nwc.XmlRpc; | 36 | using 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 | ||