Some very Preliminary work on .net remoting for interregion comms.

a few more classes for CAPS LLSD types.
Sugilite
MW 2007-06-27 15:03:54 +00:00
parent 1eec177d4b
commit 223550b7e4
17 changed files with 300 additions and 142 deletions

View File

@ -7,10 +7,11 @@ namespace OpenGrid.Framework.Communications.OGS1
{
public class GridCommsManager : CommunicationsManager
{
private OGS1GridServices gridInterComms = new OGS1GridServices();
public GridCommsManager(NetworkServersInfo serversInfo) :base(serversInfo)
{
GridServer = new OGS1GridServices();
InterRegion = new OGSInterSimComms();
GridServer = gridInterComms;
InterRegion = gridInterComms;
UserServer = new OGSUserServices();
}
}

View File

@ -2,9 +2,11 @@ using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using OpenSim.Servers;
using OpenSim.Framework;
using OpenSim.Framework.Types;
using OpenGrid.Framework.Communications;
@ -14,7 +16,7 @@ using libsecondlife;
namespace OpenGrid.Framework.Communications.OGS1
{
public class OGS1GridServices : IGridServices
public class OGS1GridServices : IGridServices, IInterRegionCommunications
{
public Dictionary<ulong, RegionCommsListener> listeners = new Dictionary<ulong, RegionCommsListener>();
public GridInfo grid;
@ -51,17 +53,17 @@ namespace OpenGrid.Framework.Communications.OGS1
return null;
}
// Initialise the background listeners
listeners[regionInfo.RegionHandle] = new RegionCommsListener();
if (!initialised)
if (!this.listeners.ContainsKey(regionInfo.RegionHandle))
{
initialised = true;
// initialised = true;
httpListener = new BaseHttpServer(regionInfo.CommsIPListenPort);
httpListener.AddXmlRPCHandler("expect_user", this.ExpectUser);
httpListener.Start();
}
// Initialise the background listeners
listeners[regionInfo.RegionHandle] = new RegionCommsListener();
return listeners[regionInfo.RegionHandle];
}
@ -182,6 +184,65 @@ namespace OpenGrid.Framework.Communications.OGS1
return new XmlRpcResponse();
}
#region InterRegion Comms
private void StartRemoting()
{
TcpChannel ch = new TcpChannel(8895);
ChannelServices.RegisterChannel(ch);
WellKnownServiceTypeEntry wellType = new WellKnownServiceTypeEntry( Type.GetType("OGS1InterRegionRemoting"), "InterRegions", WellKnownObjectMode.Singleton);
RemotingConfiguration.RegisterWellKnownServiceType(wellType);
InterRegionSingleton.Instance.OnArrival += this.IncomingArrival;
InterRegionSingleton.Instance.OnChildAgent += this.IncomingChildAgent;
}
#region Methods called by regions in this instance
public bool InformRegionOfChildAgent(ulong regionHandle, AgentCircuitData agentData)
{
if (this.listeners.ContainsKey(regionHandle))
{
this.listeners[regionHandle].TriggerExpectUser(regionHandle, agentData);
return true;
}
//TODO need to see if we know about where this region is and use .net remoting
// to inform it.
return false;
}
public bool ExpectAvatarCrossing(ulong regionHandle, libsecondlife.LLUUID agentID, libsecondlife.LLVector3 position)
{
if (this.listeners.ContainsKey(regionHandle))
{
this.listeners[regionHandle].TriggerExpectAvatarCrossing(regionHandle, agentID, position);
return true;
}
//TODO need to see if we know about where this region is and use .net remoting
// to inform it.
return false;
}
#endregion
#region Methods triggered by calls from external instances
public bool IncomingChildAgent(ulong regionHandle, AgentCircuitData agentData)
{
if (this.listeners.ContainsKey(regionHandle))
{
this.listeners[regionHandle].TriggerExpectUser(regionHandle, agentData);
return true;
}
return false;
}
public bool IncomingArrival(ulong regionHandle, libsecondlife.LLUUID agentID, libsecondlife.LLVector3 position)
{
if (this.listeners.ContainsKey(regionHandle))
{
this.listeners[regionHandle].TriggerExpectAvatarCrossing(regionHandle, agentID, position);
return true;
}
return false;
}
#endregion
#endregion
}
}

View File

