* Added "File Asset Client" to OpenSim Asset Server-types.

* You can replace "grid" as the asset system with "file" to save and load all your assets from a directory on your hard disk. Files are serialised to XML and saved in the format "/<dir>/0x/0x/0x/0000-0000-000000-0000-0000.xml"
* Directory <dir> is sharing the Asset Server URL path, use a normal path here instead (ie C:\xyz or /var/assets/). 
* This probably wont work well in grid mode unless every sim has access to the same directory. This is mostly intended for standalone usage where quick and convenient access to assets is required.
0.6.0-stable
Adam Frisby 2008-08-30 04:42:23 +00:00
parent 766dded703
commit f57f4d1ab8
2 changed files with 60 additions and 0 deletions

View File

@ -0,0 +1,56 @@
using System.IO;
using System.Xml.Serialization;
namespace OpenSim.Framework.Communications.Cache
{
public class FileAssetClient : AssetServerBase
{
private readonly string m_dir;
private readonly XmlSerializer m_xs = new XmlSerializer(typeof(AssetBase));
public FileAssetClient(string dir)
{
if(!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
m_dir = dir;
}
public override void StoreAsset(AssetBase asset)
{
string cdir = m_dir + Path.DirectorySeparatorChar + asset.FullID.Data[0]
+ Path.DirectorySeparatorChar + asset.FullID.Data[1];
if (!Directory.Exists(m_dir + Path.DirectorySeparatorChar + asset.FullID.Data[0]))
Directory.CreateDirectory(m_dir + Path.DirectorySeparatorChar + asset.FullID.Data[0]);
if (!Directory.Exists(cdir))
Directory.CreateDirectory(cdir);
FileStream x = new FileStream(cdir + Path.DirectorySeparatorChar + asset.FullID + ".xml", FileMode.Create);
m_xs.Serialize(x, asset);
x.Flush();
x.Close();
}
public override void UpdateAsset(AssetBase asset)
{
StoreAsset(asset);
}
protected override AssetBase GetAsset(AssetRequest req)
{
string cdir = m_dir + Path.DirectorySeparatorChar + req.AssetID.Data[0]
+ Path.DirectorySeparatorChar + req.AssetID.Data[1];
if (File.Exists(cdir + Path.DirectorySeparatorChar + req.AssetID + ".xml"))
{
FileStream x = File.OpenRead(cdir + Path.DirectorySeparatorChar + req.AssetID + ".xml");
AssetBase ret = (AssetBase) m_xs.Deserialize(x);
x.Close();
return ret;
}
return null;
}
}
}

View File

@ -421,6 +421,10 @@ namespace OpenSim
{ {
assetServer = new GridAssetClient(m_networkServersInfo.AssetURL); assetServer = new GridAssetClient(m_networkServersInfo.AssetURL);
} }
else if (m_assetStorage == "file")
{
assetServer = new FileAssetClient(m_networkServersInfo.AssetURL);
}
else else
{ {
SQLAssetServer sqlAssetServer = new SQLAssetServer(m_standaloneAssetPlugin, m_standaloneAssetSource); SQLAssetServer sqlAssetServer = new SQLAssetServer(m_standaloneAssetPlugin, m_standaloneAssetSource);