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 --
OpenSim/Grid/AssetServer/Main.cs | 36 +++----
6 files changed, 174 insertions(+), 129 deletions(-)
create mode 100644 OpenSim/Framework/AssetLoader/Filesystem/AssetLoaderFileSystem.cs
create mode 100644 OpenSim/Framework/IAssetLoader.cs
(limited to 'OpenSim')
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?
diff --git a/OpenSim/Grid/AssetServer/Main.cs b/OpenSim/Grid/AssetServer/Main.cs
index 5d3d265..473c0bb 100644
--- a/OpenSim/Grid/AssetServer/Main.cs
+++ b/OpenSim/Grid/AssetServer/Main.cs
@@ -30,8 +30,8 @@ using System;
using System.IO;
using System.Reflection;
using libsecondlife;
-using Nini.Config;
using OpenSim.Framework;
+using OpenSim.Framework.AssetLoader.Filesystem;
using OpenSim.Framework.Console;
using OpenSim.Framework.Servers;
@@ -45,8 +45,12 @@ namespace OpenSim.Grid.AssetServer
public AssetConfig m_config;
public static OpenAsset_Main assetserver;
-
- private LogBase m_console;
+
+ private LogBase m_console;
+
+ // Temporarily hardcoded - should be a plugin
+ protected IAssetLoader assetLoader = new AssetLoaderFileSystem();
+
private IAssetProvider m_assetProvider;
[STAThread]
@@ -199,29 +203,13 @@ namespace OpenSim.Grid.AssetServer
public void LoadDefaultAssets()
{
- string filePath = Path.Combine(Util.configDir(), "OpenSimAssetSet.xml");
- if (File.Exists(filePath))
- {
- XmlConfigSource source = new XmlConfigSource(filePath);
-
- for (int i = 0; i < source.Configs.Count; i++)
- {
- 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;
-
- m_assetProvider.CreateAsset(newAsset);
- }
- }
+ assetLoader.ForEachXmlAsset(StoreAsset);
}
+ protected void StoreAsset(AssetBase asset)
+ {
+ m_assetProvider.CreateAsset(asset);
+ }
public void RunCmd(string cmd, string[] cmdparams)
{
--
cgit v1.1