Add the asset service connectors and sample config. READ WARNINGS!!!

0.6.5-rc1
Melanie Thielker 2009-05-09 02:49:55 +00:00
parent cc2b072f6e
commit c1e7352d75
11 changed files with 384 additions and 9 deletions

View File

@ -80,7 +80,9 @@ namespace OpenSim
{ {
log4net.Appender.FileAppender appender = log4net.Appender.FileAppender appender =
(log4net.Appender.FileAppender)m_logFileAppender; (log4net.Appender.FileAppender)m_logFileAppender;
appender.File = startupConfig.GetString("LogFile", "OpenSim.log"); string fileName = startupConfig.GetString("LogFile", String.Empty);
if (fileName != String.Empty)
appender.File = fileName;
m_log.InfoFormat("[LOGGING] Logging started to file {0}", appender.File); m_log.InfoFormat("[LOGGING] Logging started to file {0}", appender.File);
} }
} }

View File

@ -13,6 +13,8 @@
<RegionModule id="HGWorldMapModule" type="OpenSim.Region.CoreModules.Hypergrid.HGWorldMapModule" /> <RegionModule id="HGWorldMapModule" type="OpenSim.Region.CoreModules.Hypergrid.HGWorldMapModule" />
<RegionModule id="LocalUserServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectors.User.LocalUserServicesConnector" /> <RegionModule id="LocalUserServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectors.User.LocalUserServicesConnector" />
<RegionModule id="RemoteUserServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectors.User.RemoteUserServicesConnector" /> <RegionModule id="RemoteUserServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectors.User.RemoteUserServicesConnector" />
<RegionModule id="LocalAssetServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectors.Asset.LocalAssetServicesConnector" />
<RegionModule id="RemoteAssetServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectors.Asset.RemoteAssetServicesConnector" />
</Extension> </Extension>
<Extension path = "/OpenSim/WindModule"> <Extension path = "/OpenSim/WindModule">

View File

