Added SandBoxManager which in sandbox mode, acts as the backend server for the CommsManager interfaces (commsManager.gridServer etc).

Sugilite
MW 2007-06-10 18:51:45 +00:00
parent 44e5ff33df
commit 453fadd940
13 changed files with 163 additions and 154 deletions

View File

@ -16,7 +16,7 @@ namespace OpenGrid.Framework.Communications.GridServer
/// </summary> /// </summary>
/// <param name="regionInfo"></param> /// <param name="regionInfo"></param>
/// <returns></returns> /// <returns></returns>
internal virtual RegionCommsHostBase RegisterRegion(RegionInfo regionInfo) public virtual RegionCommsHostBase RegisterRegion(RegionInfo regionInfo)
{ {
return null; return null;
} }

View File

@ -11,19 +11,21 @@ namespace OpenGrid.Framework.Communications.GridServer
{ {
public class GridCommsManagerLocal : GridCommsManagerBase public class GridCommsManagerLocal : GridCommsManagerBase
{ {
public GridCommsManagerLocal() private SandBoxManager sandBoxManager;
{
public GridCommsManagerLocal(SandBoxManager sandManager)
{
sandBoxManager = sandManager;
} }
internal override RegionCommsHostBase RegisterRegion(RegionInfo regionInfo) public override RegionCommsHostBase RegisterRegion(RegionInfo regionInfo)
{ {
return null; return sandBoxManager.RegisterRegion(regionInfo);
} }
public override List<RegionInfo> RequestNeighbours(RegionInfo regionInfo) public override List<RegionInfo> RequestNeighbours(RegionInfo regionInfo)
{ {
return null; return sandBoxManager.RequestNeighbours(regionInfo);
} }
} }
} }

View File

