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 +++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 OpenSim/Framework/AssetLoader/Filesystem/AssetLoaderFileSystem.cs (limited to 'OpenSim/Framework/AssetLoader/Filesystem') 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); + } + } +} -- cgit v1.1