diff options
Diffstat (limited to '')
17 files changed, 255 insertions, 65 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs index 31e8a2e..b588704 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | |||
@@ -626,10 +626,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
626 | 626 | ||
627 | m_scene.InventoryService.UpdateItem(item); | 627 | m_scene.InventoryService.UpdateItem(item); |
628 | 628 | ||
629 | // this gets called when the agent logs off! | 629 | // If the name of the object has been changed whilst attached then we want to update the inventory |
630 | // item in the viewer. | ||
630 | if (sp.ControllingClient != null) | 631 | if (sp.ControllingClient != null) |
631 | sp.ControllingClient.SendInventoryItemCreateUpdate(item, 0); | 632 | sp.ControllingClient.SendInventoryItemCreateUpdate(item, 0); |
632 | } | 633 | } |
634 | |||
633 | grp.HasGroupChanged = false; // Prevent it being saved over and over | 635 | grp.HasGroupChanged = false; // Prevent it being saved over and over |
634 | } | 636 | } |
635 | // else | 637 | // else |
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs index cd1e1c1..273e290 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs | |||
@@ -47,6 +47,7 @@ using OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation; | |||
47 | using OpenSim.Region.CoreModules.World.Serialiser; | 47 | using OpenSim.Region.CoreModules.World.Serialiser; |
48 | using OpenSim.Region.Framework.Scenes; | 48 | using OpenSim.Region.Framework.Scenes; |
49 | using OpenSim.Region.Framework.Interfaces; | 49 | using OpenSim.Region.Framework.Interfaces; |
50 | using OpenSim.Region.ScriptEngine.Interfaces; | ||
50 | using OpenSim.Region.ScriptEngine.XEngine; | 51 | using OpenSim.Region.ScriptEngine.XEngine; |
51 | using OpenSim.Services.Interfaces; | 52 | using OpenSim.Services.Interfaces; |
52 | using OpenSim.Tests.Common; | 53 | using OpenSim.Tests.Common; |
@@ -289,21 +290,37 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests | |||
289 | { | 290 | { |
290 | TestHelpers.InMethod(); | 291 | TestHelpers.InMethod(); |
291 | 292 | ||
292 | Scene scene = CreateTestScene(); | 293 | Scene scene = CreateScriptingEnabledTestScene(); |
293 | UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(scene, 0x1); | 294 | UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(scene, 0x1); |
294 | ScenePresence sp = SceneHelpers.AddScenePresence(scene, ua1.PrincipalID); | 295 | ScenePresence sp = SceneHelpers.AddScenePresence(scene, ua1); |
295 | 296 | ||
296 | SceneObjectGroup so = SceneHelpers.CreateSceneObject(1, sp.UUID, "att-name", 0x10); | 297 | SceneObjectGroup so = SceneHelpers.CreateSceneObject(1, sp.UUID, "att-name", 0x10); |
297 | TaskInventoryHelpers.AddScript(scene, so.RootPart); | 298 | TaskInventoryItem scriptItem |
299 | = TaskInventoryHelpers.AddScript( | ||
300 | scene, | ||
301 | so.RootPart, | ||
302 | "scriptItem", | ||
303 | "default { attach(key id) { if (id != NULL_KEY) { llSay(0, \"Hello World\"); } } }"); | ||
304 | |||
298 | InventoryItemBase userItem = UserInventoryHelpers.AddInventoryItem(scene, so, 0x100, 0x1000); | 305 | InventoryItemBase userItem = UserInventoryHelpers.AddInventoryItem(scene, so, 0x100, 0x1000); |
299 | 306 | ||
307 | // FIXME: Right now, we have to do a tricksy chat listen to make sure we know when the script is running. | ||
308 | // In the future, we need to be able to do this programatically more predicably. | ||
309 | scene.EventManager.OnChatFromWorld += OnChatFromWorld; | ||
310 | |||
300 | scene.AttachmentsModule.RezSingleAttachmentFromInventory(sp, userItem.ID, (uint)AttachmentPoint.Chest); | 311 | scene.AttachmentsModule.RezSingleAttachmentFromInventory(sp, userItem.ID, (uint)AttachmentPoint.Chest); |
301 | 312 | ||
313 | m_chatEvent.WaitOne(60000); | ||
314 | |||
302 | // TODO: Need to have a test that checks the script is actually started but this involves a lot more | 315 | // TODO: Need to have a test that checks the script is actually started but this involves a lot more |
303 | // plumbing of the script engine and either pausing for events or more infrastructure to turn off various | 316 | // plumbing of the script engine and either pausing for events or more infrastructure to turn off various |
304 | // script engine delays/asychronicity that isn't helpful in an automated regression testing context. | 317 | // script engine delays/asychronicity that isn't helpful in an automated regression testing context. |
305 | SceneObjectGroup attSo = scene.GetSceneObjectGroup(so.Name); | 318 | SceneObjectGroup attSo = scene.GetSceneObjectGroup(so.Name); |
306 | Assert.That(attSo.ContainsScripts(), Is.True); | 319 | Assert.That(attSo.ContainsScripts(), Is.True); |
320 | |||
321 | TaskInventoryItem reRezzedScriptItem = attSo.RootPart.Inventory.GetInventoryItem(scriptItem.Name); | ||
322 | IScriptModule xengine = scene.RequestModuleInterface<IScriptModule>(); | ||
323 | Assert.That(xengine.GetScriptState(reRezzedScriptItem.ItemID), Is.True); | ||
307 | } | 324 | } |
308 | 325 | ||
309 | [Test] | 326 | [Test] |
@@ -379,29 +396,49 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests | |||
379 | ScenePresence sp = SceneHelpers.AddScenePresence(scene, ua1); | 396 | ScenePresence sp = SceneHelpers.AddScenePresence(scene, ua1); |
380 | 397 | ||
381 | SceneObjectGroup so = SceneHelpers.CreateSceneObject(1, sp.UUID, "att-name", 0x10); | 398 | SceneObjectGroup so = SceneHelpers.CreateSceneObject(1, sp.UUID, "att-name", 0x10); |
382 | TaskInventoryHelpers.AddScript(scene, so.RootPart); | 399 | TaskInventoryItem scriptTaskItem |
400 | = TaskInventoryHelpers.AddScript( | ||
401 | scene, | ||
402 | so.RootPart, | ||
403 | "scriptItem", | ||
404 | "default { attach(key id) { if (id != NULL_KEY) { llSay(0, \"Hello World\"); } } }"); | ||
405 | |||
383 | InventoryItemBase userItem = UserInventoryHelpers.AddInventoryItem(scene, so, 0x100, 0x1000); | 406 | InventoryItemBase userItem = UserInventoryHelpers.AddInventoryItem(scene, so, 0x100, 0x1000); |
384 | 407 | ||
385 | // FIXME: Right now, we have to do a tricksy chat listen to make sure we know when the script is running. | 408 | // FIXME: Right now, we have to do a tricksy chat listen to make sure we know when the script is running. |
386 | // In the future, we need to be able to do this programatically more predicably. | 409 | // In the future, we need to be able to do this programatically more predicably. |
387 | scene.EventManager.OnChatFromWorld += OnChatFromWorld; | 410 | scene.EventManager.OnChatFromWorld += OnChatFromWorld; |
388 | 411 | ||
389 | SceneObjectGroup soRezzed | 412 | SceneObjectGroup rezzedSo |
390 | = (SceneObjectGroup)scene.AttachmentsModule.RezSingleAttachmentFromInventory(sp, userItem.ID, (uint)AttachmentPoint.Chest); | 413 | = (SceneObjectGroup)(scene.AttachmentsModule.RezSingleAttachmentFromInventory(sp, userItem.ID, (uint)AttachmentPoint.Chest)); |
391 | 414 | ||
392 | // Wait for chat to signal rezzed script has been started. | 415 | // Wait for chat to signal rezzed script has been started. |
393 | m_chatEvent.WaitOne(60000); | 416 | m_chatEvent.WaitOne(60000); |
394 | 417 | ||
395 | scene.AttachmentsModule.DetachSingleAttachmentToInv(sp, soRezzed); | 418 | scene.AttachmentsModule.DetachSingleAttachmentToInv(sp, rezzedSo); |
396 | 419 | ||
397 | InventoryItemBase userItemUpdated = scene.InventoryService.GetItem(userItem); | 420 | InventoryItemBase userItemUpdated = scene.InventoryService.GetItem(userItem); |
398 | AssetBase asset = scene.AssetService.Get(userItemUpdated.AssetID.ToString()); | 421 | AssetBase asset = scene.AssetService.Get(userItemUpdated.AssetID.ToString()); |
399 | 422 | ||
423 | // TODO: It would probably be better here to check script state via the saving and retrieval of state | ||
424 | // information at a higher level, rather than having to inspect the serialization. | ||
400 | XmlDocument soXml = new XmlDocument(); | 425 | XmlDocument soXml = new XmlDocument(); |
401 | soXml.LoadXml(Encoding.UTF8.GetString(asset.Data)); | 426 | soXml.LoadXml(Encoding.UTF8.GetString(asset.Data)); |
402 | 427 | ||
403 | XmlNodeList scriptStateNodes = soXml.GetElementsByTagName("ScriptState"); | 428 | XmlNodeList scriptStateNodes = soXml.GetElementsByTagName("ScriptState"); |
404 | Assert.That(scriptStateNodes.Count, Is.EqualTo(1)); | 429 | Assert.That(scriptStateNodes.Count, Is.EqualTo(1)); |
430 | |||
431 | // Re-rez the attachment to check script running state | ||
432 | SceneObjectGroup reRezzedSo = (SceneObjectGroup)(scene.AttachmentsModule.RezSingleAttachmentFromInventory(sp, userItem.ID, (uint)AttachmentPoint.Chest)); | ||
433 | |||
434 | // Wait for chat to signal rezzed script has been started. | ||
435 | m_chatEvent.WaitOne(60000); | ||
436 | |||
437 | TaskInventoryItem reRezzedScriptItem = reRezzedSo.RootPart.Inventory.GetInventoryItem(scriptTaskItem.Name); | ||
438 | IScriptModule xengine = scene.RequestModuleInterface<IScriptModule>(); | ||
439 | Assert.That(xengine.GetScriptState(reRezzedScriptItem.ItemID), Is.True); | ||
440 | |||
441 | // Console.WriteLine(soXml.OuterXml); | ||
405 | } | 442 | } |
406 | 443 | ||
407 | /// <summary> | 444 | /// <summary> |
diff --git a/OpenSim/Region/CoreModules/Avatar/Commands/UserCommandsModule.cs b/OpenSim/Region/CoreModules/Avatar/Commands/UserCommandsModule.cs index 4bcd2ac..764adf9 100644 --- a/OpenSim/Region/CoreModules/Avatar/Commands/UserCommandsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Commands/UserCommandsModule.cs | |||
@@ -37,7 +37,7 @@ using Nini.Config; | |||
37 | using OpenMetaverse; | 37 | using OpenMetaverse; |
38 | using OpenSim.Framework; | 38 | using OpenSim.Framework; |
39 | using OpenSim.Framework.Console; | 39 | using OpenSim.Framework.Console; |
40 | using OpenSim.Framework.Statistics; | 40 | using OpenSim.Framework.Monitoring; |
41 | using OpenSim.Region.Framework.Interfaces; | 41 | using OpenSim.Region.Framework.Interfaces; |
42 | using OpenSim.Region.Framework.Scenes; | 42 | using OpenSim.Region.Framework.Scenes; |
43 | 43 | ||
diff --git a/OpenSim/Region/CoreModules/Avatar/Groups/GroupsModule.cs b/OpenSim/Region/CoreModules/Avatar/Groups/GroupsModule.cs index 31363e5..b258e13 100644 --- a/OpenSim/Region/CoreModules/Avatar/Groups/GroupsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Groups/GroupsModule.cs | |||
@@ -96,7 +96,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Groups | |||
96 | 96 | ||
97 | scene.EventManager.OnNewClient += OnNewClient; | 97 | scene.EventManager.OnNewClient += OnNewClient; |
98 | scene.EventManager.OnClientClosed += OnClientClosed; | 98 | scene.EventManager.OnClientClosed += OnClientClosed; |
99 | scene.EventManager.OnIncomingInstantMessage += OnGridInstantMessage; | 99 | // scene.EventManager.OnIncomingInstantMessage += OnGridInstantMessage; |
100 | } | 100 | } |
101 | 101 | ||
102 | public void PostInitialise() | 102 | public void PostInitialise() |
@@ -133,7 +133,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Groups | |||
133 | private void OnNewClient(IClientAPI client) | 133 | private void OnNewClient(IClientAPI client) |
134 | { | 134 | { |
135 | // Subscribe to instant messages | 135 | // Subscribe to instant messages |
136 | client.OnInstantMessage += OnInstantMessage; | 136 | // client.OnInstantMessage += OnInstantMessage; |
137 | client.OnAgentDataUpdateRequest += OnAgentDataUpdateRequest; | 137 | client.OnAgentDataUpdateRequest += OnAgentDataUpdateRequest; |
138 | client.OnUUIDGroupNameRequest += HandleUUIDGroupNameRequest; | 138 | client.OnUUIDGroupNameRequest += HandleUUIDGroupNameRequest; |
139 | lock (m_ClientMap) | 139 | lock (m_ClientMap) |
@@ -171,15 +171,15 @@ namespace OpenSim.Region.CoreModules.Avatar.Groups | |||
171 | ActiveGroupTitle); | 171 | ActiveGroupTitle); |
172 | } | 172 | } |
173 | 173 | ||
174 | private void OnInstantMessage(IClientAPI client, GridInstantMessage im) | 174 | // private void OnInstantMessage(IClientAPI client, GridInstantMessage im) |
175 | { | 175 | // { |
176 | } | 176 | // } |
177 | 177 | ||
178 | private void OnGridInstantMessage(GridInstantMessage msg) | 178 | // private void OnGridInstantMessage(GridInstantMessage msg) |
179 | { | 179 | // { |
180 | // Trigger the above event handler | 180 | // // Trigger the above event handler |
181 | OnInstantMessage(null, msg); | 181 | // OnInstantMessage(null, msg); |
182 | } | 182 | // } |
183 | 183 | ||
184 | private void HandleUUIDGroupNameRequest(UUID id,IClientAPI remote_client) | 184 | private void HandleUUIDGroupNameRequest(UUID id,IClientAPI remote_client) |
185 | { | 185 | { |
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs index 6064ddc..1406aae 100644 --- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs | |||
@@ -141,13 +141,15 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
141 | foreach (Scene scene in m_Scenes) | 141 | foreach (Scene scene in m_Scenes) |
142 | { | 142 | { |
143 | // m_log.DebugFormat( | 143 | // m_log.DebugFormat( |
144 | // "[INSTANT MESSAGE]: Looking for root agent {0} in {1}", | 144 | // "[INSTANT MESSAGE]: Looking for root agent {0} in {1}", |
145 | // toAgentID.ToString(), scene.RegionInfo.RegionName); | 145 | // toAgentID.ToString(), scene.RegionInfo.RegionName); |
146 | |||
146 | ScenePresence sp = scene.GetScenePresence(toAgentID); | 147 | ScenePresence sp = scene.GetScenePresence(toAgentID); |
147 | if (sp != null && !sp.IsChildAgent) | 148 | if (sp != null && !sp.IsChildAgent) |
148 | { | 149 | { |
149 | // Local message | 150 | // Local message |
150 | // m_log.DebugFormat("[INSTANT MESSAGE]: Delivering IM to root agent {0} {1}", user.Name, toAgentID); | 151 | m_log.DebugFormat("[INSTANT MESSAGE]: Delivering IM to root agent {0} {1}", sp.Name, toAgentID); |
152 | |||
151 | sp.ControllingClient.SendInstantMessage(im); | 153 | sp.ControllingClient.SendInstantMessage(im); |
152 | 154 | ||
153 | // Message sent | 155 | // Message sent |
@@ -159,13 +161,15 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
159 | // try child avatar second | 161 | // try child avatar second |
160 | foreach (Scene scene in m_Scenes) | 162 | foreach (Scene scene in m_Scenes) |
161 | { | 163 | { |
162 | // m_log.DebugFormat( | 164 | m_log.DebugFormat( |
163 | // "[INSTANT MESSAGE]: Looking for child of {0} in {1}", toAgentID, scene.RegionInfo.RegionName); | 165 | "[INSTANT MESSAGE]: Looking for child of {0} in {1}", toAgentID, scene.RegionInfo.RegionName); |
166 | |||
164 | ScenePresence sp = scene.GetScenePresence(toAgentID); | 167 | ScenePresence sp = scene.GetScenePresence(toAgentID); |
165 | if (sp != null) | 168 | if (sp != null) |
166 | { | 169 | { |
167 | // Local message | 170 | // Local message |
168 | // m_log.DebugFormat("[INSTANT MESSAGE]: Delivering IM to child agent {0} {1}", user.Name, toAgentID); | 171 | m_log.DebugFormat("[INSTANT MESSAGE]: Delivering IM to child agent {0} {1}", sp.Name, toAgentID); |
172 | |||
169 | sp.ControllingClient.SendInstantMessage(im); | 173 | sp.ControllingClient.SendInstantMessage(im); |
170 | 174 | ||
171 | // Message sent | 175 | // Message sent |
@@ -174,10 +178,9 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
174 | } | 178 | } |
175 | } | 179 | } |
176 | 180 | ||
177 | // m_log.DebugFormat("[INSTANT MESSAGE]: Delivering IM to {0} via XMLRPC", im.toAgentID); | 181 | m_log.DebugFormat("[INSTANT MESSAGE]: Delivering IM to {0} via XMLRPC", im.toAgentID); |
178 | SendGridInstantMessageViaXMLRPC(im, result); | ||
179 | 182 | ||
180 | return; | 183 | SendGridInstantMessageViaXMLRPC(im, result); |
181 | } | 184 | } |
182 | 185 | ||
183 | private void HandleUndeliveredMessage(GridInstantMessage im, MessageResultNotification result) | 186 | private void HandleUndeliveredMessage(GridInstantMessage im, MessageResultNotification result) |
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs index 80554fb..81de29c 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs | |||
@@ -313,8 +313,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer | |||
313 | m_TransferModule.SendInstantMessage(im, delegate(bool success) {}); | 313 | m_TransferModule.SendInstantMessage(im, delegate(bool success) {}); |
314 | } | 314 | } |
315 | } | 315 | } |
316 | else if (im.dialog == (byte) InstantMessageDialog.InventoryDeclined || | 316 | else if ( |
317 | im.dialog == (byte) InstantMessageDialog.TaskInventoryDeclined) | 317 | im.dialog == (byte)InstantMessageDialog.InventoryDeclined |
318 | || im.dialog == (byte)InstantMessageDialog.TaskInventoryDeclined) | ||
318 | { | 319 | { |
319 | // Here, the recipient is local and we can assume that the | 320 | // Here, the recipient is local and we can assume that the |
320 | // inventory is loaded. Courtesy of the above bulk update, | 321 | // inventory is loaded. Courtesy of the above bulk update, |
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs index d30c2e2..9a56f42 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs | |||
@@ -204,8 +204,9 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
204 | 204 | ||
205 | AssetBase asset = m_Scene.CreateAsset(name, description, assetType, data, remoteClient.AgentId); | 205 | AssetBase asset = m_Scene.CreateAsset(name, description, assetType, data, remoteClient.AgentId); |
206 | m_Scene.AssetService.Store(asset); | 206 | m_Scene.AssetService.Store(asset); |
207 | 207 | m_Scene.CreateNewInventoryItem( | |
208 | m_Scene.CreateNewInventoryItem(remoteClient, remoteClient.AgentId.ToString(), string.Empty, folderID, asset.Name, 0, callbackID, asset, invType, nextOwnerMask, creationDate); | 208 | remoteClient, remoteClient.AgentId.ToString(), string.Empty, folderID, |
209 | name, description, 0, callbackID, asset, invType, nextOwnerMask, creationDate); | ||
209 | } | 210 | } |
210 | else | 211 | else |
211 | { | 212 | { |
diff --git a/OpenSim/Region/CoreModules/Framework/Statistics/Logging/BinaryLoggingModule.cs b/OpenSim/Region/CoreModules/Framework/Statistics/Logging/BinaryLoggingModule.cs index a75ff62..fb74cc6 100644 --- a/OpenSim/Region/CoreModules/Framework/Statistics/Logging/BinaryLoggingModule.cs +++ b/OpenSim/Region/CoreModules/Framework/Statistics/Logging/BinaryLoggingModule.cs | |||
@@ -39,7 +39,7 @@ using OpenSim.Region.Framework; | |||
39 | using OpenSim.Region.Framework.Interfaces; | 39 | using OpenSim.Region.Framework.Interfaces; |
40 | using OpenSim.Region.Framework.Scenes; | 40 | using OpenSim.Region.Framework.Scenes; |
41 | 41 | ||
42 | namespace OpenSim.Region.CoreModules.Avatar.Attachments | 42 | namespace OpenSim.Region.CoreModules.Framework.Statistics.Logging |
43 | { | 43 | { |
44 | [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "BinaryLoggingModule")] | 44 | [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "BinaryLoggingModule")] |
45 | public class BinaryLoggingModule : INonSharedRegionModule | 45 | public class BinaryLoggingModule : INonSharedRegionModule |
diff --git a/OpenSim/Region/CoreModules/Framework/Statistics/Logging/LogWriter.cs b/OpenSim/Region/CoreModules/Framework/Statistics/Logging/LogWriter.cs new file mode 100755 index 0000000..65e4c90 --- /dev/null +++ b/OpenSim/Region/CoreModules/Framework/Statistics/Logging/LogWriter.cs | |||
@@ -0,0 +1,161 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSimulator Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | using System; | ||
29 | using System.IO; | ||
30 | using System.Text; | ||
31 | using log4net; | ||
32 | |||
33 | namespace OpenSim.Region.CoreModules.Framework.Statistics.Logging | ||
34 | { | ||
35 | /// <summary> | ||
36 | /// Class for writing a high performance, high volume log file. | ||
37 | /// Sometimes, to debug, one has a high volume logging to do and the regular | ||
38 | /// log file output is not appropriate. | ||
39 | /// Create a new instance with the parameters needed and | ||
40 | /// call Write() to output a line. Call Close() when finished. | ||
41 | /// If created with no parameters, it will not log anything. | ||
42 | /// </summary> | ||
43 | public class LogWriter : IDisposable | ||
44 | { | ||
45 | public bool Enabled { get; private set; } | ||
46 | |||
47 | private string m_logDirectory = "."; | ||
48 | private int m_logMaxFileTimeMin = 5; // 5 minutes | ||
49 | public String LogFileHeader { get; set; } | ||
50 | |||
51 | private StreamWriter m_logFile = null; | ||
52 | private TimeSpan m_logFileLife; | ||
53 | private DateTime m_logFileEndTime; | ||
54 | private Object m_logFileWriteLock = new Object(); | ||
55 | |||
56 | // set externally when debugging. If let 'null', this does not write any error messages. | ||
57 | public ILog ErrorLogger = null; | ||
58 | private string LogHeader = "[LOG WRITER]"; | ||
59 | |||
60 | /// <summary> | ||
61 | /// Create a log writer that will not write anything. Good for when not enabled | ||
62 | /// but the write statements are still in the code. | ||
63 | /// </summary> | ||
64 | public LogWriter() | ||
65 | { | ||
66 | Enabled = false; | ||
67 | m_logFile = null; | ||
68 | } | ||
69 | |||
70 | /// <summary> | ||
71 | /// Create a log writer instance. | ||
72 | /// </summary> | ||
73 | /// <param name="dir">The directory to create the log file in. May be 'null' for default.</param> | ||
74 | /// <param name="headr">The characters that begin the log file name. May be 'null' for default.</param> | ||
75 | /// <param name="maxFileTime">Maximum age of a log file in minutes. If zero, will set default.</param> | ||
76 | public LogWriter(string dir, string headr, int maxFileTime) | ||
77 | { | ||
78 | m_logDirectory = dir == null ? "." : dir; | ||
79 | |||
80 | LogFileHeader = headr == null ? "log-" : headr; | ||
81 | |||
82 | m_logMaxFileTimeMin = maxFileTime; | ||
83 | if (m_logMaxFileTimeMin < 1) | ||
84 | m_logMaxFileTimeMin = 5; | ||
85 | |||
86 | m_logFileLife = new TimeSpan(0, m_logMaxFileTimeMin, 0); | ||
87 | m_logFileEndTime = DateTime.Now + m_logFileLife; | ||
88 | |||
89 | Enabled = true; | ||
90 | } | ||
91 | |||
92 | public void Dispose() | ||
93 | { | ||
94 | this.Close(); | ||
95 | } | ||
96 | |||
97 | public void Close() | ||
98 | { | ||
99 | Enabled = false; | ||
100 | if (m_logFile != null) | ||
101 | { | ||
102 | m_logFile.Close(); | ||
103 | m_logFile.Dispose(); | ||
104 | m_logFile = null; | ||
105 | } | ||
106 | } | ||
107 | |||
108 | public void Write(string line, params object[] args) | ||
109 | { | ||
110 | if (!Enabled) return; | ||
111 | Write(String.Format(line, args)); | ||
112 | } | ||
113 | |||
114 | public void Write(string line) | ||
115 | { | ||
116 | if (!Enabled) return; | ||
117 | try | ||
118 | { | ||
119 | lock (m_logFileWriteLock) | ||
120 | { | ||
121 | DateTime now = DateTime.Now; | ||
122 | if (m_logFile == null || now > m_logFileEndTime) | ||
123 | { | ||
124 | if (m_logFile != null) | ||
125 | { | ||
126 | m_logFile.Close(); | ||
127 | m_logFile.Dispose(); | ||
128 | m_logFile = null; | ||
129 | } | ||
130 | |||
131 | // First log file or time has expired, start writing to a new log file | ||
132 | m_logFileEndTime = now + m_logFileLife; | ||
133 | string path = (m_logDirectory.Length > 0 ? m_logDirectory | ||
134 | + System.IO.Path.DirectorySeparatorChar.ToString() : "") | ||
135 | + String.Format("{0}{1}.log", LogFileHeader, now.ToString("yyyyMMddHHmmss")); | ||
136 | m_logFile = new StreamWriter(File.Open(path, FileMode.Append, FileAccess.Write)); | ||
137 | } | ||
138 | if (m_logFile != null) | ||
139 | { | ||
140 | StringBuilder buff = new StringBuilder(line.Length + 25); | ||
141 | buff.Append(now.ToString("yyyyMMddHHmmssfff")); | ||
142 | // buff.Append(now.ToString("yyyyMMddHHmmss")); | ||
143 | buff.Append(","); | ||
144 | buff.Append(line); | ||
145 | buff.Append("\r\n"); | ||
146 | m_logFile.Write(buff.ToString()); | ||
147 | } | ||
148 | } | ||
149 | } | ||
150 | catch (Exception e) | ||
151 | { | ||
152 | if (ErrorLogger != null) | ||
153 | { | ||
154 | ErrorLogger.ErrorFormat("{0}: FAILURE WRITING TO LOGFILE: {1}", LogHeader, e); | ||
155 | } | ||
156 | Enabled = false; | ||
157 | } | ||
158 | return; | ||
159 | } | ||
160 | } | ||
161 | } \ No newline at end of file | ||
diff --git a/OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs b/OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs index a6e2548..4a76b00 100644 --- a/OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs +++ b/OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs | |||
@@ -40,6 +40,7 @@ using OpenMetaverse; | |||
40 | using OpenMetaverse.StructuredData; | 40 | using OpenMetaverse.StructuredData; |
41 | using OpenSim.Framework; | 41 | using OpenSim.Framework; |
42 | using OpenSim.Framework.Capabilities; | 42 | using OpenSim.Framework.Capabilities; |
43 | using OpenSim.Framework.Monitoring; | ||
43 | using OpenSim.Framework.Servers; | 44 | using OpenSim.Framework.Servers; |
44 | using OpenSim.Region.Framework.Interfaces; | 45 | using OpenSim.Region.Framework.Interfaces; |
45 | using OpenSim.Region.Framework.Scenes; | 46 | using OpenSim.Region.Framework.Scenes; |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs index 990dffb..11e0150 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs | |||
@@ -31,7 +31,7 @@ using System.Collections.Generic; | |||
31 | using System.Reflection; | 31 | using System.Reflection; |
32 | using Nini.Config; | 32 | using Nini.Config; |
33 | using OpenSim.Framework; | 33 | using OpenSim.Framework; |
34 | using OpenSim.Framework.Statistics; | 34 | using OpenSim.Framework.Monitoring; |
35 | using OpenSim.Services.Connectors; | 35 | using OpenSim.Services.Connectors; |
36 | using OpenSim.Region.Framework.Interfaces; | 36 | using OpenSim.Region.Framework.Interfaces; |
37 | using OpenSim.Region.Framework.Scenes; | 37 | using OpenSim.Region.Framework.Scenes; |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/MapImage/MapImageServiceModule.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/MapImage/MapImageServiceModule.cs index 6cd077a..e4c6c1a 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/MapImage/MapImageServiceModule.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/MapImage/MapImageServiceModule.cs | |||
@@ -134,11 +134,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage | |||
134 | ///<summary> | 134 | ///<summary> |
135 | /// | 135 | /// |
136 | ///</summary> | 136 | ///</summary> |
137 | |||
138 | |||
139 | ///<summary> | ||
140 | /// | ||
141 | ///</summary> | ||
142 | public void AddRegion(Scene scene) | 137 | public void AddRegion(Scene scene) |
143 | { | 138 | { |
144 | if (! m_enabled) | 139 | if (! m_enabled) |
@@ -149,10 +144,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage | |||
149 | lock (m_scenes) | 144 | lock (m_scenes) |
150 | m_scenes[scene.RegionInfo.RegionID] = scene; | 145 | m_scenes[scene.RegionInfo.RegionID] = scene; |
151 | 146 | ||
152 | scene.EventManager.OnLoginsEnabled += OnLoginsEnabled; | 147 | scene.EventManager.OnRegionReadyStatusChange += s => { if (s.Ready) UploadMapTile(s); }; |
153 | } | 148 | } |
154 | 149 | ||
155 | |||
156 | ///<summary> | 150 | ///<summary> |
157 | /// | 151 | /// |
158 | ///</summary> | 152 | ///</summary> |
@@ -166,21 +160,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage | |||
166 | } | 160 | } |
167 | 161 | ||
168 | #endregion ISharedRegionModule | 162 | #endregion ISharedRegionModule |
169 | 163 | ||
170 | void OnLoginsEnabled(string regionName) | ||
171 | { | ||
172 | Scene scene = null; | ||
173 | foreach (Scene s in m_scenes.Values) | ||
174 | if (s.RegionInfo.RegionName == regionName) | ||
175 | { | ||
176 | scene = s; | ||
177 | break; | ||
178 | } | ||
179 | if (scene != null) | ||
180 | UploadMapTile(scene); | ||
181 | } | ||
182 | |||
183 | |||
184 | ///<summary> | 164 | ///<summary> |
185 | /// | 165 | /// |
186 | ///</summary> | 166 | ///</summary> |
diff --git a/OpenSim/Region/CoreModules/World/Access/AccessModule.cs b/OpenSim/Region/CoreModules/World/Access/AccessModule.cs index 553a32d..e7b1454 100644 --- a/OpenSim/Region/CoreModules/World/Access/AccessModule.cs +++ b/OpenSim/Region/CoreModules/World/Access/AccessModule.cs | |||
@@ -129,18 +129,18 @@ namespace OpenSim.Region.CoreModules.World | |||
129 | switch (cmd[1]) | 129 | switch (cmd[1]) |
130 | { | 130 | { |
131 | case "enable": | 131 | case "enable": |
132 | scene.LoginsDisabled = false; | 132 | scene.LoginsEnabled = true; |
133 | MainConsole.Instance.Output(String.Format("Logins are enabled for region {0}", scene.RegionInfo.RegionName)); | 133 | MainConsole.Instance.Output(String.Format("Logins are enabled for region {0}", scene.RegionInfo.RegionName)); |
134 | break; | 134 | break; |
135 | case "disable": | 135 | case "disable": |
136 | scene.LoginsDisabled = true; | 136 | scene.LoginsEnabled = false; |
137 | MainConsole.Instance.Output(String.Format("Logins are disabled for region {0}", scene.RegionInfo.RegionName)); | 137 | MainConsole.Instance.Output(String.Format("Logins are disabled for region {0}", scene.RegionInfo.RegionName)); |
138 | break; | 138 | break; |
139 | case "status": | 139 | case "status": |
140 | if (scene.LoginsDisabled) | 140 | if (scene.LoginsEnabled) |
141 | MainConsole.Instance.Output(String.Format("Login in {0} are disabled", scene.RegionInfo.RegionName)); | ||
142 | else | ||
143 | MainConsole.Instance.Output(String.Format("Login in {0} are enabled", scene.RegionInfo.RegionName)); | 141 | MainConsole.Instance.Output(String.Format("Login in {0} are enabled", scene.RegionInfo.RegionName)); |
142 | else | ||
143 | MainConsole.Instance.Output(String.Format("Login in {0} are disabled", scene.RegionInfo.RegionName)); | ||
144 | break; | 144 | break; |
145 | default: | 145 | default: |
146 | MainConsole.Instance.Output("Syntax: login enable|disable|status"); | 146 | MainConsole.Instance.Output("Syntax: login enable|disable|status"); |
diff --git a/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs b/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs index e5cd3e2..09f6758 100644 --- a/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs +++ b/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs | |||
@@ -37,7 +37,7 @@ using Nini.Config; | |||
37 | using OpenMetaverse; | 37 | using OpenMetaverse; |
38 | using OpenSim.Framework; | 38 | using OpenSim.Framework; |
39 | using OpenSim.Framework.Console; | 39 | using OpenSim.Framework.Console; |
40 | using OpenSim.Framework.Statistics; | 40 | using OpenSim.Framework.Monitoring; |
41 | using OpenSim.Region.Framework.Interfaces; | 41 | using OpenSim.Region.Framework.Interfaces; |
42 | using OpenSim.Region.Framework.Scenes; | 42 | using OpenSim.Region.Framework.Scenes; |
43 | 43 | ||
diff --git a/OpenSim/Region/CoreModules/World/Region/RegionCommandsModule.cs b/OpenSim/Region/CoreModules/World/Region/RegionCommandsModule.cs index 2838e0c..7d35473 100644 --- a/OpenSim/Region/CoreModules/World/Region/RegionCommandsModule.cs +++ b/OpenSim/Region/CoreModules/World/Region/RegionCommandsModule.cs | |||
@@ -37,7 +37,7 @@ using Nini.Config; | |||
37 | using OpenMetaverse; | 37 | using OpenMetaverse; |
38 | using OpenSim.Framework; | 38 | using OpenSim.Framework; |
39 | using OpenSim.Framework.Console; | 39 | using OpenSim.Framework.Console; |
40 | using OpenSim.Framework.Statistics; | 40 | using OpenSim.Framework.Monitoring; |
41 | using OpenSim.Region.Framework.Interfaces; | 41 | using OpenSim.Region.Framework.Interfaces; |
42 | using OpenSim.Region.Framework.Scenes; | 42 | using OpenSim.Region.Framework.Scenes; |
43 | 43 | ||
diff --git a/OpenSim/Region/CoreModules/World/Sound/SoundModule.cs b/OpenSim/Region/CoreModules/World/Sound/SoundModule.cs index d768a1a..14c1a39 100644 --- a/OpenSim/Region/CoreModules/World/Sound/SoundModule.cs +++ b/OpenSim/Region/CoreModules/World/Sound/SoundModule.cs | |||
@@ -119,17 +119,20 @@ namespace OpenSim.Region.CoreModules.World.Sound | |||
119 | m_scene.ForEachRootScenePresence(delegate(ScenePresence sp) | 119 | m_scene.ForEachRootScenePresence(delegate(ScenePresence sp) |
120 | { | 120 | { |
121 | double dis = Util.GetDistanceTo(sp.AbsolutePosition, position); | 121 | double dis = Util.GetDistanceTo(sp.AbsolutePosition, position); |
122 | |||
122 | if (dis > 100.0) // Max audio distance | 123 | if (dis > 100.0) // Max audio distance |
123 | return; | 124 | return; |
124 | 125 | ||
126 | float thisSpGain; | ||
127 | |||
125 | // Scale by distance | 128 | // Scale by distance |
126 | if (radius == 0) | 129 | if (radius == 0) |
127 | gain = (float)((double)gain * ((100.0 - dis) / 100.0)); | 130 | thisSpGain = (float)((double)gain * ((100.0 - dis) / 100.0)); |
128 | else | 131 | else |
129 | gain = (float)((double)gain * ((radius - dis) / radius)); | 132 | thisSpGain = (float)((double)gain * ((radius - dis) / radius)); |
130 | 133 | ||
131 | sp.ControllingClient.SendTriggeredSound( | 134 | sp.ControllingClient.SendTriggeredSound( |
132 | soundId, ownerID, objectID, parentID, handle, position, (float)gain); | 135 | soundId, ownerID, objectID, parentID, handle, position, thisSpGain); |
133 | }); | 136 | }); |
134 | } | 137 | } |
135 | } | 138 | } |
diff --git a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs index 309856f..26b406e 100644 --- a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs +++ b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs | |||
@@ -42,6 +42,7 @@ using OpenMetaverse.Imaging; | |||
42 | using OpenMetaverse.StructuredData; | 42 | using OpenMetaverse.StructuredData; |
43 | using OpenSim.Framework; | 43 | using OpenSim.Framework; |
44 | using OpenSim.Framework.Capabilities; | 44 | using OpenSim.Framework.Capabilities; |
45 | using OpenSim.Framework.Monitoring; | ||
45 | using OpenSim.Framework.Servers; | 46 | using OpenSim.Framework.Servers; |
46 | using OpenSim.Framework.Servers.HttpServer; | 47 | using OpenSim.Framework.Servers.HttpServer; |
47 | using OpenSim.Region.Framework.Interfaces; | 48 | using OpenSim.Region.Framework.Interfaces; |