@ -13,7 +13,7 @@ namespace OpenGrid.Framework.Communications.GridServer
{ {
} }
internal override RegionCommsHostBase RegisterRegion(RegionInfo regionInfo) public override RegionCommsHostBase RegisterRegion(RegionInfo regionInfo)
{ {
return null; return null;
} }

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> <PropertyGroup>
<ProjectType>Local</ProjectType> <ProjectType>Local</ProjectType>
<ProductVersion>8.0.50727</ProductVersion> <ProductVersion>8.0.50727</ProductVersion>
@ -6,7 +6,8 @@
<ProjectGuid>{683344D5-0000-0000-0000-000000000000}</ProjectGuid> <ProjectGuid>{683344D5-0000-0000-0000-000000000000}</ProjectGuid>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ApplicationIcon></ApplicationIcon> <ApplicationIcon>
</ApplicationIcon>
<AssemblyKeyContainerName> <AssemblyKeyContainerName>
</AssemblyKeyContainerName> </AssemblyKeyContainerName>
<AssemblyName>OpenGrid.Framework.Communications</AssemblyName> <AssemblyName>OpenGrid.Framework.Communications</AssemblyName>
@ -15,9 +16,11 @@
<DefaultTargetSchema>IE50</DefaultTargetSchema> <DefaultTargetSchema>IE50</DefaultTargetSchema>
<DelaySign>false</DelaySign> <DelaySign>false</DelaySign>
<OutputType>Library</OutputType> <OutputType>Library</OutputType>
<AppDesignerFolder></AppDesignerFolder> <AppDesignerFolder>
</AppDesignerFolder>
<RootNamespace>OpenGrid.Framework.Communications</RootNamespace> <RootNamespace>OpenGrid.Framework.Communications</RootNamespace>
<StartupObject></StartupObject> <StartupObject>
</StartupObject>
<FileUpgradeFlags> <FileUpgradeFlags>
</FileUpgradeFlags> </FileUpgradeFlags>
</PropertyGroup> </PropertyGroup>
@ -28,7 +31,8 @@
<ConfigurationOverrideFile> <ConfigurationOverrideFile>
</ConfigurationOverrideFile> </ConfigurationOverrideFile>
<DefineConstants>TRACE;DEBUG</DefineConstants> <DefineConstants>TRACE;DEBUG</DefineConstants>
<DocumentationFile></DocumentationFile> <DocumentationFile>
</DocumentationFile>
<DebugSymbols>True</DebugSymbols> <DebugSymbols>True</DebugSymbols>
<FileAlignment>4096</FileAlignment> <FileAlignment>4096</FileAlignment>
<Optimize>False</Optimize> <Optimize>False</Optimize>
@ -37,7 +41,8 @@
<RemoveIntegerChecks>False</RemoveIntegerChecks> <RemoveIntegerChecks>False</RemoveIntegerChecks>
<TreatWarningsAsErrors>False</TreatWarningsAsErrors> <TreatWarningsAsErrors>False</TreatWarningsAsErrors>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<NoWarn></NoWarn> <NoWarn>
</NoWarn>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<AllowUnsafeBlocks>False</AllowUnsafeBlocks> <AllowUnsafeBlocks>False</AllowUnsafeBlocks>
@ -46,7 +51,8 @@
<ConfigurationOverrideFile> <ConfigurationOverrideFile>
</ConfigurationOverrideFile> </ConfigurationOverrideFile>
<DefineConstants>TRACE</DefineConstants> <DefineConstants>TRACE</DefineConstants>
<DocumentationFile></DocumentationFile> <DocumentationFile>
</DocumentationFile>
<DebugSymbols>False</DebugSymbols> <DebugSymbols>False</DebugSymbols>
<FileAlignment>4096</FileAlignment> <FileAlignment>4096</FileAlignment>
<Optimize>True</Optimize> <Optimize>True</Optimize>
@ -55,18 +61,20 @@
<RemoveIntegerChecks>False</RemoveIntegerChecks> <RemoveIntegerChecks>False</RemoveIntegerChecks>
<TreatWarningsAsErrors>False</TreatWarningsAsErrors> <TreatWarningsAsErrors>False</TreatWarningsAsErrors>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<NoWarn></NoWarn> <NoWarn>
</NoWarn>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="System" > <Reference Include="System">
<HintPath>System.dll</HintPath> <HintPath>System.dll</HintPath>
<Private>False</Private> <Private>False</Private>
</Reference> </Reference>
<Reference Include="System.Xml" > <Reference Include="System.Data" />
<Reference Include="System.Xml">
<HintPath>System.Xml.dll</HintPath> <HintPath>System.Xml.dll</HintPath>
<Private>False</Private> <Private>False</Private>
</Reference> </Reference>
<Reference Include="libsecondlife.dll" > <Reference Include="libsecondlife.dll">
<HintPath>..\..\bin\libsecondlife.dll</HintPath> <HintPath>..\..\bin\libsecondlife.dll</HintPath>
<Private>False</Private> <Private>False</Private>
</Reference> </Reference>
@ -76,7 +84,7 @@
<Name>OpenSim.Framework</Name> <Name>OpenSim.Framework</Name>
<Project>{8ACA2445-0000-0000-0000-000000000000}</Project> <Project>{8ACA2445-0000-0000-0000-000000000000}</Project>
<Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
<Private>False</Private> <Private>False</Private>
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -101,6 +109,7 @@
<Compile Include="Properties\AssemblyInfo.cs"> <Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Compile Include="SandBoxManager.cs" />
<Compile Include="UserServer\UserCommsManagerBase.cs"> <Compile Include="UserServer\UserCommsManagerBase.cs">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>

View File

@ -14,6 +14,7 @@
<include name="RegionServerCommsLocal.cs" /> <include name="RegionServerCommsLocal.cs" />
<include name="RegionServerCommsManager.cs" /> <include name="RegionServerCommsManager.cs" />
<include name="RegionServerCommsOGS.cs" /> <include name="RegionServerCommsOGS.cs" />
<include name="SandBoxManager.cs" />
<include name="GridServer/GridCommsManagerBase.cs" /> <include name="GridServer/GridCommsManagerBase.cs" />
<include name="GridServer/GridCommsManagerLocal.cs" /> <include name="GridServer/GridCommsManagerLocal.cs" />
<include name="GridServer/GridCommsManagerOGS.cs" /> <include name="GridServer/GridCommsManagerOGS.cs" />