@ -0,0 +1,122 @@
/*
* 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 log4net;
using Nini.Config;
using System;
using System.Reflection;
using OpenSim.Servers.Base;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;
using OpenSim.Services.Interfaces;
namespace OpenSim.Region.CoreModules.ServiceConnectors.Asset
{
public class LocalAssetServicesConnector : ISharedRegionModule
{
private static readonly ILog m_log =
LogManager.GetLogger(
MethodBase.GetCurrentMethod().DeclaringType);
private IAssetService m_AssetService;
private bool m_Enabled = false;
public string Name
{
get { return "LocalAssetServicesConnector"; }
}
public void Initialise(IConfigSource source)
{
IConfig moduleConfig = source.Configs["Modules"];
if (moduleConfig != null)
{
string name = moduleConfig.GetString("AssetServices", "");
if (name == Name)
{
IConfig assetConfig = source.Configs["AssetService"];
if (assetConfig == null)
{
m_log.Error("[ASSET CONNECTOR]: AssetService missing from OpanSim.ini");
return;
}
string serviceDll = assetConfig.GetString("Module",
String.Empty);
if (serviceDll == String.Empty)
{
m_log.Error("[ASSET CONNECTOR]: No ServiceDll named in section AssetService");
return;
}
Object[] args = new Object[] { source };
m_AssetService =
ServerUtils.LoadPlugin<IAssetService>(serviceDll,
args);
if (m_AssetService == null)
{
m_log.Error("[ASSET CONNECTOR]: Can't load asset service");
return;
}
m_Enabled = true;
m_log.Info("[ASSET CONNECTOR]: Local asset connector enabled");
}
}
}
public void PostInitialise()
{
}
public void Close()
{
}
public void AddRegion(Scene scene)
{
if (!m_Enabled)
return;
scene.RegisterModuleInterface<IAssetService>(m_AssetService);
}
public void RemoveRegion(Scene scene)
{
if (!m_Enabled)
return;
}
public void RegionLoaded(Scene scene)
{
if (!m_Enabled)
return;
}
}
}

View File

@ -0,0 +1,87 @@
/*
* 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 Nini.Config;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;
using OpenSim.Services.Interfaces;
namespace OpenSim.Region.CoreModules.ServiceConnectors.Asset
{
public class RemoteAssetServicesConnector : ISharedRegionModule
{
private bool m_Enabled = false;
public string Name
{
get { return "RemoteAssetServicesConnector"; }
}
public void Initialise(IConfigSource source)
{
IConfig moduleConfig = source.Configs["Modules"];
if (moduleConfig != null)
{
string name = moduleConfig.GetString("AssetServices", "");
if (name == Name)
{
m_Enabled = true;
}
}
}
public void PostInitialise()
{
if (!m_Enabled)
return;
}
public void Close()
{
if (!m_Enabled)
return;
}
public void AddRegion(Scene scene)
{
if (!m_Enabled)
return;
}
public void RemoveRegion(Scene scene)
{
if (!m_Enabled)
return;
}
public void RegionLoaded(Scene scene)
{
if (!m_Enabled)
return;
}
}
}

View File

@ -25,9 +25,10 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
using System;
using Nini.Config; using Nini.Config;
using OpenSim.Servers.Base;
using OpenSim.Services.Interfaces; using OpenSim.Services.Interfaces;
using OpenSim.Services.AssetService;
using OpenSim.Framework.Servers.HttpServer; using OpenSim.Framework.Servers.HttpServer;
namespace OpenSim.Servers.AssetServer namespace OpenSim.Servers.AssetServer
@ -38,9 +39,23 @@ namespace OpenSim.Servers.AssetServer
public AssetServiceConnector(IConfigSource config, IHttpServer server) public AssetServiceConnector(IConfigSource config, IHttpServer server)
{ {
m_AssetService = new AssetService(config); IConfig serverConfig = config.Configs["AssetService"];
if (serverConfig == null)
throw new Exception("No section 'Server' in config file");
string assetService = serverConfig.GetString("Module",
String.Empty);
if (assetService == String.Empty)
throw new Exception("No AssetService in config file");
Object[] args = new Object[] { config };
m_AssetService =
ServerUtils.LoadPlugin<IAssetService>(assetService, args);
server.AddStreamHandler(new AssetServerGetHandler(m_AssetService)); server.AddStreamHandler(new AssetServerGetHandler(m_AssetService));
server.AddStreamHandler(new AssetServerPostHandler(m_AssetService));
server.AddStreamHandler(new AssetServerDeleteHandler(m_AssetService));
} }
} }
} }

View File

@ -0,0 +1,75 @@
/*
* 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 Nini.Config;
using log4net;
using System;
using System.Reflection;
using System.IO;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Xml;
using System.Xml.Serialization;
using OpenSim.Servers.Base;
using OpenSim.Services.Interfaces;
using OpenSim.Framework;
using OpenSim.Framework.Servers.HttpServer;
namespace OpenSim.Servers.AssetServer
{
public class AssetServerDeleteHandler : BaseStreamHandler
{
private static readonly ILog m_log =
LogManager.GetLogger(
MethodBase.GetCurrentMethod().DeclaringType);
private IAssetService m_AssetService;
public AssetServerDeleteHandler(IAssetService service) :
base("DELETE", "/assets")
{
m_AssetService = service;
}
public override byte[] Handle(string path, Stream request,
OSHttpRequest httpRequest, OSHttpResponse httpResponse)
{
bool result = false;
string[] p = SplitParams(path);
if (p.Length > 0)
{
result = m_AssetService.Delete(p[0]);
}
XmlSerializer xs = new XmlSerializer(typeof(bool));
return ServerUtils.SerializeResult(xs, result);
}
}
}

View File

@ -26,8 +26,10 @@
*/ */
using Nini.Config; using Nini.Config;
using log4net;
using System; using System;
using System.IO; using System.IO;
using System.Reflection;
using System.Net; using System.Net;
using System.Text; using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
@ -35,7 +37,6 @@ using System.Xml;
using System.Xml.Serialization; using System.Xml.Serialization;
using OpenSim.Servers.Base; using OpenSim.Servers.Base;
using OpenSim.Services.Interfaces; using OpenSim.Services.Interfaces;
using OpenSim.Services.AssetService;
using OpenSim.Framework; using OpenSim.Framework;
using OpenSim.Framework.Servers.HttpServer; using OpenSim.Framework.Servers.HttpServer;
@ -43,6 +44,10 @@ namespace OpenSim.Servers.AssetServer
{ {
public class AssetServerGetHandler : BaseStreamHandler public class AssetServerGetHandler : BaseStreamHandler
{ {
private static readonly ILog m_log =
LogManager.GetLogger(
MethodBase.GetCurrentMethod().DeclaringType);
private IAssetService m_AssetService; private IAssetService m_AssetService;
public AssetServerGetHandler(IAssetService service) : public AssetServerGetHandler(IAssetService service) :

View File

@ -26,7 +26,9 @@
*/ */
using Nini.Config; using Nini.Config;
using log4net;
using System; using System;
using System.Reflection;
using System.IO; using System.IO;
using System.Net; using System.Net;
using System.Text; using System.Text;
@ -35,7 +37,6 @@ using System.Xml;
using System.Xml.Serialization; using System.Xml.Serialization;
using OpenSim.Servers.Base; using OpenSim.Servers.Base;
using OpenSim.Services.Interfaces; using OpenSim.Services.Interfaces;
using OpenSim.Services.AssetService;
using OpenSim.Framework; using OpenSim.Framework;
using OpenSim.Framework.Servers.HttpServer; using OpenSim.Framework.Servers.HttpServer;
@ -43,6 +44,10 @@ namespace OpenSim.Servers.AssetServer
{ {
public class AssetServerPostHandler : BaseStreamHandler public class AssetServerPostHandler : BaseStreamHandler
{ {
private static readonly ILog m_log =
LogManager.GetLogger(
MethodBase.GetCurrentMethod().DeclaringType);
private IAssetService m_AssetService; private IAssetService m_AssetService;
public AssetServerPostHandler(IAssetService service) : public AssetServerPostHandler(IAssetService service) :
@ -54,11 +59,19 @@ namespace OpenSim.Servers.AssetServer
public override byte[] Handle(string path, Stream request, public override byte[] Handle(string path, Stream request,
OSHttpRequest httpRequest, OSHttpResponse httpResponse) OSHttpRequest httpRequest, OSHttpResponse httpResponse)
{ {
byte[] result = new byte[0];
XmlSerializer xs = new XmlSerializer(typeof (AssetBase)); XmlSerializer xs = new XmlSerializer(typeof (AssetBase));
AssetBase asset = (AssetBase) xs.Deserialize(request); AssetBase asset = (AssetBase) xs.Deserialize(request);
string[] p = SplitParams(path);
if (p.Length > 1)
{
bool result =
m_AssetService.UpdateContent(asset.ID, asset.Data);
xs = new XmlSerializer(typeof(bool));
return ServerUtils.SerializeResult(xs, result);
}
string id = m_AssetService.Store(asset); string id = m_AssetService.Store(asset);
xs = new XmlSerializer(typeof(string)); xs = new XmlSerializer(typeof(string));

View File

@ -27,11 +27,12 @@
using System; using System;
using System.IO; using System.IO;
using System.Reflection;
using System.Xml; using System.Xml;
using System.Xml.Serialization; using System.Xml.Serialization;
using System.Text; using System.Text;
namespace OpenSim.Servers.AssetServer namespace OpenSim.Servers.Base
{ {
public static class ServerUtils public static class ServerUtils
{ {
@ -92,5 +93,37 @@ namespace OpenSim.Servers.AssetServer
return ret; return ret;
} }
public static T LoadPlugin<T>(string dllName, Object[] args) where T:class
{
string interfaceName = typeof(T).ToString();
try
{
Assembly pluginAssembly = Assembly.LoadFrom(dllName);
foreach (Type pluginType in pluginAssembly.GetTypes())
{
if (pluginType.IsPublic)
{
Type typeInterface =
pluginType.GetInterface(interfaceName, true);
if (typeInterface != null)
{
T plug = (T)Activator.CreateInstance(pluginType,
args);
return plug;
}
}
}
return null;
}
catch (Exception e)
{
return null;
}
}
} }
} }

View File

@ -1287,3 +1287,24 @@
;FullUpdateRate=14 ;FullUpdateRate=14
;PacketMTU = 1400 ;PacketMTU = 1400
; The following is the configuration section for the new style gtid servers
; If you don't know what this is, don't enable it. It will eat your data,
; format your hard drive and make all meat in your fridge spoil.
; You have been warned.
; Some of this may actually work!
[Modules]
; Choose one
;AssetServices = "LocalAssetServicesConnector"
;AssetServices = "RemoteAssetServicesConnector"
[AssetService]
; Parameters for local assets
;Module = "OpenSim.Services.AssetService.dll"
;StorageProvider = "OpenSim.Data.MySQL.dll"
;ConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=opensim;"
;DefaultAssetLoader = "OpenSim.Framework.AssetLoader.Filesystem.dll"
;AssetLoaderArgs = "assets/AssetSets.xml"
; Parameters for remote assets
;AssetServerURI = "http://localhost:8003/"

View File

@ -1405,7 +1405,6 @@
<Reference name="OpenSim.Servers.Base"/> <Reference name="OpenSim.Servers.Base"/>
<Reference name="OpenSim.Services.Base" /> <Reference name="OpenSim.Services.Base" />
<Reference name="OpenSim.Services.Interfaces"/> <Reference name="OpenSim.Services.Interfaces"/>
<Reference name="OpenSim.Services.AssetService"/>
<Reference name="Nini.dll" /> <Reference name="Nini.dll" />
<Reference name="log4net.dll"/> <Reference name="log4net.dll"/>
@ -1439,6 +1438,7 @@
<Reference name="OpenSim.Framework.Communications"/> <Reference name="OpenSim.Framework.Communications"/>
<Reference name="OpenSim.Data" /> <Reference name="OpenSim.Data" />
<Reference name="OpenSim.Region.Framework" /> <Reference name="OpenSim.Region.Framework" />
<Reference name="OpenSim.Servers.Base" />
<Reference name="OpenSim.Services.Base" /> <Reference name="OpenSim.Services.Base" />
<Reference name="OpenSim.Services.Interfaces" /> <Reference name="OpenSim.Services.Interfaces" />
<Reference name="OpenSim.Services.UserService" /> <Reference name="OpenSim.Services.UserService" />