@ -5,15 +5,66 @@ using OpenSim.Framework.Types;
using OpenGrid.Framework.Communications;
namespace OpenGrid.Framework.Communications.OGS1
{
public class OGSInterSimComms : IInterRegionCommunications
public delegate bool InformRegionChild(ulong regionHandle, AgentCircuitData agentData);
public delegate bool ExpectArrival(ulong regionHandle, libsecondlife.LLUUID agentID, libsecondlife.LLVector3 position);
public sealed class InterRegionSingleton
{
static readonly InterRegionSingleton instance = new InterRegionSingleton();
public event InformRegionChild OnChildAgent;
public event ExpectArrival OnArrival;
static InterRegionSingleton()
{
}
InterRegionSingleton()
{
}
public static InterRegionSingleton Instance
{
get
{
return instance;
}
}
public bool InformRegionOfChildAgent(ulong regionHandle, AgentCircuitData agentData)
{
if (OnChildAgent != null)
{
return OnChildAgent(regionHandle, agentData);
}
return false;
}
public bool ExpectAvatarCrossing(ulong regionHandle, libsecondlife.LLUUID agentID, libsecondlife.LLVector3 position)
{
if (OnArrival != null)
{
return OnArrival(regionHandle, agentID, position);
}
return false;
}
}
public class OGS1InterRegionRemoting : MarshalByRefObject
{
public OGS1InterRegionRemoting()
{
}
public bool InformRegionOfChildAgent(ulong regionHandle, AgentCircuitData agentData)
{
return InterRegionSingleton.Instance.InformRegionOfChildAgent(regionHandle, agentData);
}
public bool ExpectAvatarCrossing(ulong regionHandle, libsecondlife.LLUUID agentID, libsecondlife.LLVector3 position)
{
return InterRegionSingleton.Instance.ExpectAvatarCrossing(regionHandle, agentID, position);
}
}
}

View File

@ -1,4 +1,4 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectType>Local</ProjectType>
<ProductVersion>8.0.50727</ProductVersion>
@ -6,7 +6,8 @@
<ProjectGuid>{17442AF1-0000-0000-0000-000000000000}</ProjectGuid>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ApplicationIcon></ApplicationIcon>
<ApplicationIcon>
</ApplicationIcon>
<AssemblyKeyContainerName>
</AssemblyKeyContainerName>
<AssemblyName>OpenGrid.Framework.Communications.OGS1</AssemblyName>
@ -15,9 +16,11 @@
<DefaultTargetSchema>IE50</DefaultTargetSchema>
<DelaySign>false</DelaySign>
<OutputType>Library</OutputType>
<AppDesignerFolder></AppDesignerFolder>
<AppDesignerFolder>
</AppDesignerFolder>
<RootNamespace>OpenGrid.Framework.Communications.OGS1</RootNamespace>
<StartupObject></StartupObject>
<StartupObject>
</StartupObject>
<FileUpgradeFlags>
</FileUpgradeFlags>
</PropertyGroup>
@ -28,7 +31,8 @@
<ConfigurationOverrideFile>
</ConfigurationOverrideFile>
<DefineConstants>TRACE;DEBUG</DefineConstants>
<DocumentationFile></DocumentationFile>
<DocumentationFile>
</DocumentationFile>
<DebugSymbols>True</DebugSymbols>
<FileAlignment>4096</FileAlignment>
<Optimize>False</Optimize>
@ -37,7 +41,8 @@
<RemoveIntegerChecks>False</RemoveIntegerChecks>
<TreatWarningsAsErrors>False</TreatWarningsAsErrors>
<WarningLevel>4</WarningLevel>
<NoWarn></NoWarn>
<NoWarn>
</NoWarn>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<AllowUnsafeBlocks>False</AllowUnsafeBlocks>
@ -46,7 +51,8 @@
<ConfigurationOverrideFile>
</ConfigurationOverrideFile>
<DefineConstants>TRACE</DefineConstants>
<DocumentationFile></DocumentationFile>
<DocumentationFile>
</DocumentationFile>
<DebugSymbols>False</DebugSymbols>
<FileAlignment>4096</FileAlignment>
<Optimize>True</Optimize>
@ -55,22 +61,24 @@
<RemoveIntegerChecks>False</RemoveIntegerChecks>
<TreatWarningsAsErrors>False</TreatWarningsAsErrors>
<WarningLevel>4</WarningLevel>
<NoWarn></NoWarn>
<NoWarn>
</NoWarn>
</PropertyGroup>
<ItemGroup>
<Reference Include="libsecondlife.dll" >
<Reference Include="libsecondlife.dll">
<HintPath>..\..\bin\libsecondlife.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="System" >
<Reference Include="System">
<HintPath>System.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="System.Data" >
<Reference Include="System.Data">
<HintPath>System.Data.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="System.Xml" >
<Reference Include="System.Runtime.Remoting" />
<Reference Include="System.Xml">
<HintPath>System.Xml.dll</HintPath>
<Private>False</Private>
</Reference>
@ -80,37 +88,37 @@
<Name>OpenGrid.Framework.Communications</Name>
<Project>{683344D5-0000-0000-0000-000000000000}</Project>
<Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
<Private>False</Private>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\OpenGrid.Framework.Data\OpenGrid.Framework.Data.csproj">
<Name>OpenGrid.Framework.Data</Name>
<Project>{62CDF671-0000-0000-0000-000000000000}</Project>
<Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
<Private>False</Private>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\OpenSim.Framework\OpenSim.Framework.csproj">
<Name>OpenSim.Framework</Name>
<Project>{8ACA2445-0000-0000-0000-000000000000}</Project>
<Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
<Private>False</Private>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\OpenSim.Framework.Console\OpenSim.Framework.Console.csproj">
<Name>OpenSim.Framework.Console</Name>
<Project>{A7CD0630-0000-0000-0000-000000000000}</Project>
<Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
<Private>False</Private>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\OpenSim.Servers\OpenSim.Servers.csproj">
<Name>OpenSim.Servers</Name>
<Project>{8BB20F0A-0000-0000-0000-000000000000}</Project>
<Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
<Private>False</Private>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\XmlRpcCS\XMLRPC.csproj">
<Name>XMLRPC</Name>
<Project>{8E81D43C-0000-0000-0000-000000000000}</Project>
<Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
<Private>False</Private>
<Private>False</Private>
</ProjectReference>
</ItemGroup>
<ItemGroup>

