First pass at the grid service.
parent
df7904c58b
commit
e736273815
|
@ -45,7 +45,7 @@ namespace OpenSim.Data
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// An interface for connecting to the authentication datastore
|
/// An interface for connecting to the authentication datastore
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public interface IRegionData
|
public interface IRegionData
|
||||||
{
|
{
|
||||||
RegionData Get(UUID regionID, UUID ScopeID);
|
RegionData Get(UUID regionID, UUID ScopeID);
|
||||||
List<RegionData> Get(string regionName, UUID ScopeID);
|
List<RegionData> Get(string regionName, UUID ScopeID);
|
||||||
|
@ -57,5 +57,6 @@ namespace OpenSim.Data
|
||||||
bool SetDataItem(UUID principalID, string item, string value);
|
bool SetDataItem(UUID principalID, string item, string value);
|
||||||
|
|
||||||
bool Delete(UUID regionID);
|
bool Delete(UUID regionID);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,79 +0,0 @@
|
||||||
/*
|
|
||||||
* 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 OpenSimulator 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.Collections.Generic;
|
|
||||||
using OpenMetaverse;
|
|
||||||
using OpenSim.Services.Interfaces;
|
|
||||||
|
|
||||||
namespace OpenSim.Services.Interfaces
|
|
||||||
{
|
|
||||||
public class GridService : IGridService
|
|
||||||
{
|
|
||||||
bool RegisterRegion(UUID scopeID, RegionInfo regionInfos);
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DeregisterRegion(UUID regionID);
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<SimpleRegionInfo> RequestNeighbours(UUID scopeID, uint x, uint y)
|
|
||||||
{
|
|
||||||
return new List<SimpleRegionInfo>()
|
|
||||||
}
|
|
||||||
|
|
||||||
RegionInfo RequestNeighbourInfo(UUID regionID)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
RegionInfo RequestClosestRegion(UUID scopeID, string regionName)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<MapBlockData> RequestNeighbourMapBlocks(UUID scopeID, int minX,
|
|
||||||
int minY, int maxX, int maxY)
|
|
||||||
{
|
|
||||||
return new List<MapBlockData>();
|
|
||||||
}
|
|
||||||
|
|
||||||
LandData RequestLandData(UUID scopeID, ulong regionHandle,
|
|
||||||
uint x, uint y)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<RegionInfo> RequestNamedRegions(UUID scopeID, string name,
|
|
||||||
int maxNumber)
|
|
||||||
{
|
|
||||||
return new List<RegionInfo>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,297 @@
|
||||||
|
/*
|
||||||
|
* 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 OpenSimulator 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.Collections.Generic;
|
||||||
|
using System.Net;
|
||||||
|
using System.Reflection;
|
||||||
|
using Nini.Config;
|
||||||
|
using log4net;
|
||||||
|
using OpenSim.Framework;
|
||||||
|
using OpenSim.Framework.Console;
|
||||||
|
using OpenSim.Data;
|
||||||
|
using OpenSim.Services.Interfaces;
|
||||||
|
using OpenMetaverse;
|
||||||
|
|
||||||
|
namespace OpenSim.Services.GridService
|
||||||
|
{
|
||||||
|
public class GridService : GridServiceBase, IGridService
|
||||||
|
{
|
||||||
|
private static readonly ILog m_log =
|
||||||
|
LogManager.GetLogger(
|
||||||
|
MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
|
public GridService(IConfigSource config)
|
||||||
|
: base(config)
|
||||||
|
{
|
||||||
|
MainConsole.Instance.Commands.AddCommand("kfs", false,
|
||||||
|
"show digest",
|
||||||
|
"show digest <ID>",
|
||||||
|
"Show asset digest", HandleShowDigest);
|
||||||
|
|
||||||
|
MainConsole.Instance.Commands.AddCommand("kfs", false,
|
||||||
|
"delete asset",
|
||||||
|
"delete asset <ID>",
|
||||||
|
"Delete asset from database", HandleDeleteAsset);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#region IGridService
|
||||||
|
|
||||||
|
public bool RegisterRegion(UUID scopeID, SimpleRegionInfo regionInfos)
|
||||||
|
{
|
||||||
|
if (m_Database.Get(regionInfos.RegionID, scopeID) != null)
|
||||||
|
{
|
||||||
|
m_log.WarnFormat("[GRID SERVICE]: Region {0} already registered in scope {1}.", regionInfos.RegionID, scopeID);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (m_Database.Get((int)regionInfos.RegionLocX, (int)regionInfos.RegionLocY, scopeID) != null)
|
||||||
|
{
|
||||||
|
m_log.WarnFormat("[GRID SERVICE]: Region {0} tried to register in coordinates {1}, {2} which are already in use in scope {3}.",
|
||||||
|
regionInfos.RegionID, regionInfos.RegionLocX, regionInfos.RegionLocY, scopeID);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Everything is ok, let's register
|
||||||
|
RegionData rdata = RegionInfo2RegionData(regionInfos);
|
||||||
|
rdata.ScopeID = scopeID;
|
||||||
|
m_Database.Store(rdata);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool DeregisterRegion(UUID regionID)
|
||||||
|
{
|
||||||
|
return m_Database.Delete(regionID);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<SimpleRegionInfo> GetNeighbours(UUID scopeID, int x, int y)
|
||||||
|
{
|
||||||
|
List<RegionData> rdatas = m_Database.Get(x - 1, y - 1, x + 1, y + 1, scopeID);
|
||||||
|
List<SimpleRegionInfo> rinfos = new List<SimpleRegionInfo>();
|
||||||
|
foreach (RegionData rdata in rdatas)
|
||||||
|
rinfos.Add(RegionData2RegionInfo(rdata));
|
||||||
|
|
||||||
|
return rinfos;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SimpleRegionInfo GetRegionByUUID(UUID scopeID, UUID regionID)
|
||||||
|
{
|
||||||
|
RegionData rdata = m_Database.Get(regionID, scopeID);
|
||||||
|
if (rdata != null)
|
||||||
|
return RegionData2RegionInfo(rdata);
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SimpleRegionInfo GetRegionByPosition(UUID scopeID, int x, int y)
|
||||||
|
{
|
||||||
|
RegionData rdata = m_Database.Get(x, y, scopeID);
|
||||||
|
if (rdata != null)
|
||||||
|
return RegionData2RegionInfo(rdata);
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SimpleRegionInfo GetRegionByName(UUID scopeID, string regionName)
|
||||||
|
{
|
||||||
|
List<RegionData> rdatas = m_Database.Get(regionName + "%", scopeID);
|
||||||
|
if ((rdatas != null) && (rdatas.Count > 0))
|
||||||
|
return RegionData2RegionInfo(rdatas[0]); // get the first
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<SimpleRegionInfo> GetRegionsByName(UUID scopeID, string name, int maxNumber)
|
||||||
|
{
|
||||||
|
List<RegionData> rdatas = m_Database.Get("%" + name + "%", scopeID);
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
List<SimpleRegionInfo> rinfos = new List<SimpleRegionInfo>();
|
||||||
|
|
||||||
|
if (rdatas != null)
|
||||||
|
{
|
||||||
|
foreach (RegionData rdata in rdatas)
|
||||||
|
{
|
||||||
|
if (count++ < maxNumber)
|
||||||
|
rinfos.Add(RegionData2RegionInfo(rdata));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return rinfos;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<SimpleRegionInfo> GetRegionRange(UUID scopeID, int xmin, int xmax, int ymin, int ymax)
|
||||||
|
{
|
||||||
|
List<RegionData> rdatas = m_Database.Get(xmin, ymin, xmax, ymax, scopeID);
|
||||||
|
List<SimpleRegionInfo> rinfos = new List<SimpleRegionInfo>();
|
||||||
|
foreach (RegionData rdata in rdatas)
|
||||||
|
rinfos.Add(RegionData2RegionInfo(rdata));
|
||||||
|
|
||||||
|
return rinfos;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Data structure conversions
|
||||||
|
|
||||||
|
protected RegionData RegionInfo2RegionData(SimpleRegionInfo rinfo)
|
||||||
|
{
|
||||||
|
RegionData rdata = new RegionData();
|
||||||
|
rdata.posX = (int)rinfo.RegionLocX;
|
||||||
|
rdata.posY = (int)rinfo.RegionLocY;
|
||||||
|
rdata.RegionID = rinfo.RegionID;
|
||||||
|
//rdata.RegionName = rinfo.RegionName;
|
||||||
|
rdata.Data["external_ip_address"] = rinfo.ExternalEndPoint.Address.ToString();
|
||||||
|
rdata.Data["external_port"] = rinfo.ExternalEndPoint.Port.ToString();
|
||||||
|
rdata.Data["external_host_name"] = rinfo.ExternalHostName;
|
||||||
|
rdata.Data["http_port"] = rinfo.HttpPort.ToString();
|
||||||
|
rdata.Data["internal_ip_address"] = rinfo.InternalEndPoint.Address.ToString();
|
||||||
|
rdata.Data["internal_port"] = rinfo.InternalEndPoint.Port.ToString();
|
||||||
|
rdata.Data["alternate_ports"] = rinfo.m_allow_alternate_ports.ToString();
|
||||||
|
rdata.Data["server_uri"] = rinfo.ServerURI;
|
||||||
|
|
||||||
|
return rdata;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected SimpleRegionInfo RegionData2RegionInfo(RegionData rdata)
|
||||||
|
{
|
||||||
|
SimpleRegionInfo rinfo = new SimpleRegionInfo();
|
||||||
|
rinfo.RegionLocX = (uint)rdata.posX;
|
||||||
|
rinfo.RegionLocY = (uint)rdata.posY;
|
||||||
|
rinfo.RegionID = rdata.RegionID;
|
||||||
|
//rinfo.RegionName = rdata.RegionName;
|
||||||
|
|
||||||
|
// Now for the variable data
|
||||||
|
if ((rdata.Data["external_ip_address"] != null) && (rdata.Data["external_port"] != null))
|
||||||
|
{
|
||||||
|
int port = 0;
|
||||||
|
Int32.TryParse((string)rdata.Data["external_port"], out port);
|
||||||
|
IPEndPoint ep = new IPEndPoint(IPAddress.Parse((string)rdata.Data["external_ip_address"]), port);
|
||||||
|
rinfo.ExternalEndPoint = ep;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
rinfo.ExternalEndPoint = new IPEndPoint(new IPAddress(0), 0);
|
||||||
|
|
||||||
|
if (rdata.Data["external_host_name"] != null)
|
||||||
|
rinfo.ExternalHostName = (string)rdata.Data["external_host_name"] ;
|
||||||
|
|
||||||
|
if (rdata.Data["http_port"] != null)
|
||||||
|
{
|
||||||
|
UInt32 port = 0;
|
||||||
|
UInt32.TryParse((string)rdata.Data["http_port"], out port);
|
||||||
|
rinfo.HttpPort = port;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((rdata.Data["internal_ip_address"] != null) && (rdata.Data["internal_port"] != null))
|
||||||
|
{
|
||||||
|
int port = 0;
|
||||||
|
Int32.TryParse((string)rdata.Data["internal_port"], out port);
|
||||||
|
IPEndPoint ep = new IPEndPoint(IPAddress.Parse((string)rdata.Data["internal_ip_address"]), port);
|
||||||
|
rinfo.InternalEndPoint = ep;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
rinfo.InternalEndPoint = new IPEndPoint(new IPAddress(0), 0);
|
||||||
|
|
||||||
|
if (rdata.Data["alternate_ports"] != null)
|
||||||
|
{
|
||||||
|
bool alts = false;
|
||||||
|
Boolean.TryParse((string)rdata.Data["alternate_ports"], out alts);
|
||||||
|
rinfo.m_allow_alternate_ports = alts;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rdata.Data["server_uri"] != null)
|
||||||
|
rinfo.ServerURI = (string)rdata.Data["server_uri"];
|
||||||
|
|
||||||
|
return rinfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
void HandleShowDigest(string module, string[] args)
|
||||||
|
{
|
||||||
|
//if (args.Length < 3)
|
||||||
|
//{
|
||||||
|
// MainConsole.Instance.Output("Syntax: show digest <ID>");
|
||||||
|
// return;
|
||||||
|
//}
|
||||||
|
|
||||||
|
//AssetBase asset = Get(args[2]);
|
||||||
|
|
||||||
|
//if (asset == null || asset.Data.Length == 0)
|
||||||
|
//{
|
||||||
|
// MainConsole.Instance.Output("Asset not found");
|
||||||
|
// return;
|
||||||
|
//}
|
||||||
|
|
||||||
|
//int i;
|
||||||
|
|
||||||
|
//MainConsole.Instance.Output(String.Format("Name: {0}", asset.Name));
|
||||||
|
//MainConsole.Instance.Output(String.Format("Description: {0}", asset.Description));
|
||||||
|
//MainConsole.Instance.Output(String.Format("Type: {0}", asset.Type));
|
||||||
|
//MainConsole.Instance.Output(String.Format("Content-type: {0}", asset.Metadata.ContentType));
|
||||||
|
|
||||||
|
//for (i = 0 ; i < 5 ; i++)
|
||||||
|
//{
|
||||||
|
// int off = i * 16;
|
||||||
|
// if (asset.Data.Length <= off)
|
||||||
|
// break;
|
||||||
|
// int len = 16;
|
||||||
|
// if (asset.Data.Length < off + len)
|
||||||
|
// len = asset.Data.Length - off;
|
||||||
|
|
||||||
|
// byte[] line = new byte[len];
|
||||||
|
// Array.Copy(asset.Data, off, line, 0, len);
|
||||||
|
|
||||||
|
// string text = BitConverter.ToString(line);
|
||||||
|
// MainConsole.Instance.Output(String.Format("{0:x4}: {1}", off, text));
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
|
||||||
|
void HandleDeleteAsset(string module, string[] args)
|
||||||
|
{
|
||||||
|
//if (args.Length < 3)
|
||||||
|
//{
|
||||||
|
// MainConsole.Instance.Output("Syntax: delete asset <ID>");
|
||||||
|
// return;
|
||||||
|
//}
|
||||||
|
|
||||||
|
//AssetBase asset = Get(args[2]);
|
||||||
|
|
||||||
|
//if (asset == null || asset.Data.Length == 0)
|
||||||
|
// MainConsole.Instance.Output("Asset not found");
|
||||||
|
// return;
|
||||||
|
//}
|
||||||
|
|
||||||
|
//Delete(args[2]);
|
||||||
|
|
||||||
|
////MainConsole.Instance.Output("Asset deleted");
|
||||||
|
//// TODO: Implement this
|
||||||
|
|
||||||
|
//MainConsole.Instance.Output("Asset deletion not supported by database");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,84 @@
|
||||||
|
/*
|
||||||
|
* 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 OpenSimulator 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.Reflection;
|
||||||
|
using Nini.Config;
|
||||||
|
using OpenSim.Framework;
|
||||||
|
using OpenSim.Data;
|
||||||
|
using OpenSim.Services.Interfaces;
|
||||||
|
using OpenSim.Services.Base;
|
||||||
|
|
||||||
|
namespace OpenSim.Services.GridService
|
||||||
|
{
|
||||||
|
public class GridServiceBase : ServiceBase
|
||||||
|
{
|
||||||
|
protected IRegionData m_Database = null;
|
||||||
|
|
||||||
|
public GridServiceBase(IConfigSource config)
|
||||||
|
: base(config)
|
||||||
|
{
|
||||||
|
string dllName = String.Empty;
|
||||||
|
string connString = String.Empty;
|
||||||
|
string realm = "regions";
|
||||||
|
|
||||||
|
//
|
||||||
|
// Try reading the [AssetService] section first, if it exists
|
||||||
|
//
|
||||||
|
IConfig gridConfig = config.Configs["GridService"];
|
||||||
|
if (gridConfig != null)
|
||||||
|
{
|
||||||
|
dllName = gridConfig.GetString("StorageProvider", dllName);
|
||||||
|
connString = gridConfig.GetString("ConnectionString", connString);
|
||||||
|
realm = gridConfig.GetString("Realm", realm);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Try reading the [DatabaseService] section, if it exists
|
||||||
|
//
|
||||||
|
IConfig dbConfig = config.Configs["DatabaseService"];
|
||||||
|
if (dbConfig != null)
|
||||||
|
{
|
||||||
|
if (dllName == String.Empty)
|
||||||
|
dllName = dbConfig.GetString("StorageProvider", String.Empty);
|
||||||
|
if (connString == String.Empty)
|
||||||
|
connString = dbConfig.GetString("ConnectionString", String.Empty);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// We tried, but this doesn't exist. We can't proceed.
|
||||||
|
//
|
||||||
|
if (dllName.Equals(String.Empty))
|
||||||
|
throw new Exception("No StorageProvider configured");
|
||||||
|
|
||||||
|
m_Database = LoadPlugin<IRegionData>(dllName, new Object[] { connString, realm });
|
||||||
|
if (m_Database == null)
|
||||||
|
throw new Exception("Could not find a storage interface in the given module");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -39,7 +39,7 @@ namespace OpenSim.Services.Interfaces
|
||||||
/// <param name="regionInfos"> </param>
|
/// <param name="regionInfos"> </param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
/// <exception cref="System.Exception">Thrown if region registration failed</exception>
|
/// <exception cref="System.Exception">Thrown if region registration failed</exception>
|
||||||
bool RegisterRegion(UUID scopeID, RegionInfo regionInfos);
|
bool RegisterRegion(UUID scopeID, SimpleRegionInfo regionInfos);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Deregister a region with the grid service.
|
/// Deregister a region with the grid service.
|
||||||
|
@ -50,15 +50,22 @@ namespace OpenSim.Services.Interfaces
|
||||||
bool DeregisterRegion(UUID regionID);
|
bool DeregisterRegion(UUID regionID);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get information about the regions neighbouring the given co-ordinates.
|
/// Get information about the regions neighbouring the given co-ordinates (in meters).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="x"></param>
|
/// <param name="x"></param>
|
||||||
/// <param name="y"></param>
|
/// <param name="y"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
List<SimpleRegionInfo> GetNeighbours(UUID scopeID, uint x, uint y);
|
List<SimpleRegionInfo> GetNeighbours(UUID scopeID, int x, int y);
|
||||||
|
|
||||||
SimpleRegionInfo GetRegionByUUID(UUID scopeID, UUID regionID);
|
SimpleRegionInfo GetRegionByUUID(UUID scopeID, UUID regionID);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get the region at the given position (in meters)
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="scopeID"></param>
|
||||||
|
/// <param name="x"></param>
|
||||||
|
/// <param name="y"></param>
|
||||||
|
/// <returns></returns>
|
||||||
SimpleRegionInfo GetRegionByPosition(UUID scopeID, int x, int y);
|
SimpleRegionInfo GetRegionByPosition(UUID scopeID, int x, int y);
|
||||||
|
|
||||||
SimpleRegionInfo GetRegionByName(UUID scopeID, string regionName);
|
SimpleRegionInfo GetRegionByName(UUID scopeID, string regionName);
|
||||||
|
@ -78,9 +85,7 @@ namespace OpenSim.Services.Interfaces
|
||||||
/// </returns>
|
/// </returns>
|
||||||
List<SimpleRegionInfo> GetRegionsByName(UUID scopeID, string name, int maxNumber);
|
List<SimpleRegionInfo> GetRegionsByName(UUID scopeID, string name, int maxNumber);
|
||||||
|
|
||||||
|
List<SimpleRegionInfo> GetRegionRange(UUID scopeID, int xmin, int xmax, int ymin, int ymax);
|
||||||
// Not sure about these two (diva)
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
31
prebuild.xml
31
prebuild.xml
|
@ -1383,6 +1383,37 @@
|
||||||
</Files>
|
</Files>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
||||||
|
<Project frameworkVersion="v3_5" name="OpenSim.Services.GridService" path="OpenSim/Services/GridService" type="Library">
|
||||||
|
<Configuration name="Debug">
|
||||||
|
<Options>
|
||||||
|
<OutputPath>../../../bin/</OutputPath>
|
||||||
|
</Options>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration name="Release">
|
||||||
|
<Options>
|
||||||
|
<OutputPath>../../../bin/</OutputPath>
|
||||||
|
</Options>
|
||||||
|
</Configuration>
|
||||||
|
|
||||||
|
<ReferencePath>../../../bin/</ReferencePath>
|
||||||
|
<Reference name="System"/>
|
||||||
|
<Reference name="OpenMetaverseTypes.dll"/>
|
||||||
|
<Reference name="OpenMetaverse.dll"/>
|
||||||
|
<Reference name="OpenSim.Framework"/>
|
||||||
|
<Reference name="OpenSim.Framework.Console"/>
|
||||||
|
<Reference name="OpenSim.Framework.Servers.HttpServer"/>
|
||||||
|
<Reference name="OpenSim.Services.Interfaces"/>
|
||||||
|
<Reference name="OpenSim.Services.Base"/>
|
||||||
|
<Reference name="OpenSim.Services.Connectors"/>
|
||||||
|
<Reference name="OpenSim.Data"/>
|
||||||
|
<Reference name="Nini.dll" />
|
||||||
|
<Reference name="log4net.dll"/>
|
||||||
|
|
||||||
|
<Files>
|
||||||
|
<Match pattern="*.cs" recurse="true"/>
|
||||||
|
</Files>
|
||||||
|
</Project>
|
||||||
|
|
||||||
<Project frameworkVersion="v3_5" name="OpenSim.Services.InventoryService" path="OpenSim/Services/InventoryService" type="Library">
|
<Project frameworkVersion="v3_5" name="OpenSim.Services.InventoryService" path="OpenSim/Services/InventoryService" type="Library">
|
||||||
<Configuration name="Debug">
|
<Configuration name="Debug">
|
||||||
<Options>
|
<Options>
|
||||||
|
|
Loading…
Reference in New Issue