View File

@ -11,117 +11,22 @@ namespace OpenGrid.Framework.Communications
{ {
public class RegionServerCommsLocal : RegionServerCommsManager public class RegionServerCommsLocal : RegionServerCommsManager
{ {
protected Dictionary<ulong, RegionInfo> regions = new Dictionary<ulong, RegionInfo>(); public SandBoxManager SandManager = new SandBoxManager();
protected Dictionary<ulong, RegionCommsHostBase> regionHosts = new Dictionary<ulong, RegionCommsHostBase>();
public RegionServerCommsLocal() public RegionServerCommsLocal()
{ {
userServer = new UserServer.UserCommsManagerLocal(); //Local User Server userServer = new UserServer.UserCommsManagerLocal(); //Local User Server
gridServer = new GridServer.GridCommsManagerLocal(); //Locl Grid Server gridServer = new GridServer.GridCommsManagerLocal(SandManager); //Locl Grid Server
}
/// <summary>
/// Main Register a region method with the CommsManager.
/// Should do anything that is needed and also call the RegisterRegion method in the gridserver class
/// to inform the grid server (in grid mode).
/// </summary>
/// <param name="regionInfo"></param>
/// <returns></returns>
public override RegionCommsHostBase RegisterRegion(RegionInfo regionInfo)
{
//Console.WriteLine("CommsManager - Region " + regionInfo.RegionHandle + " , " + regionInfo.RegionLocX + " , "+ regionInfo.RegionLocY +" is registering");
if (!this.regions.ContainsKey((uint)regionInfo.RegionHandle))
{
//Console.WriteLine("CommsManager - Adding Region " + regionInfo.RegionHandle );
this.regions.Add(regionInfo.RegionHandle, regionInfo);
RegionCommsHostBase regionHost = new RegionCommsHostBase();
this.regionHosts.Add(regionInfo.RegionHandle, regionHost);
return regionHost;
}
//already in our list of regions so for now lets return null
return null;
}
/// <summary>
/// In the current class structure this shouldn't be here as it should only be in the gridserver class
/// but having it there in sandbox mode makes things very difficult, so for now until something is sorted out
/// it will have to be here as well
/// </summary>
/// <param name="regionInfo"></param>
/// <returns></returns>
public override List<RegionInfo> RequestNeighbours(RegionInfo regionInfo)
{
// Console.WriteLine("Finding Neighbours to " + regionInfo.RegionHandle);
List<RegionInfo> neighbours = new List<RegionInfo>();
foreach (RegionInfo reg in this.regions.Values)
{
// Console.WriteLine("CommsManager- RequestNeighbours() checking region " + reg.RegionLocX + " , "+ reg.RegionLocY);
if (reg.RegionHandle != regionInfo.RegionHandle)
{
//Console.WriteLine("CommsManager- RequestNeighbours() - found a different region in list, checking location");
if ((reg.RegionLocX > (regionInfo.RegionLocX - 2)) && (reg.RegionLocX < (regionInfo.RegionLocX + 2)))
{
if ((reg.RegionLocY > (regionInfo.RegionLocY - 2)) && (reg.RegionLocY < (regionInfo.RegionLocY + 2)))
{
neighbours.Add(reg);
}
}
}
}
return neighbours;
} }
/// <summary> /// <summary>
/// informs a neighbouring sim to expect a child agent /// informs a neighbouring sim to expect a child agent
/// I guess if we are going to stick with the current class structure then we need a intersim class
/// but think we need to really rethink the class structure as currently it makes things very messy for sandbox mode
/// </summary> /// </summary>
/// <param name="regionHandle"></param> /// <param name="regionHandle"></param>
/// <param name="agentData"></param> /// <param name="agentData"></param>
/// <returns></returns> /// <returns></returns>
public override bool InformNeighbourOfChildAgent(ulong regionHandle, AgentCircuitData agentData) //should change from agentCircuitData public override bool InformNeighbourOfChildAgent(ulong regionHandle, AgentCircuitData agentData) //should change from agentCircuitData
{ {
//Console.WriteLine("CommsManager- Trying to Inform a region to expect child agent"); return SandManager.InformNeighbourOfChildAgent(regionHandle, agentData);
if (this.regionHosts.ContainsKey(regionHandle))
{
// Console.WriteLine("CommsManager- Informing a region to expect child agent");
this.regionHosts[regionHandle].TriggerExpectUser(regionHandle, agentData);
return true;
}
return false;
}
/// <summary>
/// Is a Sandbox mode method, used by the local Login server to inform a region of a connection user/session
/// </summary>
/// <param name="regionHandle"></param>
/// <param name="loginData"></param>
/// <returns></returns>
public bool AddNewSession(ulong regionHandle, Login loginData)
{
//Console.WriteLine(" comms manager been told to expect new user");
AgentCircuitData agent = new AgentCircuitData();
agent.AgentID = loginData.Agent;
agent.firstname = loginData.First;
agent.lastname = loginData.Last;
agent.SessionID = loginData.Session;
agent.SecureSessionID = loginData.SecureSession;
agent.circuitcode = loginData.CircuitCode;
agent.BaseFolder = loginData.BaseFolder;
agent.InventoryFolder = loginData.InventoryFolder;
agent.startpos = new LLVector3(128, 128, 70);
if (this.regionHosts.ContainsKey(regionHandle))
{
this.regionHosts[regionHandle].TriggerExpectUser(regionHandle, agent);
return true;
}
// region not found
return false;
} }
} }
} }