View File

@ -89,7 +89,23 @@ namespace OpenSim.Framework
System.Reflection.FieldInfo field = myType.GetField((string)enumerator.Key);
if (field != null)
{
field.SetValue(obj, enumerator.Value);
if (enumerator.Value is Hashtable)
{
object fieldValue = field.GetValue(obj);
DeserialiseLLSDMap((Hashtable) enumerator.Value, fieldValue);
}
else if (enumerator.Value is ArrayList)
{
object fieldValue = field.GetValue(obj);
fieldValue.GetType().GetField("Array").SetValue(fieldValue, enumerator.Value);
//TODO
// the LLSD map/array types in the array need to be deserialised
// but first we need to know the right class to deserialise them into.
}
else
{
field.SetValue(obj, enumerator.Value);
}
}
}
break;
@ -161,6 +177,39 @@ namespace OpenSim.Framework
}
}
[LLSDType("MAP")]
public class LLSDUploadReply
{
public string new_asset = "";
public LLUUID new_inventory_item = LLUUID.Zero;
public string state = "";
public LLSDUploadReply()
{
}
}
[LLSDType("MAP")]
public class LLSDCapEvent
{
public int id = 0;
public LLSDArray events = new LLSDArray();
public LLSDCapEvent()
{
}
}
[LLSDType("MAP")]
public class LLSDEmpty
{
public LLSDEmpty()
{
}
}
[LLSDType("MAP")]
public class LLSDTest

View File

@ -126,15 +126,7 @@
<Compile Include="SimProfile.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="UserProfile.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="UserProfileManager.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="UserProfileManagerBase.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="UserProfile.cs" />
<Compile Include="Util.cs">
<SubType>Code</SubType>
</Compile>

View File

