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>
/// <param name="regionInfo"></param>
/// <returns></returns>
internal virtual RegionCommsHostBase RegisterRegion(RegionInfo regionInfo)
public virtual RegionCommsHostBase RegisterRegion(RegionInfo regionInfo)
{
return null;
}

View File

@ -11,19 +11,21 @@ namespace OpenGrid.Framework.Communications.GridServer
{
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)
{
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;
}

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>{683344D5-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</AssemblyName>
@ -15,9 +16,11 @@
<DefaultTargetSchema>IE50</DefaultTargetSchema>
<DelaySign>false</DelaySign>
<OutputType>Library</OutputType>
<AppDesignerFolder></AppDesignerFolder>
<AppDesignerFolder>
</AppDesignerFolder>
<RootNamespace>OpenGrid.Framework.Communications</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,20 @@
<RemoveIntegerChecks>False</RemoveIntegerChecks>
<TreatWarningsAsErrors>False</TreatWarningsAsErrors>
<WarningLevel>4</WarningLevel>
<NoWarn></NoWarn>
<NoWarn>
</NoWarn>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" >
<Reference Include="System">
<HintPath>System.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="System.Xml" >
<Reference Include="System.Data" />
<Reference Include="System.Xml">
<HintPath>System.Xml.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="libsecondlife.dll" >
<Reference Include="libsecondlife.dll">
<HintPath>..\..\bin\libsecondlife.dll</HintPath>
<Private>False</Private>
</Reference>
@ -101,6 +109,7 @@
<Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="SandBoxManager.cs" />
<Compile Include="UserServer\UserCommsManagerBase.cs">
<SubType>Code</SubType>
</Compile>

View File

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

View File

@ -11,117 +11,22 @@ namespace OpenGrid.Framework.Communications
{
public class RegionServerCommsLocal : RegionServerCommsManager
{
protected Dictionary<ulong, RegionInfo> regions = new Dictionary<ulong, RegionInfo>();
protected Dictionary<ulong, RegionCommsHostBase> regionHosts = new Dictionary<ulong, RegionCommsHostBase>();
public SandBoxManager SandManager = new SandBoxManager();
public RegionServerCommsLocal()
{
userServer = new UserServer.UserCommsManagerLocal(); //Local User Server
gridServer = new GridServer.GridCommsManagerLocal(); //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;
gridServer = new GridServer.GridCommsManagerLocal(SandManager); //Locl Grid Server
}
/// <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 override 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;
return SandManager.InformNeighbourOfChildAgent(regionHandle, agentData);
}
}
}

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
{
return false;

View File

@ -14,27 +14,9 @@ namespace OpenGrid.Framework.Communications
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>
/// 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>

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)
{
this.primData.Texture = tex;
//this.dirtyFlag = true;
}
/// <summary>
@ -387,8 +386,6 @@ namespace OpenSim.Region
lPos = this.Pos;
lRot = this.rotation;
}
}
/// <summary>

View File

@ -544,7 +544,7 @@ namespace OpenSim.Region
protected void InformClientOfNeighbours(IClientAPI remoteClient)
{
// 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");
if (neighbours != null)
@ -617,7 +617,7 @@ namespace OpenSim.Region
/// </summary>
public void RegisterRegionWithComms()
{
this.regionCommsHost = this.commsManager.RegisterRegion(this.m_regInfo);
this.regionCommsHost = this.commsManager.gridServer.RegisterRegion(this.m_regInfo);
if (this.regionCommsHost != null)
{
this.regionCommsHost.OnExpectUser += new ExpectUserDelegate(this.NewUserConnection);

View File

@ -12,8 +12,6 @@
</resources>
<sources failonempty="true">
<include name="AgentAssetUpload.cs" />
<include name="AuthenticateSessionsLocal.cs" />
<include name="AuthenticateSessionsRemote.cs" />
<include name="ClientView.API.cs" />
<include name="ClientView.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.Startup();
//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
httpServer.AddXmlRPCHandler("login_to_simulator", loginServer.XmlRpcLoginMethod);
}