View File

@ -20,16 +20,6 @@ namespace OpenGrid.Framework.Communications
} }
public virtual RegionCommsHostBase RegisterRegion(RegionInfo regionInfo)
{
return null;
}
public virtual List<RegionInfo> RequestNeighbours(RegionInfo regionInfo)
{
return null;
}
public virtual bool InformNeighbourOfChildAgent(ulong regionHandle, AgentCircuitData agentData) //should change from agentCircuitData public virtual bool InformNeighbourOfChildAgent(ulong regionHandle, AgentCircuitData agentData) //should change from agentCircuitData
{ {
return false; return false;

View File

@ -14,27 +14,9 @@ namespace OpenGrid.Framework.Communications
gridServer = new GridServer.GridCommsManagerOGS(); //Remote Grid Server gridServer = new GridServer.GridCommsManagerOGS(); //Remote Grid Server
} }
public override RegionCommsHostBase RegisterRegion(RegionInfo regionInfo)
{
return gridServer.RegisterRegion(regionInfo);
}
/// <summary>
/// In the current class structure this shouldn't be here as it should only be in the gridserver class
/// but having it there in sandbox mode makes things very difficult, so for now until something is sorted out
/// it will have to be here as well
/// </summary>
/// <param name="regionInfo"></param>
/// <returns></returns>
public override List<RegionInfo> RequestNeighbours(RegionInfo regionInfo)
{
return gridServer.RequestNeighbours(regionInfo);
}
/// <summary> /// <summary>
/// informs a neighbouring sim to expect a child agent /// informs a neighbouring sim to expect a child agent
/// I guess if we are going to stick with the current class structure then we need a intersim class
/// but think we need to really rethink the class structure as currently it makes things very messy for sandbox mode
/// </summary> /// </summary>
/// <param name="regionHandle"></param> /// <param name="regionHandle"></param>
/// <param name="agentData"></param> /// <param name="agentData"></param>

View File

