From 646bbbc84b8010e0dacbeed5342cdb045f46cc49 Mon Sep 17 00:00:00 2001
From: MW
Date: Wed, 27 Jun 2007 15:28:52 +0000
Subject: Some work on restructuring the namespaces / project names. Note this
doesn't compile yet as not all the code has been changed to use the new
namespaces. Am committing it now for feedback on the namespaces.
---
OpenSim/Grid/AssetServer/Main.cs | 337 +++++++++++++++++++++++++++++++++++++++
1 file changed, 337 insertions(+)
create mode 100644 OpenSim/Grid/AssetServer/Main.cs
(limited to 'OpenSim/Grid/AssetServer/Main.cs')
diff --git a/OpenSim/Grid/AssetServer/Main.cs b/OpenSim/Grid/AssetServer/Main.cs
new file mode 100644
index 0000000..96c9dba
--- /dev/null
+++ b/OpenSim/Grid/AssetServer/Main.cs
@@ -0,0 +1,337 @@
+/*
+* Copyright (c) Contributors, http://www.openmetaverse.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.IO;
+using System.Text;
+using System.Timers;
+using System.Net;
+using System.Reflection;
+using System.Threading;
+using libsecondlife;
+using OpenSim.Framework;
+using OpenSim.Framework.Sims;
+using OpenSim.Framework.Console;
+using OpenSim.Framework.Types;
+using OpenSim.Framework.Interfaces;
+using OpenSim.Framework.Utilities;
+using OpenSim.Servers;
+using Db4objects.Db4o;
+using Db4objects.Db4o.Query;
+
+namespace OpenGridServices.AssetServer
+{
+ ///
+ /// An asset server
+ ///
+ public class OpenAsset_Main : conscmd_callback
+ {
+ private IObjectContainer db;
+
+ public static OpenAsset_Main assetserver;
+
+ private LogBase m_console;
+
+ [STAThread]
+ public static void Main(string[] args)
+ {
+ Console.WriteLine("Starting...\n");
+
+ assetserver = new OpenAsset_Main();
+ assetserver.Startup();
+
+ assetserver.Work();
+ }
+
+ private void Work()
+ {
+ m_console.Notice("Enter help for a list of commands");
+
+ while (true)
+ {
+ m_console.MainLogPrompt();
+ }
+ }
+
+ private OpenAsset_Main()
+ {
+ m_console = new LogBase("opengrid-AssetServer-console.log", "OpenAsset", this, false);
+ OpenSim.Framework.Console.MainLog.Instance = m_console;
+ }
+
+ public void Startup()
+ {
+ m_console.Verbose( "Main.cs:Startup() - Setting up asset DB");
+ setupDB();
+
+ m_console.Verbose( "Main.cs:Startup() - Starting HTTP process");
+ AssetHttpServer httpServer = new AssetHttpServer(8003);
+
+
+ httpServer.AddRestHandler("GET", "/assets/", this.assetGetMethod);
+ httpServer.AddRestHandler("POST", "/assets/", this.assetPostMethod);
+
+ httpServer.Start();
+
+ }
+
+ public string assetPostMethod(string requestBody, string path, string param)
+ {
+ AssetBase asset = new AssetBase();
+ asset.Name = "";
+ asset.FullID = new LLUUID(param);
+ Encoding Windows1252Encoding = Encoding.GetEncoding(1252);
+ byte[] buffer = Windows1252Encoding.GetBytes(requestBody);
+ asset.Data = buffer;
+ AssetStorage store = new AssetStorage();
+ store.Data = asset.Data;
+ store.Name = asset.Name;
+ store.UUID = asset.FullID;
+ db.Set(store);
+ db.Commit();
+ return "";
+ }
+
+ public string assetGetMethod(string request, string path, string param)
+ {
+ Console.WriteLine("got a request " + param);
+ byte[] assetdata = getAssetData(new LLUUID(param), false);
+ if (assetdata != null)
+ {
+ Encoding Windows1252Encoding = Encoding.GetEncoding(1252);
+ string ret = Windows1252Encoding.GetString(assetdata);
+ //string ret = System.Text.Encoding.Unicode.GetString(assetdata);
+
+ return ret;
+
+ }
+ else
+ {
+ return "";
+ }
+
+ }
+
+ public byte[] getAssetData(LLUUID assetID, bool isTexture)
+ {
+ bool found = false;
+ AssetStorage foundAsset = null;
+
+ IObjectSet result = db.Get(new AssetStorage(assetID));
+ if (result.Count > 0)
+ {
+ foundAsset = (AssetStorage)result.Next();
+ found = true;
+ }
+
+ if (found)
+ {
+ return foundAsset.Data;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ public void setupDB()
+ {
+ bool yapfile = System.IO.File.Exists("assets.yap");
+ try
+ {
+ db = Db4oFactory.OpenFile("assets.yap");
+ OpenSim.Framework.Console.MainLog.Instance.Verbose( "Main.cs:setupDB() - creation");
+ }
+ catch (Exception e)
+ {
+ db.Close();
+ OpenSim.Framework.Console.MainLog.Instance.Warn("Main.cs:setupDB() - Exception occured");
+ OpenSim.Framework.Console.MainLog.Instance.Warn(e.ToString());
+ }
+ if (!yapfile)
+ {
+ this.LoadDB();
+ }
+ }
+
+ public void LoadDB()
+ {
+ try
+ {
+
+ Console.WriteLine("setting up Asset database");
+
+ AssetBase Image = new AssetBase();
+ Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000001");
+ Image.Name = "Bricks";
+ this.LoadAsset(Image, true, "bricks.jp2");
+ AssetStorage store = new AssetStorage();
+ store.Data = Image.Data;
+ store.Name = Image.Name;
+ store.UUID = Image.FullID;
+ db.Set(store);
+ db.Commit();
+
+ Image = new AssetBase();
+ Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000002");
+ Image.Name = "Plywood";
+ this.LoadAsset(Image, true, "plywood.jp2");
+ store = new AssetStorage();
+ store.Data = Image.Data;
+ store.Name = Image.Name;
+ store.UUID = Image.FullID;
+ db.Set(store);
+ db.Commit();
+
+ Image = new AssetBase();
+ Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000003");
+ Image.Name = "Rocks";
+ this.LoadAsset(Image, true, "rocks.jp2");
+ store = new AssetStorage();
+ store.Data = Image.Data;
+ store.Name = Image.Name;
+ store.UUID = Image.FullID;
+ db.Set(store);
+ db.Commit();
+
+ Image = new AssetBase();
+ Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000004");
+ Image.Name = "Granite";
+ this.LoadAsset(Image, true, "granite.jp2");
+ store = new AssetStorage();
+ store.Data = Image.Data;
+ store.Name = Image.Name;
+ store.UUID = Image.FullID;
+ db.Set(store);
+ db.Commit();
+
+ Image = new AssetBase();
+ Image.FullID = new LLUUID("00000000-0000-0000-9999-000000000005");
+ Image.Name = "Hardwood";
+ this.LoadAsset(Image, true, "hardwood.jp2");
+ store = new AssetStorage();
+ store.Data = Image.Data;
+ store.Name = Image.Name;
+ store.UUID = Image.FullID;
+ db.Set(store);
+ db.Commit();
+
+ Image = new AssetBase();
+ Image.FullID = new LLUUID("00000000-0000-0000-5005-000000000005");
+ Image.Name = "Prim Base Texture";
+ this.LoadAsset(Image, true, "plywood.jp2");
+ store = new AssetStorage();
+ store.Data = Image.Data;
+ store.Name = Image.Name;
+ store.UUID = Image.FullID;
+ db.Set(store);
+ db.Commit();
+
+ Image = new AssetBase();
+ Image.FullID = new LLUUID("66c41e39-38f9-f75a-024e-585989bfab73");
+ Image.Name = "Shape";
+ this.LoadAsset(Image, false, "base_shape.dat");
+ store = new AssetStorage();
+ store.Data = Image.Data;
+ store.Name = Image.Name;
+ store.UUID = Image.FullID;
+ db.Set(store);
+ db.Commit();
+ }
+ catch (Exception e)
+ {
+ Console.WriteLine(e.Message);
+ }
+ }
+
+ private void LoadAsset(AssetBase info, bool image, string filename)
+ {
+
+
+ string dataPath = Path.Combine(System.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;
+ }
+
+ /*private GridConfig LoadConfigDll(string dllName)
+ {
+ Assembly pluginAssembly = Assembly.LoadFrom(dllName);
+ GridConfig config = null;
+
+ foreach (Type pluginType in pluginAssembly.GetTypes())
+ {
+ if (pluginType.IsPublic)
+ {
+ if (!pluginType.IsAbstract)
+ {
+ Type typeInterface = pluginType.GetInterface("IGridConfig", true);
+
+ if (typeInterface != null)
+ {
+ IGridConfig plug = (IGridConfig)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
+ config = plug.GetConfigObject();
+ break;
+ }
+
+ typeInterface = null;
+ }
+ }
+ }
+ pluginAssembly = null;
+ return config;
+ }*/
+
+ public void RunCmd(string cmd, string[] cmdparams)
+ {
+ switch (cmd)
+ {
+ case "help":
+ m_console.Notice("shutdown - shutdown this asset server (USE CAUTION!)");
+ break;
+
+ case "shutdown":
+ m_console.Close();
+ Environment.Exit(0);
+ break;
+ }
+ }
+
+ public void Show(string ShowWhat)
+ {
+ }
+ }
+}
--
cgit v1.1
From 2261e4ec2a43a56dbb74168a169f39b2c6c1f054 Mon Sep 17 00:00:00 2001
From: mingchen
Date: Wed, 27 Jun 2007 18:04:07 +0000
Subject: *Fixed all renaming for OpenGridServices.sln, still a reference issue
in prebuild.xml though
---
OpenSim/Grid/AssetServer/Main.cs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
(limited to 'OpenSim/Grid/AssetServer/Main.cs')
diff --git a/OpenSim/Grid/AssetServer/Main.cs b/OpenSim/Grid/AssetServer/Main.cs
index 96c9dba..d06998d 100644
--- a/OpenSim/Grid/AssetServer/Main.cs
+++ b/OpenSim/Grid/AssetServer/Main.cs
@@ -40,11 +40,11 @@ using OpenSim.Framework.Console;
using OpenSim.Framework.Types;
using OpenSim.Framework.Interfaces;
using OpenSim.Framework.Utilities;
-using OpenSim.Servers;
+using OpenSim.Framework.Servers;
using Db4objects.Db4o;
using Db4objects.Db4o.Query;
-namespace OpenGridServices.AssetServer
+namespace OpenSim.Grid.AssetServer
{
///
/// An asset server
--
cgit v1.1
From 9b6b6d05d45cf0f754a0b26bf6240ef50be66563 Mon Sep 17 00:00:00 2001
From: lbsa71
Date: Tue, 3 Jul 2007 14:37:29 +0000
Subject: * Optimized usings (the 'LL ate my scripts' commit) * added some
licensing info
---
OpenSim/Grid/AssetServer/Main.cs | 24 +++++++-----------------
1 file changed, 7 insertions(+), 17 deletions(-)
(limited to 'OpenSim/Grid/AssetServer/Main.cs')
diff --git a/OpenSim/Grid/AssetServer/Main.cs b/OpenSim/Grid/AssetServer/Main.cs
index d06998d..112d72f 100644
--- a/OpenSim/Grid/AssetServer/Main.cs
+++ b/OpenSim/Grid/AssetServer/Main.cs
@@ -29,20 +29,10 @@
using System;
using System.IO;
using System.Text;
-using System.Timers;
-using System.Net;
-using System.Reflection;
-using System.Threading;
+using Db4objects.Db4o;
using libsecondlife;
-using OpenSim.Framework;
-using OpenSim.Framework.Sims;
using OpenSim.Framework.Console;
using OpenSim.Framework.Types;
-using OpenSim.Framework.Interfaces;
-using OpenSim.Framework.Utilities;
-using OpenSim.Framework.Servers;
-using Db4objects.Db4o;
-using Db4objects.Db4o.Query;
namespace OpenSim.Grid.AssetServer
{
@@ -81,7 +71,7 @@ namespace OpenSim.Grid.AssetServer
private OpenAsset_Main()
{
m_console = new LogBase("opengrid-AssetServer-console.log", "OpenAsset", this, false);
- OpenSim.Framework.Console.MainLog.Instance = m_console;
+ MainLog.Instance = m_console;
}
public void Startup()
@@ -161,17 +151,17 @@ namespace OpenSim.Grid.AssetServer
public void setupDB()
{
- bool yapfile = System.IO.File.Exists("assets.yap");
+ bool yapfile = File.Exists("assets.yap");
try
{
db = Db4oFactory.OpenFile("assets.yap");
- OpenSim.Framework.Console.MainLog.Instance.Verbose( "Main.cs:setupDB() - creation");
+ MainLog.Instance.Verbose( "Main.cs:setupDB() - creation");
}
catch (Exception e)
{
db.Close();
- OpenSim.Framework.Console.MainLog.Instance.Warn("Main.cs:setupDB() - Exception occured");
- OpenSim.Framework.Console.MainLog.Instance.Warn(e.ToString());
+ MainLog.Instance.Warn("Main.cs:setupDB() - Exception occured");
+ MainLog.Instance.Warn(e.ToString());
}
if (!yapfile)
{
@@ -273,7 +263,7 @@ namespace OpenSim.Grid.AssetServer
{
- string dataPath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "assets"); //+ folder;
+ string dataPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "assets"); //+ folder;
string fileName = Path.Combine(dataPath, filename);
FileInfo fInfo = new FileInfo(fileName);
long numBytes = fInfo.Length;
--
cgit v1.1
From 6a2588454a1ac4bb484ad0b9ee648e9ac156f8db Mon Sep 17 00:00:00 2001
From: lbsa71
Date: Wed, 4 Jul 2007 14:12:32 +0000
Subject: * Removed AssetHttpServer, using BaseHttpServer instead * Removed
legacy REST handling * Created two custom IStreamHandlers for asset
up/download * Removed quite a lot of double and triple encodings, trying to
work towards binary only and direct write into storage. * Introduced
BaseStreamHandler with GetParam() and some other goodies
---
OpenSim/Grid/AssetServer/Main.cs | 169 ++++++++++++++++++++++++++++-----------
1 file changed, 124 insertions(+), 45 deletions(-)
(limited to 'OpenSim/Grid/AssetServer/Main.cs')
diff --git a/OpenSim/Grid/AssetServer/Main.cs b/OpenSim/Grid/AssetServer/Main.cs
index 112d72f..3e302d8 100644
--- a/OpenSim/Grid/AssetServer/Main.cs
+++ b/OpenSim/Grid/AssetServer/Main.cs
@@ -33,13 +33,14 @@ using Db4objects.Db4o;
using libsecondlife;
using OpenSim.Framework.Console;
using OpenSim.Framework.Types;
+using OpenSim.Framework.Servers;
namespace OpenSim.Grid.AssetServer
{
///
/// An asset server
///
- public class OpenAsset_Main : conscmd_callback
+ public class OpenAsset_Main : conscmd_callback
{
private IObjectContainer db;
@@ -76,58 +77,60 @@ namespace OpenSim.Grid.AssetServer
public void Startup()
{
- m_console.Verbose( "Main.cs:Startup() - Setting up asset DB");
+ m_console.Verbose("Main.cs:Startup() - Setting up asset DB");
setupDB();
- m_console.Verbose( "Main.cs:Startup() - Starting HTTP process");
- AssetHttpServer httpServer = new AssetHttpServer(8003);
+ m_console.Verbose("Main.cs:Startup() - Starting HTTP process");
+ BaseHttpServer httpServer = new BaseHttpServer(8003);
+ httpServer.AddStreamHandler( new GetAssetStreamHandler(this));
+ httpServer.AddStreamHandler(new PostAssetStreamHandler( this ));
- httpServer.AddRestHandler("GET", "/assets/", this.assetGetMethod);
- httpServer.AddRestHandler("POST", "/assets/", this.assetPostMethod);
+ //httpServer.AddRestHandler("GET", "/assets/", this.assetGetMethod);
+ //httpServer.AddRestHandler("POST", "/assets/", this.assetPostMethod);
httpServer.Start();
}
- public string assetPostMethod(string requestBody, string path, string param)
- {
- AssetBase asset = new AssetBase();
- asset.Name = "";
- asset.FullID = new LLUUID(param);
- Encoding Windows1252Encoding = Encoding.GetEncoding(1252);
- byte[] buffer = Windows1252Encoding.GetBytes(requestBody);
- asset.Data = buffer;
- AssetStorage store = new AssetStorage();
- store.Data = asset.Data;
- store.Name = asset.Name;
- store.UUID = asset.FullID;
- db.Set(store);
- db.Commit();
- return "";
- }
-
- public string assetGetMethod(string request, string path, string param)
- {
- Console.WriteLine("got a request " + param);
- byte[] assetdata = getAssetData(new LLUUID(param), false);
- if (assetdata != null)
- {
- Encoding Windows1252Encoding = Encoding.GetEncoding(1252);
- string ret = Windows1252Encoding.GetString(assetdata);
- //string ret = System.Text.Encoding.Unicode.GetString(assetdata);
-
- return ret;
-
- }
- else
- {
- return "";
- }
-
- }
-
- public byte[] getAssetData(LLUUID assetID, bool isTexture)
+ //public string AssetPostMethod(string requestBody, string path, string param)
+ //{
+ // AssetBase asset = new AssetBase();
+ // asset.Name = "";
+ // asset.FullID = new LLUUID(param);
+ // Encoding Windows1252Encoding = Encoding.GetEncoding(1252);
+ // byte[] buffer = Windows1252Encoding.GetBytes(requestBody);
+ // asset.Data = buffer;
+ // AssetStorage store = new AssetStorage();
+ // store.Data = asset.Data;
+ // store.Name = asset.Name;
+ // store.UUID = asset.FullID;
+ // db.Set(store);
+ // db.Commit();
+ // return "";
+ //}
+
+ //public string AssetGetMethod(string request, string path, string param)
+ //{
+ // Console.WriteLine("got a request " + param);
+ // byte[] assetdata = GetAssetData(new LLUUID(param), false);
+ // if (assetdata != null)
+ // {
+ // Encoding Windows1252Encoding = Encoding.GetEncoding(1252);
+ // string ret = Windows1252Encoding.GetString(assetdata);
+ // //string ret = System.Text.Encoding.Unicode.GetString(assetdata);
+
+ // return ret;
+
+ // }
+ // else
+ // {
+ // return "";
+ // }
+
+ //}
+
+ public byte[] GetAssetData(LLUUID assetID, bool isTexture)
{
bool found = false;
AssetStorage foundAsset = null;
@@ -155,7 +158,7 @@ namespace OpenSim.Grid.AssetServer
try
{
db = Db4oFactory.OpenFile("assets.yap");
- MainLog.Instance.Verbose( "Main.cs:setupDB() - creation");
+ MainLog.Instance.Verbose("Main.cs:setupDB() - creation");
}
catch (Exception e)
{
@@ -305,6 +308,21 @@ namespace OpenSim.Grid.AssetServer
return config;
}*/
+ public void CreateAsset(LLUUID assetId, byte[] assetData)
+ {
+ AssetBase asset = new AssetBase();
+ asset.Name = "";
+ asset.FullID = assetId;
+ asset.Data = assetData;
+
+ AssetStorage store = new AssetStorage();
+ store.Data = asset.Data;
+ store.Name = asset.Name;
+ store.UUID = asset.FullID;
+ db.Set(store);
+ db.Commit();
+ }
+
public void RunCmd(string cmd, string[] cmdparams)
{
switch (cmd)
@@ -324,4 +342,65 @@ namespace OpenSim.Grid.AssetServer
{
}
}
+
+ public class GetAssetStreamHandler : BaseStreamHandler
+ {
+ OpenAsset_Main m_assetManager;
+
+ override public byte[] Handle(string path, Stream request)
+ {
+ string param = GetParam(path);
+
+ byte[] assetdata = m_assetManager.GetAssetData(new LLUUID(param), false);
+ if (assetdata != null)
+ {
+ return assetdata;
+ }
+ else
+ {
+ return new byte[]{};
+ }
+ }
+
+ public GetAssetStreamHandler(OpenAsset_Main assetManager):base( "/assets/", "GET")
+ {
+ m_assetManager = assetManager;
+ }
+ }
+
+ public class PostAssetStreamHandler : BaseStreamHandler
+ {
+ OpenAsset_Main m_assetManager;
+
+ override public byte[] Handle(string path, Stream request)
+ {
+ string param = GetParam(path);
+ LLUUID assetId = new LLUUID(param);
+ byte[] txBuffer = new byte[4096];
+
+ using( BinaryReader binReader = new BinaryReader( request ) )
+ {
+ using (MemoryStream memoryStream = new MemoryStream(4096))
+ {
+ int count;
+ while ((count = binReader.Read(txBuffer, 0, 4096)) > 0)
+ {
+ memoryStream.Write(txBuffer, 0, count);
+ }
+
+ byte[] assetData = memoryStream.ToArray();
+
+ m_assetManager.CreateAsset(assetId, assetData);
+ }
+ }
+
+ return new byte[]{};
+ }
+
+ public PostAssetStreamHandler( OpenAsset_Main assetManager )
+ : base("/assets/", "POST")
+ {
+ m_assetManager = assetManager;
+ }
+ }
}
--
cgit v1.1