From 4ae10034bd929c6451633c6fc5172c44e9280fa4 Mon Sep 17 00:00:00 2001 From: Justin Clarke Casey Date: Fri, 28 Dec 2007 22:13:43 +0000 Subject: Factor out common asset loading from AssetServerBase and Grid/AssetServer/Main --- .../Filesystem/AssetLoaderFileSystem.cs | 119 +++++++++++++++++++++ .../Framework/Communications/Cache/AssetServer.cs | 3 +- .../Communications/Cache/AssetServerBase.cs | 102 +----------------- OpenSim/Framework/IAssetLoader.cs | 37 +++++++ OpenSim/Framework/IAssetServer.cs | 6 -- 5 files changed, 162 insertions(+), 105 deletions(-) create mode 100644 OpenSim/Framework/AssetLoader/Filesystem/AssetLoaderFileSystem.cs create mode 100644 OpenSim/Framework/IAssetLoader.cs (limited to 'OpenSim/Framework') diff --git a/OpenSim/Framework/AssetLoader/Filesystem/AssetLoaderFileSystem.cs b/OpenSim/Framework/AssetLoader/Filesystem/AssetLoaderFileSystem.cs new file mode 100644 index 0000000..6968956 --- /dev/null +++ b/OpenSim/Framework/AssetLoader/Filesystem/AssetLoaderFileSystem.cs @@ -0,0 +1,119 @@ +/* +* Copyright (c) Contributors, http://opensimulator.org/ +* See CONTRIBUTORS.TXT for a full list of copyright holders. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are met: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* * Neither the name of the OpenSim Project nor the +* names of its contributors may be used to endorse or promote products +* derived from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY +* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY +* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Xml; + +using libsecondlife; +using Nini.Config; + +using OpenSim.Framework; +using OpenSim.Framework.Console; + +/// +/// Loads assets from the filesystem location. Not yet a plugin, though it should be. +/// +namespace OpenSim.Framework.AssetLoader.Filesystem +{ + public class AssetLoaderFileSystem : IAssetLoader + { + protected AssetBase CreateAsset(string assetIdStr, string name, string filename, bool isImage) + { + AssetBase asset = new AssetBase( + new LLUUID(assetIdStr), + name + ); + + if (!String.IsNullOrEmpty(filename)) + { + MainLog.Instance.Verbose("ASSETS", "Loading: [{0}][{1}]", name, filename); + + LoadAsset(asset, isImage, filename); + } + else + { + MainLog.Instance.Verbose("ASSETS", "Instantiated: [{0}]", name); + } + + return asset; + } + + protected void LoadAsset(AssetBase info, bool image, string filename) + { + string dataPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "assets"); //+ folder; + string fileName = Path.Combine(dataPath, filename); + FileInfo fInfo = new FileInfo(fileName); + long numBytes = fInfo.Length; + FileStream fStream = new FileStream(fileName, FileMode.Open, FileAccess.Read); + byte[] idata = new byte[numBytes]; + BinaryReader br = new BinaryReader(fStream); + idata = br.ReadBytes((int) numBytes); + br.Close(); + fStream.Close(); + info.Data = idata; + //info.loaded=true; + } + + public void ForEachXmlAsset(Action action) + { + List assets = new List(); + // System.Console.WriteLine("trying loading asset into database"); + string filePath = Path.Combine(Util.configDir(), "OpenSimAssetSet.xml"); + if (File.Exists(filePath)) + { + try + { + XmlConfigSource source = new XmlConfigSource(filePath); + + for (int i = 0; i < source.Configs.Count; i++) + { + // System.Console.WriteLine("loading asset into database"); + string assetIdStr = source.Configs[i].GetString("assetID", LLUUID.Random().ToString()); + string name = source.Configs[i].GetString("name", ""); + sbyte type = (sbyte) source.Configs[i].GetInt("assetType", 0); + sbyte invType = (sbyte) source.Configs[i].GetInt("inventoryType", 0); + string fileName = source.Configs[i].GetString("fileName", ""); + + AssetBase newAsset = CreateAsset(assetIdStr, name, fileName, false); + + newAsset.Type = type; + newAsset.InvType = invType; + assets.Add(newAsset); + } + } + catch (XmlException e) + { + MainLog.Instance.Error("ASSETS", "Error loading " + filePath + ": " + e.ToString()); + } + } + assets.ForEach(action); + } + } +} diff --git a/OpenSim/Framework/Communications/Cache/AssetServer.cs b/OpenSim/Framework/Communications/Cache/AssetServer.cs index 692ee1e..575e80a 100644 --- a/OpenSim/Framework/Communications/Cache/AssetServer.cs +++ b/OpenSim/Framework/Communications/Cache/AssetServer.cs @@ -122,8 +122,7 @@ namespace OpenSim.Framework.Communications.Cache { MainLog.Instance.Verbose("LOCAL ASSET SERVER", "Setting up asset database"); - ForEachDefaultAsset(StoreAsset); - ForEachXmlAsset(StoreAsset); + base.LoadDefaultAssets(); } } diff --git a/OpenSim/Framework/Communications/Cache/AssetServerBase.cs b/OpenSim/Framework/Communications/Cache/AssetServerBase.cs index 1b2c836..2153fbf 100644 --- a/OpenSim/Framework/Communications/Cache/AssetServerBase.cs +++ b/OpenSim/Framework/Communications/Cache/AssetServerBase.cs @@ -28,12 +28,10 @@ using System; using System.Collections.Generic; -using System.IO; using System.Threading; -using System.Xml; using libsecondlife; -using Nini.Config; using OpenSim.Framework.Console; +using OpenSim.Framework.AssetLoader.Filesystem; namespace OpenSim.Framework.Communications.Cache { @@ -45,6 +43,9 @@ namespace OpenSim.Framework.Communications.Cache protected IAssetProvider m_assetProviderPlugin; protected object syncLock = new object(); + // Temporarily hardcoded - should be a plugin + protected IAssetLoader assetLoader = new AssetLoaderFileSystem(); + protected abstract void StoreAsset(AssetBase asset); protected abstract void CommitAssets(); @@ -85,8 +86,7 @@ namespace OpenSim.Framework.Communications.Cache { MainLog.Instance.Verbose("ASSETSERVER", "Setting up asset database"); - ForEachDefaultAsset(StoreAsset); - ForEachXmlAsset(StoreAsset); + assetLoader.ForEachXmlAsset(StoreAsset); CommitAssets(); } @@ -119,25 +119,6 @@ namespace OpenSim.Framework.Communications.Cache } } - public void LoadAsset(AssetBase info, bool image, string filename) - { - //should request Asset from storage manager - //but for now read from file - - string dataPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "assets"); //+ folder; - string fileName = Path.Combine(dataPath, filename); - FileInfo fInfo = new FileInfo(fileName); - long numBytes = fInfo.Length; - FileStream fStream = new FileStream(fileName, FileMode.Open, FileAccess.Read); - byte[] idata = new byte[numBytes]; - BinaryReader br = new BinaryReader(fStream); - idata = br.ReadBytes((int) numBytes); - br.Close(); - fStream.Close(); - info.Data = idata; - //info.loaded=true; - } - public void SetReceiver(IAssetReceiver receiver) { _receiver = receiver; @@ -179,78 +160,5 @@ namespace OpenSim.Framework.Communications.Cache public void SetServerInfo(string ServerUrl, string ServerKey) { } - - public virtual List GetDefaultAssets() - { - List assets = new List(); - return assets; - } - - public AssetBase CreateImageAsset(string assetIdStr, string name, string filename) - { - return CreateAsset(assetIdStr, name, filename, true); - } - - public void ForEachDefaultAsset(Action action) - { - List assets = GetDefaultAssets(); - assets.ForEach(action); - } - - public AssetBase CreateAsset(string assetIdStr, string name, string filename, bool isImage) - { - AssetBase asset = new AssetBase( - new LLUUID(assetIdStr), - name - ); - - if (!String.IsNullOrEmpty(filename)) - { - MainLog.Instance.Verbose("ASSETS", "Loading: [{0}][{1}]", name, filename); - - LoadAsset(asset, isImage, filename); - } - else - { - MainLog.Instance.Verbose("ASSETS", "Instantiated: [{0}]", name); - } - - return asset; - } - - public void ForEachXmlAsset(Action action) - { - List assets = new List(); - // System.Console.WriteLine("trying loading asset into database"); - string filePath = Path.Combine(Util.configDir(), "OpenSimAssetSet.xml"); - if (File.Exists(filePath)) - { - try - { - XmlConfigSource source = new XmlConfigSource(filePath); - - for (int i = 0; i < source.Configs.Count; i++) - { - // System.Console.WriteLine("loading asset into database"); - string assetIdStr = source.Configs[i].GetString("assetID", LLUUID.Random().ToString()); - string name = source.Configs[i].GetString("name", ""); - sbyte type = (sbyte) source.Configs[i].GetInt("assetType", 0); - sbyte invType = (sbyte) source.Configs[i].GetInt("inventoryType", 0); - string fileName = source.Configs[i].GetString("fileName", ""); - - AssetBase newAsset = CreateAsset(assetIdStr, name, fileName, false); - - newAsset.Type = type; - newAsset.InvType = invType; - assets.Add(newAsset); - } - } - catch (XmlException e) - { - MainLog.Instance.Error("ASSETS", "Error loading " + filePath + ": " + e.ToString()); - } - } - assets.ForEach(action); - } } } \ No newline at end of file diff --git a/OpenSim/Framework/IAssetLoader.cs b/OpenSim/Framework/IAssetLoader.cs new file mode 100644 index 0000000..6bcaa24 --- /dev/null +++ b/OpenSim/Framework/IAssetLoader.cs @@ -0,0 +1,37 @@ +/* +* Copyright (c) Contributors, http://opensimulator.org/ +* See CONTRIBUTORS.TXT for a full list of copyright holders. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are met: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* * Neither the name of the OpenSim Project nor the +* names of its contributors may be used to endorse or promote products +* derived from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY +* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY +* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + +using System; + +namespace OpenSim.Framework +{ + public interface IAssetLoader + { + void ForEachXmlAsset(Action action); + } +} diff --git a/OpenSim/Framework/IAssetServer.cs b/OpenSim/Framework/IAssetServer.cs index afd3687..df36623 100644 --- a/OpenSim/Framework/IAssetServer.cs +++ b/OpenSim/Framework/IAssetServer.cs @@ -41,12 +41,6 @@ namespace OpenSim.Framework void UpdateAsset(AssetBase asset); void StoreAndCommitAsset(AssetBase asset); void Close(); - void LoadAsset(AssetBase info, bool image, string filename); - List GetDefaultAssets(); - AssetBase CreateImageAsset(string assetIdStr, string name, string filename); - void ForEachDefaultAsset(Action action); - AssetBase CreateAsset(string assetIdStr, string name, string filename, bool isImage); - void ForEachXmlAsset(Action action); } // could change to delegate? -- cgit v1.1