From f57f4d1ab878eef5c75347a1f49690993cf98561 Mon Sep 17 00:00:00 2001
From: Adam Frisby
Date: Sat, 30 Aug 2008 04:42:23 +0000
Subject: * 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 "/
/0x/0x/0x/0000-0000-000000-0000-0000.xml" *
Directory 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.
---
.../Communications/Cache/FileAssetClient.cs | 56 ++++++++++++++++++++++
1 file changed, 56 insertions(+)
create mode 100644 OpenSim/Framework/Communications/Cache/FileAssetClient.cs
(limited to 'OpenSim/Framework/Communications')
diff --git a/OpenSim/Framework/Communications/Cache/FileAssetClient.cs b/OpenSim/Framework/Communications/Cache/FileAssetClient.cs
new file mode 100644
index 0000000..fcab349
--- /dev/null
+++ b/OpenSim/Framework/Communications/Cache/FileAssetClient.cs
@@ -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;
+ }
+ }
+}
--
cgit v1.1