From b618802e533ce2922e1e1a2f5d2b35b891e9ae88 Mon Sep 17 00:00:00 2001 From: MW Date: Sat, 16 Feb 2008 13:01:42 +0000 Subject: [PATCH] Moved the AgentAssetTransactionsManager (and AgentAssetTransactions) out of CommsManager and into a module (AgentAgentTransactionModule), still needs cleaning up though. But its one more thing out of the CommsManager. One day we will kill the CommsManager! --- .../Cache/AgentAssetTransactions.cs | 3 + .../Cache/AgentAssetTransactionsManager.cs | 5 +- .../Communications/CommunicationsManager.cs | 12 +- .../Modules/AgentAgentTransactionModule.cs | 244 +++++++++++ .../Modules/AgentAssetsTransactions.cs | 382 ++++++++++++++++++ .../Region/Environment/Scenes/InnerScene.cs | 81 ++-- .../Environment/Scenes/Scene.Inventory.cs | 19 +- OpenSim/Region/Environment/Scenes/Scene.cs | 12 +- .../Environment/Scenes/SceneObjectPart.cs | 3 +- 9 files changed, 701 insertions(+), 60 deletions(-) create mode 100644 OpenSim/Region/Environment/Modules/AgentAgentTransactionModule.cs create mode 100644 OpenSim/Region/Environment/Modules/AgentAssetsTransactions.cs diff --git a/OpenSim/Framework/Communications/Cache/AgentAssetTransactions.cs b/OpenSim/Framework/Communications/Cache/AgentAssetTransactions.cs index 3882ade603..4aefe833da 100644 --- a/OpenSim/Framework/Communications/Cache/AgentAssetTransactions.cs +++ b/OpenSim/Framework/Communications/Cache/AgentAssetTransactions.cs @@ -25,6 +25,8 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ +//moved to a module, left here until the module is found to have no problems +/* using System; using System.Collections.Generic; using System.IO; @@ -553,3 +555,4 @@ namespace OpenSim.Framework.Communications.Cache #endregion } } +*/ \ No newline at end of file diff --git a/OpenSim/Framework/Communications/Cache/AgentAssetTransactionsManager.cs b/OpenSim/Framework/Communications/Cache/AgentAssetTransactionsManager.cs index bb523f4169..97b716c87e 100644 --- a/OpenSim/Framework/Communications/Cache/AgentAssetTransactionsManager.cs +++ b/OpenSim/Framework/Communications/Cache/AgentAssetTransactionsManager.cs @@ -26,6 +26,8 @@ * */ +//moved to a module, left here until the module is found to have no problems +/* using System; using System.Collections.Generic; @@ -181,7 +183,7 @@ namespace OpenSim.Framework.Communications.Cache //m_log.InfoFormat("[ASSET TRANSACTIONS] Current uploaders: {0}", transactions.XferUploaders.Count); }*/ - } + /* } } } @@ -201,3 +203,4 @@ namespace OpenSim.Framework.Communications.Cache } } } +*/ \ No newline at end of file diff --git a/OpenSim/Framework/Communications/CommunicationsManager.cs b/OpenSim/Framework/Communications/CommunicationsManager.cs index 3e72d89a0a..eb820c168e 100644 --- a/OpenSim/Framework/Communications/CommunicationsManager.cs +++ b/OpenSim/Framework/Communications/CommunicationsManager.cs @@ -73,12 +73,12 @@ namespace OpenSim.Framework.Communications get { return m_userProfileCacheService; } } - protected AgentAssetTransactionsManager m_transactionsManager; + // protected AgentAssetTransactionsManager m_transactionsManager; - public AgentAssetTransactionsManager TransactionsManager - { - get { return m_transactionsManager; } - } + // public AgentAssetTransactionsManager TransactionsManager + // { + // get { return m_transactionsManager; } + // } protected AssetCache m_assetCache; @@ -100,7 +100,7 @@ namespace OpenSim.Framework.Communications m_networkServersInfo = serversInfo; m_assetCache = assetCache; m_userProfileCacheService = new UserProfileCacheService(this); - m_transactionsManager = new AgentAssetTransactionsManager(this, dumpAssetsToFile); + // m_transactionsManager = new AgentAssetTransactionsManager(this, dumpAssetsToFile); } public void doCreate(string[] cmmdParams) diff --git a/OpenSim/Region/Environment/Modules/AgentAgentTransactionModule.cs b/OpenSim/Region/Environment/Modules/AgentAgentTransactionModule.cs new file mode 100644 index 0000000000..2374964041 --- /dev/null +++ b/OpenSim/Region/Environment/Modules/AgentAgentTransactionModule.cs @@ -0,0 +1,244 @@ +using System; +using System.Collections.Generic; +using System.Text; +using libsecondlife; +using Nini.Config; +using OpenSim.Framework; +using OpenSim.Region.Environment.Interfaces; +using OpenSim.Region.Environment.Scenes; + +namespace OpenSim.Region.Environment.Modules +{ + public class AgentAgentTransactionModule : IRegionModule, IAgentAssetTransactions + { + private Dictionary RegisteredScenes = new Dictionary(); + private Scene m_scene = null; + private bool m_dumpAssetsToFile = false; + + private AgentAssetTransactionsManager m_transactionManager; + + public void Initialise(Scene scene, IConfigSource config) + { + if (!RegisteredScenes.ContainsKey(scene.RegionInfo.RegionID)) + { + RegisteredScenes.Add(scene.RegionInfo.RegionID, scene); + scene.RegisterModuleInterface(this); + + scene.EventManager.OnNewClient += NewClient; + + try + { + m_dumpAssetsToFile = config.Configs["StandAlone"].GetBoolean("dump_assets_to_file", false); + } + catch (Exception) + { + } + } + + if (m_scene == null) + { + m_scene = scene; + m_transactionManager = new AgentAssetTransactionsManager(m_scene, m_dumpAssetsToFile); + } + } + + public void PostInitialise() + { + + } + + public void Close() + { + } + + public string Name + { + get { return "AgentTransactionModule"; } + } + + public bool IsSharedModule + { + get { return true; } + } + + public void NewClient(IClientAPI client) + { + client.OnAssetUploadRequest += m_transactionManager.HandleUDPUploadRequest; + client.OnXferReceive += m_transactionManager.HandleXfer; + } + + public void HandleItemCreationFromTransaction(IClientAPI remoteClient, LLUUID transactionID, LLUUID folderID, + uint callbackID, string description, string name, sbyte invType, + sbyte type, byte wearableType, uint nextOwnerMask) + { + m_transactionManager.HandleItemCreationFromTransaction(remoteClient, transactionID, folderID, callbackID, description, name, invType, type, wearableType, nextOwnerMask); + } + + public void HandleItemUpdateFromTransaction(IClientAPI remoteClient, LLUUID transactionID, + InventoryItemBase item) + { + m_transactionManager.HandleItemUpdateFromTransaction(remoteClient, transactionID, item); + } + + public void RemoveAgentAssetTransactions(LLUUID userID) + { + m_transactionManager.RemoveAgentAssetTransactions(userID); + } + } + + //should merge this classes and clean up + public class AgentAssetTransactionsManager + { + private static readonly log4net.ILog m_log + = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); + + // Fields + public Scene MyScene; + + /// + /// Each agent has its own singleton collection of transactions + /// + private Dictionary AgentTransactions = + new Dictionary(); + + /// + /// Should we dump uploaded assets to the filesystem? + /// + private bool m_dumpAssetsToFile; + + public AgentAssetTransactionsManager(Scene scene, bool dumpAssetsToFile) + { + MyScene = scene; + m_dumpAssetsToFile = dumpAssetsToFile; + } + + /// + /// Get the collection of asset transactions for the given user. If one does not already exist, it + /// is created. + /// + /// + /// + private AgentAssetTransactions GetUserTransactions(LLUUID userID) + { + lock (AgentTransactions) + { + if (!AgentTransactions.ContainsKey(userID)) + { + AgentAssetTransactions transactions + = new AgentAssetTransactions(userID, this, m_dumpAssetsToFile); + AgentTransactions.Add(userID, transactions); + } + + return AgentTransactions[userID]; + } + } + + /// + /// Remove the given agent asset transactions. This should be called when a client is departing + /// from a scene (and hence won't be making any more transactions here). + /// + /// + public void RemoveAgentAssetTransactions(LLUUID userID) + { + // m_log.DebugFormat("Removing agent asset transactions structure for agent {0}", userID); + + lock (AgentTransactions) + { + AgentTransactions.Remove(userID); + } + } + + /// + /// Create an inventory item from data that has been received through a transaction. + /// + /// This is called when new clothing or body parts are created. It may also be called in other + /// situations. + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public void HandleItemCreationFromTransaction(IClientAPI remoteClient, LLUUID transactionID, LLUUID folderID, + uint callbackID, string description, string name, sbyte invType, + sbyte type, byte wearableType, uint nextOwnerMask) + { + m_log.DebugFormat( + "[TRANSACTIONS MANAGER] Called HandleItemCreationFromTransaction with item {0}", name); + + AgentAssetTransactions transactions = GetUserTransactions(remoteClient.AgentId); + + transactions.RequestCreateInventoryItem( + remoteClient, transactionID, folderID, callbackID, description, + name, invType, type, wearableType, nextOwnerMask); + } + + /// + /// Update an inventory item with data that has been received through a transaction. + /// + /// This is called when clothing or body parts are updated (for instance, with new textures or + /// colours). It may also be called in other situations. + /// + /// + /// + /// + public void HandleItemUpdateFromTransaction(IClientAPI remoteClient, LLUUID transactionID, + InventoryItemBase item) + { + m_log.DebugFormat( + "[TRANSACTIONS MANAGER] Called HandleItemUpdateFromTransaction with item {0}", + item.inventoryName); + + AgentAssetTransactions transactions + = GetUserTransactions(remoteClient.AgentId); + + transactions.RequestUpdateInventoryItem(remoteClient, transactionID, item); + } + + /// + /// Request that a client (agent) begin an asset transfer. + /// + /// + /// + /// + /// + /// + /// + public void HandleUDPUploadRequest(IClientAPI remoteClient, LLUUID assetID, LLUUID transaction, sbyte type, + byte[] data, bool storeLocal, bool tempFile) + { + // Console.WriteLine("asset upload of " + assetID); + AgentAssetTransactions transactions = GetUserTransactions(remoteClient.AgentId); + + AgentAssetTransactions.AssetXferUploader uploader = transactions.RequestXferUploader(transaction); + if (uploader != null) + { + + if (uploader.Initialise(remoteClient, assetID, transaction, type, data, storeLocal, tempFile)) + { + + } + } + } + + /// + /// Handle asset transfer data packets received in response to the asset upload request in + /// HandleUDPUploadRequest() + /// + /// + /// + /// + /// + public void HandleXfer(IClientAPI remoteClient, ulong xferID, uint packetID, byte[] data) + { + AgentAssetTransactions transactions = GetUserTransactions(remoteClient.AgentId); + + transactions.HandleXfer(xferID, packetID, data); + } + } +} diff --git a/OpenSim/Region/Environment/Modules/AgentAssetsTransactions.cs b/OpenSim/Region/Environment/Modules/AgentAssetsTransactions.cs new file mode 100644 index 0000000000..d9126f4be5 --- /dev/null +++ b/OpenSim/Region/Environment/Modules/AgentAssetsTransactions.cs @@ -0,0 +1,382 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using libsecondlife; +using libsecondlife.Packets; +using OpenSim.Framework.Servers; +using OpenSim.Framework; +using OpenSim.Framework.Communications.Cache; + +namespace OpenSim.Region.Environment.Modules +{ + + /// + /// Manage asset transactions for a single agent. + /// + public class AgentAssetTransactions + { + //private static readonly log4net.ILog m_log + // = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); + + // Fields + public LLUUID UserID; + public Dictionary XferUploaders = new Dictionary(); + public AgentAssetTransactionsManager Manager; + private bool m_dumpAssetsToFile; + + // Methods + public AgentAssetTransactions(LLUUID agentID, AgentAssetTransactionsManager manager, bool dumpAssetsToFile) + { + UserID = agentID; + Manager = manager; + m_dumpAssetsToFile = dumpAssetsToFile; + } + + public AssetXferUploader RequestXferUploader(LLUUID transactionID) + { + if (!XferUploaders.ContainsKey(transactionID)) + { + AssetXferUploader uploader = new AssetXferUploader(this, m_dumpAssetsToFile); + + lock (XferUploaders) + { + XferUploaders.Add(transactionID, uploader); + } + + return uploader; + } + return null; + } + + public void HandleXfer(ulong xferID, uint packetID, byte[] data) + { + AssetXferUploader uploaderFound = null; + + lock (XferUploaders) + { + foreach (AssetXferUploader uploader in XferUploaders.Values) + { + if (uploader.XferID == xferID) + { + break; + } + } + + } + } + + public void RequestCreateInventoryItem(IClientAPI remoteClient, LLUUID transactionID, LLUUID folderID, + uint callbackID, string description, string name, sbyte invType, + sbyte type, byte wearableType, uint nextOwnerMask) + { + if (XferUploaders.ContainsKey(transactionID)) + { + XferUploaders[transactionID].RequestCreateInventoryItem(remoteClient, transactionID, folderID, + callbackID, description, name, invType, type, + wearableType, nextOwnerMask); + } + } + + public void RequestUpdateInventoryItem(IClientAPI remoteClient, LLUUID transactionID, + InventoryItemBase item) + { + if (XferUploaders.ContainsKey(transactionID)) + { + XferUploaders[transactionID].RequestUpdateInventoryItem(remoteClient, transactionID, item); + } + } + + /// + /// Get an uploaded asset. If the data is successfully retrieved, the transaction will be removed. + /// + /// + /// The asset if the upload has completed, null if it has not. + public AssetBase GetTransactionAsset(LLUUID transactionID) + { + if (XferUploaders.ContainsKey(transactionID)) + { + AssetXferUploader uploader = XferUploaders[transactionID]; + AssetBase asset = uploader.GetAssetData(); + + lock (XferUploaders) + { + XferUploaders.Remove(transactionID); + } + + return asset; + } + + return null; + } + + // Nested Types + public class AssetXferUploader + { + // Fields + public bool AddToInventory; + public AssetBase Asset; + public LLUUID InventFolder = LLUUID.Zero; + private IClientAPI ourClient; + public LLUUID TransactionID = LLUUID.Zero; + public bool UploadComplete; + public ulong XferID; + private string m_name = String.Empty; + private string m_description = String.Empty; + private sbyte type = 0; + private sbyte invType = 0; + private uint nextPerm = 0; + private bool m_finished = false; + private bool m_createItem = false; + private AgentAssetTransactions m_userTransactions; + private bool m_storeLocal; + private bool m_dumpAssetToFile; + + public AssetXferUploader(AgentAssetTransactions transactions, bool dumpAssetToFile) + { + m_userTransactions = transactions; + m_dumpAssetToFile = dumpAssetToFile; + } + + /// + /// Process transfer data received from the client. + /// + /// + /// + /// + /// True if the transfer is complete, false otherwise or if the xferID was not valid + public bool HandleXferPacket(ulong xferID, uint packetID, byte[] data) + { + if (XferID == xferID) + { + if (Asset.Data.Length > 1) + { + byte[] destinationArray = new byte[Asset.Data.Length + data.Length]; + Array.Copy(Asset.Data, 0, destinationArray, 0, Asset.Data.Length); + Array.Copy(data, 0, destinationArray, Asset.Data.Length, data.Length); + Asset.Data = destinationArray; + } + else + { + byte[] buffer2 = new byte[data.Length - 4]; + Array.Copy(data, 4, buffer2, 0, data.Length - 4); + Asset.Data = buffer2; + } + ConfirmXferPacketPacket newPack = new ConfirmXferPacketPacket(); + newPack.XferID.ID = xferID; + newPack.XferID.Packet = packetID; + ourClient.OutPacket(newPack, ThrottleOutPacketType.Asset); + if ((packetID & 0x80000000) != 0) + { + SendCompleteMessage(); + return true; + } + } + + return false; + } + + /// + /// Initialise asset transfer from the client + /// + /// + /// + /// + /// True if the transfer is complete, false otherwise + public bool Initialise(IClientAPI remoteClient, LLUUID assetID, LLUUID transaction, sbyte type, byte[] data, + bool storeLocal, bool tempFile) + { + ourClient = remoteClient; + Asset = new AssetBase(); + Asset.FullID = assetID; + Asset.InvType = type; + Asset.Type = type; + Asset.Data = data; + Asset.Name = "blank"; + Asset.Description = "empty"; + Asset.Local = storeLocal; + Asset.Temporary = tempFile; + + TransactionID = transaction; + m_storeLocal = storeLocal; + if (Asset.Data.Length > 2) + { + SendCompleteMessage(); + return true; + } + else + { + RequestStartXfer(); + } + + return false; + } + + protected void RequestStartXfer() + { + UploadComplete = false; + XferID = Util.GetNextXferID(); + RequestXferPacket newPack = new RequestXferPacket(); + newPack.XferID.ID = XferID; + newPack.XferID.VFileType = Asset.Type; + newPack.XferID.VFileID = Asset.FullID; + newPack.XferID.FilePath = 0; + newPack.XferID.Filename = new byte[0]; + ourClient.OutPacket(newPack, ThrottleOutPacketType.Asset); + } + + protected void SendCompleteMessage() + { + UploadComplete = true; + AssetUploadCompletePacket newPack = new AssetUploadCompletePacket(); + newPack.AssetBlock.Type = Asset.Type; + newPack.AssetBlock.Success = true; + newPack.AssetBlock.UUID = Asset.FullID; + ourClient.OutPacket(newPack, ThrottleOutPacketType.Asset); + m_finished = true; + if (m_createItem) + { + DoCreateItem(); + } + else if (m_storeLocal) + { + m_userTransactions.Manager.MyScene.CommsManager.AssetCache.AddAsset(Asset); + } + + // Console.WriteLine("upload complete "+ this.TransactionID); + + if (m_dumpAssetToFile) + { + DateTime now = DateTime.Now; + string filename = + String.Format("{6}_{7}_{0:d2}{1:d2}{2:d2}_{3:d2}{4:d2}{5:d2}.dat", now.Year, now.Month, now.Day, + now.Hour, now.Minute, now.Second, Asset.Name, Asset.Type); + SaveAssetToFile(filename, Asset.Data); + } + } + + ///Left this in and commented in case there are unforseen issues + //private void SaveAssetToFile(string filename, byte[] data) + //{ + // FileStream fs = File.Create(filename); + // BinaryWriter bw = new BinaryWriter(fs); + // bw.Write(data); + // bw.Close(); + // fs.Close(); + //} + private void SaveAssetToFile(string filename, byte[] data) + { + string assetPath = "UserAssets"; + if (!Directory.Exists(assetPath)) + { + Directory.CreateDirectory(assetPath); + } + FileStream fs = File.Create(Path.Combine(assetPath, filename)); + BinaryWriter bw = new BinaryWriter(fs); + bw.Write(data); + bw.Close(); + fs.Close(); + } + + public void RequestCreateInventoryItem(IClientAPI remoteClient, LLUUID transactionID, LLUUID folderID, + uint callbackID, string description, string name, sbyte invType, + sbyte type, byte wearableType, uint nextOwnerMask) + { + if (TransactionID == transactionID) + { + InventFolder = folderID; + m_name = name; + m_description = description; + this.type = type; + this.invType = invType; + nextPerm = nextOwnerMask; + Asset.Name = name; + Asset.Description = description; + Asset.Type = type; + Asset.InvType = invType; + m_createItem = true; + if (m_finished) + { + DoCreateItem(); + } + } + } + + public void RequestUpdateInventoryItem(IClientAPI remoteClient, LLUUID transactionID, + InventoryItemBase item) + { + if (TransactionID == transactionID) + { + CachedUserInfo userInfo = + m_userTransactions.Manager.MyScene.CommsManager.UserProfileCacheService.GetUserDetails( + remoteClient.AgentId); + + if (userInfo != null) + { + LLUUID assetID = LLUUID.Combine(transactionID, remoteClient.SecureSessionId); + + AssetBase asset + = m_userTransactions.Manager.MyScene.CommsManager.AssetCache.GetAsset( + assetID, (item.assetType == (int) AssetType.Texture ? true : false)); + + if (asset == null) + { + asset = m_userTransactions.GetTransactionAsset(transactionID); + } + + if (asset != null && asset.FullID == assetID) + { + asset.Name = item.inventoryName; + asset.Description = item.inventoryDescription; + asset.InvType = (sbyte) item.invType; + asset.Type = (sbyte) item.assetType; + item.assetID = asset.FullID; + + m_userTransactions.Manager.MyScene.CommsManager.AssetCache.AddAsset(Asset); + } + + userInfo.UpdateItem(remoteClient.AgentId, item); + } + } + } + + private void DoCreateItem() + { + //really need to fix this call, if lbsa71 saw this he would die. + m_userTransactions.Manager.MyScene.CommsManager.AssetCache.AddAsset(Asset); + CachedUserInfo userInfo = + m_userTransactions.Manager.MyScene.CommsManager.UserProfileCacheService.GetUserDetails(ourClient.AgentId); + if (userInfo != null) + { + InventoryItemBase item = new InventoryItemBase(); + item.avatarID = ourClient.AgentId; + item.creatorsID = ourClient.AgentId; + item.inventoryID = LLUUID.Random(); + item.assetID = Asset.FullID; + item.inventoryDescription = m_description; + item.inventoryName = m_name; + item.assetType = type; + item.invType = invType; + item.parentFolderID = InventFolder; + item.inventoryBasePermissions = 2147483647; + item.inventoryCurrentPermissions = 2147483647; + item.inventoryNextPermissions = nextPerm; + + userInfo.AddItem(ourClient.AgentId, item); + ourClient.SendInventoryItemCreateUpdate(item); + } + } + + public AssetBase GetAssetData() + { + if (m_finished) + { + return Asset; + } + return null; + } + } + + } + +} diff --git a/OpenSim/Region/Environment/Scenes/InnerScene.cs b/OpenSim/Region/Environment/Scenes/InnerScene.cs index 48fa3dc0db..57b8ae768f 100644 --- a/OpenSim/Region/Environment/Scenes/InnerScene.cs +++ b/OpenSim/Region/Environment/Scenes/InnerScene.cs @@ -150,7 +150,7 @@ namespace OpenSim.Region.Environment.Scenes { lock (m_syncRoot) { - return _PhyScene.Simulate((float) elapsed); + return _PhyScene.Simulate((float)elapsed); } } @@ -175,7 +175,7 @@ namespace OpenSim.Region.Environment.Scenes foreach (SceneObjectPart part in sceneObject.Children.Values) { part.LocalID = m_parentScene.PrimIDAllocate(); - + } sceneObject.UpdateParentIDs(); AddEntity(sceneObject); @@ -222,9 +222,9 @@ namespace OpenSim.Region.Environment.Scenes { if (obj is SceneObjectGroup) { - if (((SceneObjectGroup) obj).LocalId == localID) + if (((SceneObjectGroup)obj).LocalId == localID) { - m_parentScene.RemoveEntity((SceneObjectGroup) obj); + m_parentScene.RemoveEntity((SceneObjectGroup)obj); m_numPrim--; return; } @@ -237,7 +237,8 @@ namespace OpenSim.Region.Environment.Scenes System.Console.WriteLine("Attaching object " + objectLocalID + " to " + AttachmentPt); SceneObjectPart p = GetSceneObjectPart(objectLocalID); ScenePresence av = null; - if (TryGetAvatar(remoteClient.AgentId, out av)) { + if (TryGetAvatar(remoteClient.AgentId, out av)) + { ObjectUpdatePacket objupdate = new ObjectUpdatePacket(); objupdate.RegionData.RegionHandle = m_regInfo.RegionHandle; objupdate.RegionData.TimeDilation = ushort.MaxValue; @@ -287,7 +288,7 @@ namespace OpenSim.Region.Environment.Scenes objupdate.ObjectData[0].NameValue = Helpers.StringToField("FirstName STRING RW SV " + av.Firstname + "\nLastName STRING RW SV " + av.Lastname); LLVector3 pos2 = av.AbsolutePosition; - // new LLVector3((float) Pos.X, (float) Pos.Y, (float) Pos.Z); + // new LLVector3((float) Pos.X, (float) Pos.Y, (float) Pos.Z); byte[] pb = pos2.GetBytes(); Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 16, pb.Length); @@ -318,7 +319,7 @@ namespace OpenSim.Region.Environment.Scenes objupdate.ObjectData[1].TextureEntry = primData.TextureEntry; objupdate.ObjectData[1].PCode = primData.PCode; - objupdate.ObjectData[1].State = (byte)(((byte)AttachmentPt) << 4) ; + objupdate.ObjectData[1].State = (byte)(((byte)AttachmentPt) << 4); objupdate.ObjectData[1].PathBegin = primData.PathBegin; objupdate.ObjectData[1].PathEnd = primData.PathEnd; objupdate.ObjectData[1].PathScaleX = primData.PathScaleX; @@ -356,7 +357,7 @@ namespace OpenSim.Region.Environment.Scenes objupdate.ObjectData[1].Radius = 20; objupdate.ObjectData[1].NameValue = Helpers.StringToField("AttachItemID STRING RW SV " + p.UUID); - LLVector3 pos = new LLVector3((float) 0.0, (float) 0.0, (float) 0.0); + LLVector3 pos = new LLVector3((float)0.0, (float)0.0, (float)0.0); pb = pos.GetBytes(); Array.Copy(pb, 0, objupdate.ObjectData[1].ObjectData, 0, pb.Length); @@ -364,13 +365,7 @@ namespace OpenSim.Region.Environment.Scenes byte[] brot = rot.GetBytes(); Array.Copy(brot, 0, objupdate.ObjectData[1].ObjectData, 36, brot.Length); - - - remoteClient.OutPacket(objupdate, ThrottleOutPacketType.Task); - - - - + remoteClient.OutPacket(objupdate, ThrottleOutPacketType.Task); } else { @@ -466,8 +461,8 @@ namespace OpenSim.Region.Environment.Scenes { // some network situations come in where child agents get closed twice. if (m_numChildAgents < 0) - { - m_numChildAgents = 0; + { + m_numChildAgents = 0; } return m_numChildAgents; @@ -569,8 +564,8 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - if (((SceneObjectGroup) ent).HasChildPrim(localID)) - return (SceneObjectGroup) ent; + if (((SceneObjectGroup)ent).HasChildPrim(localID)) + return (SceneObjectGroup)ent; } } return null; @@ -584,8 +579,8 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - if (((SceneObjectGroup) ent).HasChildPrim(fullID)) - return (SceneObjectGroup) ent; + if (((SceneObjectGroup)ent).HasChildPrim(fullID)) + return (SceneObjectGroup)ent; } } return null; @@ -600,7 +595,7 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - SceneObjectGroup reportingG = (SceneObjectGroup) ent; + SceneObjectGroup reportingG = (SceneObjectGroup)ent; EntityIntersection result = reportingG.TestIntersection(hray); if (result.HitTF) { @@ -613,7 +608,7 @@ namespace OpenSim.Region.Environment.Scenes } } return returnResult; - } + } public SceneObjectPart GetSceneObjectPart(uint localID) { @@ -719,7 +714,7 @@ namespace OpenSim.Region.Environment.Scenes if (presence.IsChildAgent && m_parentScene.m_seeIntoRegionFromNeighbor) { LLVector3 oLoc = ((SceneObjectGroup)ent).AbsolutePosition; - float distResult = (float)Util.GetDistanceTo(presence.AbsolutePosition,oLoc); + float distResult = (float)Util.GetDistanceTo(presence.AbsolutePosition, oLoc); //m_log.Info("[DISTANCE]: " + distResult.ToString()); @@ -727,13 +722,13 @@ namespace OpenSim.Region.Environment.Scenes { // Send Only if we don't already know about it. // KnownPrim also makes the prim known when called. - if (!presence.KnownPrim(((SceneObjectGroup) ent).UUID)) - ((SceneObjectGroup) ent).ScheduleFullUpdateToAvatar(presence); + if (!presence.KnownPrim(((SceneObjectGroup)ent).UUID)) + ((SceneObjectGroup)ent).ScheduleFullUpdateToAvatar(presence); } } else { - ((SceneObjectGroup) ent).ScheduleFullUpdateToAvatar(presence); + ((SceneObjectGroup)ent).ScheduleFullUpdateToAvatar(presence); } } } @@ -903,7 +898,7 @@ namespace OpenSim.Region.Environment.Scenes { if (PermissionsMngr.CanEditObject(remoteClient.AgentId, group.UUID)) { - group.UpdatePrimFlags(localID, (ushort) packet.Type, true, packet.ToBytes()); + group.UpdatePrimFlags(localID, (ushort)packet.Type, true, packet.ToBytes()); } } } @@ -1003,9 +998,9 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - if (((SceneObjectGroup) ent).LocalId == parentPrim) + if (((SceneObjectGroup)ent).LocalId == parentPrim) { - parenPrim = (SceneObjectGroup) ent; + parenPrim = (SceneObjectGroup)ent; break; } } @@ -1020,9 +1015,9 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - if (((SceneObjectGroup) ent).LocalId == childPrims[i]) + if (((SceneObjectGroup)ent).LocalId == childPrims[i]) { - children.Add((SceneObjectGroup) ent); + children.Add((SceneObjectGroup)ent); } } } @@ -1049,25 +1044,25 @@ namespace OpenSim.Region.Environment.Scenes // be more efficient yet to keep this dictionary permanently on hand. Dictionary sceneObjects = new Dictionary(); - + List EntitieList = GetEntities(); foreach (EntityBase ent in EntitieList) { if (ent is SceneObjectGroup) { - SceneObjectGroup obj = (SceneObjectGroup) ent; + SceneObjectGroup obj = (SceneObjectGroup)ent; sceneObjects.Add(obj.LocalId, obj); - + } } // Find the root prim among the prim ids we've been given for (int i = 0; i < primIds.Count; i++) { - + if (sceneObjects.ContainsKey(primIds[i])) { - + parenPrim = sceneObjects[primIds[i]]; primIds.RemoveAt(i); break; @@ -1124,9 +1119,9 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - if (((SceneObjectGroup) ent).LocalId == originalPrim) + if (((SceneObjectGroup)ent).LocalId == originalPrim) { - originPrim = (SceneObjectGroup) ent; + originPrim = (SceneObjectGroup)ent; break; } } @@ -1139,14 +1134,14 @@ namespace OpenSim.Region.Environment.Scenes SceneObjectGroup copy = originPrim.Copy(AgentID, GroupID); copy.AbsolutePosition = copy.AbsolutePosition + offset; copy.ResetIDs(); - + lock (Entities) { Entities.Add(copy.UUID, copy); } - + m_numPrim++; - + copy.StartScripts(); copy.ScheduleGroupForFullUpdate(); } @@ -1170,7 +1165,7 @@ namespace OpenSim.Region.Environment.Scenes return (float) - Math.Sqrt((v1.x - v2.x)*(v1.x - v2.x) + (v1.y - v2.y)*(v1.y - v2.y) + (v1.z - v2.z)*(v1.z - v2.z)); + Math.Sqrt((v1.x - v2.x) * (v1.x - v2.x) + (v1.y - v2.y) * (v1.y - v2.y) + (v1.z - v2.z) * (v1.z - v2.z)); } #endregion diff --git a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs index 952b039654..22122167e6 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs @@ -36,6 +36,7 @@ using OpenSim.Framework.Console; using System.IO; using System.Text; using System.Xml; +using OpenSim.Region.Environment.Interfaces; namespace OpenSim.Region.Environment.Scenes @@ -266,8 +267,12 @@ namespace OpenSim.Region.Environment.Scenes } else { - CommsManager.TransactionsManager.HandleItemUpdateFromTransaction( - remoteClient, transactionID, item); + IAgentAssetTransactions agentTransactions = this.RequestModuleInterface(); + if (agentTransactions != null) + { + agentTransactions.HandleItemUpdateFromTransaction( + remoteClient, transactionID, item); + } } } else @@ -459,9 +464,15 @@ namespace OpenSim.Region.Environment.Scenes } else { - CommsManager.TransactionsManager.HandleItemCreationFromTransaction( + IAgentAssetTransactions agentTransactions = this.RequestModuleInterface(); + if (agentTransactions != null) + { + agentTransactions.HandleItemCreationFromTransaction( remoteClient, transactionID, folderID, callbackID, description, - name, invType, assetType, wearableType, nextOwnerMask); + name, invType, assetType, wearableType, nextOwnerMask); + } + + } } diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index b534b4dea3..d3b051f24b 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs @@ -1397,8 +1397,8 @@ namespace OpenSim.Region.Environment.Scenes client.OnUpdateInventoryItem += UpdateInventoryItemAsset; client.OnCopyInventoryItem += CopyInventoryItem; client.OnMoveInventoryItem += MoveInventoryItem; - client.OnAssetUploadRequest += CommsManager.TransactionsManager.HandleUDPUploadRequest; - client.OnXferReceive += CommsManager.TransactionsManager.HandleXfer; + // client.OnAssetUploadRequest += CommsManager.TransactionsManager.HandleUDPUploadRequest; + // client.OnXferReceive += CommsManager.TransactionsManager.HandleXfer; client.OnRezScript += RezScript; client.OnRequestTaskInventory += RequestTaskInventory; @@ -1489,8 +1489,12 @@ namespace OpenSim.Region.Environment.Scenes ForEachScenePresence( delegate(ScenePresence presence) { presence.CoarseLocationChange(); }); - - CommsManager.TransactionsManager.RemoveAgentAssetTransactions(agentID); + + IAgentAssetTransactions agentTransactions = this.RequestModuleInterface(); + if (agentTransactions != null) + { + agentTransactions.RemoveAgentAssetTransactions(agentID); + } lock (m_scenePresences) { diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs index 5756a0bc64..00cabf81b0 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs @@ -1618,8 +1618,7 @@ namespace OpenSim.Region.Environment.Scenes SendFullUpdateToAllClients(); SendObjectPropertiesToClient(AgentID); - - + } }