@ -0,0 +1,125 @@
using System;
using System.Collections.Generic;
using System.Text;
using OpenSim.Framework;
using OpenSim.Framework.Types;
using libsecondlife;
namespace OpenGrid.Framework.Communications
{
public class SandBoxManager
{
protected Dictionary<ulong, RegionInfo> regions = new Dictionary<ulong, RegionInfo>();
protected Dictionary<ulong, RegionCommsHostBase> regionHosts = new Dictionary<ulong, RegionCommsHostBase>();
public SandBoxManager()
{
}
/// <summary>
/// Main Register a region method with the CommsManager.
/// Should do anything that is needed and also call the RegisterRegion method in the gridserver class
/// to inform the grid server (in grid mode).
/// </summary>
/// <param name="regionInfo"></param>
/// <returns></returns>
public RegionCommsHostBase RegisterRegion(RegionInfo regionInfo)
{
//Console.WriteLine("CommsManager - Region " + regionInfo.RegionHandle + " , " + regionInfo.RegionLocX + " , "+ regionInfo.RegionLocY +" is registering");
if (!this.regions.ContainsKey((uint)regionInfo.RegionHandle))
{
//Console.WriteLine("CommsManager - Adding Region " + regionInfo.RegionHandle );
this.regions.Add(regionInfo.RegionHandle, regionInfo);
RegionCommsHostBase regionHost = new RegionCommsHostBase();
this.regionHosts.Add(regionInfo.RegionHandle, regionHost);
return regionHost;
}
//already in our list of regions so for now lets return null
return null;
}
/// <summary>
/// In the current class structure this shouldn't be here as it should only be in the gridserver class
/// but having it there in sandbox mode makes things very difficult, so for now until something is sorted out
/// it will have to be here as well
/// </summary>
/// <param name="regionInfo"></param>
/// <returns></returns>
public List<RegionInfo> RequestNeighbours(RegionInfo regionInfo)
{
// Console.WriteLine("Finding Neighbours to " + regionInfo.RegionHandle);
List<RegionInfo> neighbours = new List<RegionInfo>();
foreach (RegionInfo reg in this.regions.Values)
{
// Console.WriteLine("CommsManager- RequestNeighbours() checking region " + reg.RegionLocX + " , "+ reg.RegionLocY);
if (reg.RegionHandle != regionInfo.RegionHandle)
{
//Console.WriteLine("CommsManager- RequestNeighbours() - found a different region in list, checking location");
if ((reg.RegionLocX > (regionInfo.RegionLocX - 2)) && (reg.RegionLocX < (regionInfo.RegionLocX + 2)))
{
if ((reg.RegionLocY > (regionInfo.RegionLocY - 2)) && (reg.RegionLocY < (regionInfo.RegionLocY + 2)))
{
neighbours.Add(reg);
}
}
}
}
return neighbours;
}
/// <summary>
/// informs a neighbouring sim to expect a child agent
/// I guess if we are going to stick with the current class structure then we need a intersim class
/// but think we need to really rethink the class structure as currently it makes things very messy for sandbox mode
/// </summary>
/// <param name="regionHandle"></param>
/// <param name="agentData"></param>
/// <returns></returns>
public bool InformNeighbourOfChildAgent(ulong regionHandle, AgentCircuitData agentData) //should change from agentCircuitData
{
//Console.WriteLine("CommsManager- Trying to Inform a region to expect child agent");
if (this.regionHosts.ContainsKey(regionHandle))
{
// Console.WriteLine("CommsManager- Informing a region to expect child agent");
this.regionHosts[regionHandle].TriggerExpectUser(regionHandle, agentData);
return true;
}
return false;
}
/// <summary>
/// Is a Sandbox mode method, used by the local Login server to inform a region of a connection user/session
/// </summary>
/// <param name="regionHandle"></param>
/// <param name="loginData"></param>
/// <returns></returns>
public bool AddNewSession(ulong regionHandle, Login loginData)
{
//Console.WriteLine(" comms manager been told to expect new user");
AgentCircuitData agent = new AgentCircuitData();
agent.AgentID = loginData.Agent;
agent.firstname = loginData.First;
agent.lastname = loginData.Last;
agent.SessionID = loginData.Session;
agent.SecureSessionID = loginData.SecureSession;
agent.circuitcode = loginData.CircuitCode;
agent.BaseFolder = loginData.BaseFolder;
agent.InventoryFolder = loginData.InventoryFolder;
agent.startpos = new LLVector3(128, 128, 70);
if (this.regionHosts.ContainsKey(regionHandle))
{
this.regionHosts[regionHandle].TriggerExpectUser(regionHandle, agent);
return true;
}
// region not found
return false;
}
}
}