@ -49,6 +49,7 @@ namespace OpenSim.Framework.Types
public uint DefaultHomeLocY = 0;
public int HttpListenerPort = 9000;
public int RemotingListenerPort = 8895;
public void InitConfig(bool sandboxMode, IGenericConfig configData)
{
@ -71,6 +72,19 @@ namespace OpenSim.Framework.Types
this.HttpListenerPort = Convert.ToInt32(attri);
}
attri = "";
attri = configData.GetAttribute("RemotingListenerPort");
if (attri == "")
{
string location = OpenSim.Framework.Console.MainLog.Instance.CmdPrompt("Remoting Listener Port", "8895");
configData.SetAttribute("RemotingListenerPort", location);
this.RemotingListenerPort = Convert.ToInt32(location);
}
else
{
this.RemotingListenerPort = Convert.ToInt32(attri);
}
if (sandboxMode)
{
// default home location X

View File

@ -1,4 +1,4 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectType>Local</ProjectType>
<ProductVersion>8.0.50727</ProductVersion>
@ -6,7 +6,8 @@
<ProjectGuid>{8BB20F0A-0000-0000-0000-000000000000}</ProjectGuid>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ApplicationIcon></ApplicationIcon>
<ApplicationIcon>
</ApplicationIcon>
<AssemblyKeyContainerName>
</AssemblyKeyContainerName>
<AssemblyName>OpenSim.Servers</AssemblyName>
@ -15,9 +16,11 @@
<DefaultTargetSchema>IE50</DefaultTargetSchema>
<DelaySign>false</DelaySign>
<OutputType>Library</OutputType>
<AppDesignerFolder></AppDesignerFolder>
<AppDesignerFolder>
</AppDesignerFolder>
<RootNamespace>OpenSim.Servers</RootNamespace>
<StartupObject></StartupObject>
<StartupObject>
</StartupObject>
<FileUpgradeFlags>
</FileUpgradeFlags>
</PropertyGroup>
@ -28,7 +31,8 @@
<ConfigurationOverrideFile>
</ConfigurationOverrideFile>
<DefineConstants>TRACE;DEBUG</DefineConstants>
<DocumentationFile></DocumentationFile>
<DocumentationFile>
</DocumentationFile>
<DebugSymbols>True</DebugSymbols>
<FileAlignment>4096</FileAlignment>
<Optimize>False</Optimize>
@ -37,7 +41,8 @@
<RemoveIntegerChecks>False</RemoveIntegerChecks>
<TreatWarningsAsErrors>False</TreatWarningsAsErrors>
<WarningLevel>4</WarningLevel>
<NoWarn></NoWarn>
<NoWarn>
</NoWarn>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<AllowUnsafeBlocks>False</AllowUnsafeBlocks>
@ -46,7 +51,8 @@
<ConfigurationOverrideFile>
</ConfigurationOverrideFile>
<DefineConstants>TRACE</DefineConstants>
<DocumentationFile></DocumentationFile>
<DocumentationFile>
</DocumentationFile>
<DebugSymbols>False</DebugSymbols>
<FileAlignment>4096</FileAlignment>
<Optimize>True</Optimize>
@ -55,18 +61,19 @@
<RemoveIntegerChecks>False</RemoveIntegerChecks>
<TreatWarningsAsErrors>False</TreatWarningsAsErrors>
<WarningLevel>4</WarningLevel>
<NoWarn></NoWarn>
<NoWarn>
</NoWarn>
</PropertyGroup>
<ItemGroup>
<Reference Include="libsecondlife.dll" >
<Reference Include="libsecondlife.dll">
<HintPath>..\..\bin\libsecondlife.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="System" >
<Reference Include="System">
<HintPath>System.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="System.Xml" >
<Reference Include="System.Xml">
<HintPath>System.Xml.dll</HintPath>
<Private>False</Private>
</Reference>
@ -76,19 +83,19 @@
<Name>OpenSim.Framework</Name>
<Project>{8ACA2445-0000-0000-0000-000000000000}</Project>
<Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
<Private>False</Private>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\OpenSim.Framework.Console\OpenSim.Framework.Console.csproj">
<Name>OpenSim.Framework.Console</Name>
<Project>{A7CD0630-0000-0000-0000-000000000000}</Project>
<Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
<Private>False</Private>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\XmlRpcCS\XMLRPC.csproj">
<Name>XMLRPC</Name>
<Project>{8E81D43C-0000-0000-0000-000000000000}</Project>
<Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
<Private>False</Private>
<Private>False</Private>
</ProjectReference>
</ItemGroup>
<ItemGroup>
@ -101,15 +108,6 @@
<Compile Include="IRestHandler.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="LocalUserProfileManager.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="LoginResponse.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="LoginServer.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="UDPServerBase.cs">
<SubType>Code</SubType>
</Compile>

View File

@ -8,7 +8,6 @@ using OpenSim.Framework.Types;
using OpenSim.Framework.Console;
using OpenSim.Assets;
using libsecondlife;
using OpenSim.UserServer;
using OpenSim.Servers;
using OpenSim.Framework;
using OpenSim.Caches;
@ -32,10 +31,10 @@ namespace SimpleApp
string simAddr = "127.0.0.1";
int simPort = 9000;
/*
LoginServer loginServer = new LoginServer( simAddr, simPort, 0, 0, false );
loginServer.Startup();
loginServer.SetSessionHandler( AddNewSessionHandler );
loginServer.SetSessionHandler( AddNewSessionHandler );*/
m_circuitManager = new AuthenticateSessionsBase();
@ -64,7 +63,7 @@ namespace SimpleApp
// world.PhysicsScene = physicsScene;
// udpServer.LocalWorld = world;
httpServer.AddXmlRPCHandler( "login_to_simulator", loginServer.XmlRpcLoginMethod );
// httpServer.AddXmlRPCHandler( "login_to_simulator", loginServer.XmlRpcLoginMethod );
httpServer.Start();
m_log.WriteLine( LogPriority.NORMAL, "Press enter to quit.");

View File

@ -17,7 +17,6 @@ namespace OpenSim.Region
public class Caps
{
private string httpListenerAddress;
private uint httpListenPort;
private string capsObjectPath = "00001-";

View File

@ -99,7 +99,7 @@ namespace OpenSim.Region.Scenes
m_regionInfo = reginfo;
m_regionHandle = reginfo.RegionHandle;
OpenSim.Framework.Console.MainLog.Instance.Verbose( "Avatar.cs - Loading details from grid (DUMMY)");
OpenSim.Framework.Console.MainLog.Instance.Verbose("Avatar.cs ");
ControllingClient = theClient;
this.firstname = ControllingClient.FirstName;
this.lastname = ControllingClient.LastName;
@ -217,7 +217,6 @@ namespace OpenSim.Region.Scenes
/// <param name="pack"></param>
public void HandleAgentUpdate(IClientAPI remoteClient, uint flags, LLQuaternion bodyRotation)
{
if ((flags & (uint)MainAvatar.ControlFlags.AGENT_CONTROL_AT_POS) != 0)
{
Axiom.MathLib.Quaternion q = new Axiom.MathLib.Quaternion(bodyRotation.W, bodyRotation.X, bodyRotation.Y, bodyRotation.Z);

View File

@ -41,7 +41,6 @@ using OpenSim.Terrain;
using OpenSim.Framework.Interfaces;
using OpenSim.Framework.Types;
using OpenSim.Framework;
using OpenSim.UserServer;
using OpenSim.Assets;
using OpenSim.Caches;
using OpenSim.Framework.Console;

View File

@ -40,7 +40,6 @@ using libsecondlife.Packets;
using OpenSim.Terrain;
using OpenSim.Framework.Interfaces;
using OpenSim.Framework.Types;
using OpenSim.UserServer;
using OpenSim.Assets;
using OpenSim.Caches;
using OpenSim.Framework.Console;

View File

@ -28,7 +28,6 @@
using System;
using System.Collections.Generic;
using System.Text;
using OpenSim.UserServer;
using OpenSim.Framework.Console;
namespace OpenSim

View File

@ -44,7 +44,6 @@ using OpenSim.Terrain;
using OpenSim.Framework.Interfaces;
using OpenSim.Framework.Types;
using OpenSim.Framework;
using OpenSim.UserServer;
using OpenSim.Assets;
using OpenSim.Caches;
using OpenSim.Framework.Console;
@ -129,21 +128,11 @@ namespace OpenSim
m_log.Verbose( "Main.cs:Startup() - Initialising HTTP server");
//Login server setup
LoginServer loginServer = null;
LoginServer adminLoginServer = null;
if (m_sandbox)
{
httpServer.AddXmlRPCHandler("login_to_simulator", sandboxCommunications.UserServices.XmlRpcLoginMethod);
/*
loginServer = new LoginServer(regionData[0].IPListenAddr, regionData[0].IPListenPort, regionData[0].RegionLocX, regionData[0].RegionLocY, false);
loginServer.Startup();
loginServer.SetSessionHandler(sandboxCommunications.SandBoxServices.AddNewSession);
//sandbox mode with loginserver not using accounts
httpServer.AddXmlRPCHandler("login_to_simulator", loginServer.XmlRpcLoginMethod);
*/
}
//Start http server

View File

@ -530,6 +530,7 @@
<Reference name="System"/>
<Reference name="System.Xml"/>
<Reference name="System.Data"/>
<Reference name="System.Runtime.Remoting"/>
<Reference name="OpenSim.Framework"/>
<Reference name="OpenSim.Framework.Console"/>
<Reference name="OpenSim.Servers"/>