View File

@ -224,7 +224,6 @@ namespace OpenSim.Region
public void UpdateTexture(byte[] tex) public void UpdateTexture(byte[] tex)
{ {
this.primData.Texture = tex; this.primData.Texture = tex;
//this.dirtyFlag = true;
} }
/// <summary> /// <summary>
@ -387,8 +386,6 @@ namespace OpenSim.Region
lPos = this.Pos; lPos = this.Pos;
lRot = this.rotation; lRot = this.rotation;
} }
} }
/// <summary> /// <summary>

View File

@ -544,7 +544,7 @@ namespace OpenSim.Region
protected void InformClientOfNeighbours(IClientAPI remoteClient) protected void InformClientOfNeighbours(IClientAPI remoteClient)
{ {
// Console.WriteLine("informing client of neighbouring regions"); // Console.WriteLine("informing client of neighbouring regions");
List<RegionInfo> neighbours = this.commsManager.RequestNeighbours(this.m_regInfo); List<RegionInfo> neighbours = this.commsManager.gridServer.RequestNeighbours(this.m_regInfo);
//Console.WriteLine("we have " + neighbours.Count + " neighbouring regions"); //Console.WriteLine("we have " + neighbours.Count + " neighbouring regions");
if (neighbours != null) if (neighbours != null)
@ -617,7 +617,7 @@ namespace OpenSim.Region
/// </summary> /// </summary>
public void RegisterRegionWithComms() public void RegisterRegionWithComms()
{ {
this.regionCommsHost = this.commsManager.RegisterRegion(this.m_regInfo); this.regionCommsHost = this.commsManager.gridServer.RegisterRegion(this.m_regInfo);
if (this.regionCommsHost != null) if (this.regionCommsHost != null)
{ {
this.regionCommsHost.OnExpectUser += new ExpectUserDelegate(this.NewUserConnection); this.regionCommsHost.OnExpectUser += new ExpectUserDelegate(this.NewUserConnection);

View File

@ -12,8 +12,6 @@
</resources> </resources>
<sources failonempty="true"> <sources failonempty="true">
<include name="AgentAssetUpload.cs" /> <include name="AgentAssetUpload.cs" />
<include name="AuthenticateSessionsLocal.cs" />
<include name="AuthenticateSessionsRemote.cs" />
<include name="ClientView.API.cs" /> <include name="ClientView.API.cs" />
<include name="ClientView.cs" /> <include name="ClientView.cs" />
<include name="ClientView.Grid.cs" /> <include name="ClientView.Grid.cs" />

View File

@ -131,7 +131,7 @@ namespace OpenSim
loginServer = new LoginServer(regionData[0].IPListenAddr, regionData[0].IPListenPort, regionData[0].RegionLocX, regionData[0].RegionLocY, false); loginServer = new LoginServer(regionData[0].IPListenAddr, regionData[0].IPListenPort, regionData[0].RegionLocX, regionData[0].RegionLocY, false);
loginServer.Startup(); loginServer.Startup();
//loginServer.SetSessionHandler(((AuthenticateSessionsLocal)this.AuthenticateSessionsHandler[0]).AddNewSession); //loginServer.SetSessionHandler(((AuthenticateSessionsLocal)this.AuthenticateSessionsHandler[0]).AddNewSession);
loginServer.SetSessionHandler(((RegionServerCommsLocal)this.commsManager).AddNewSession); loginServer.SetSessionHandler(((RegionServerCommsLocal)this.commsManager).SandManager.AddNewSession);
//sandbox mode with loginserver not using accounts //sandbox mode with loginserver not using accounts
httpServer.AddXmlRPCHandler("login_to_simulator", loginServer.XmlRpcLoginMethod); httpServer.AddXmlRPCHandler("login_to_simulator", loginServer.XmlRpcLoginMethod);
} }