parent
5feeea00ae
commit
9fbcceb1db
|
@ -51,6 +51,8 @@ namespace OpenSim.Server.Handlers.Hypergrid
|
||||||
get { return m_GatekeeperService; }
|
get { return m_GatekeeperService; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private IHypergridService m_HypergridService;
|
||||||
|
|
||||||
public GatekeeperServiceInConnector(IConfigSource config, IHttpServer server, ISimulationService simService) :
|
public GatekeeperServiceInConnector(IConfigSource config, IHttpServer server, ISimulationService simService) :
|
||||||
base(config, server, String.Empty)
|
base(config, server, String.Empty)
|
||||||
{
|
{
|
||||||
|
@ -60,12 +62,17 @@ namespace OpenSim.Server.Handlers.Hypergrid
|
||||||
string serviceDll = gridConfig.GetString("LocalServiceModule", string.Empty);
|
string serviceDll = gridConfig.GetString("LocalServiceModule", string.Empty);
|
||||||
Object[] args = new Object[] { config, simService };
|
Object[] args = new Object[] { config, simService };
|
||||||
m_GatekeeperService = ServerUtils.LoadPlugin<IGatekeeperService>(serviceDll, args);
|
m_GatekeeperService = ServerUtils.LoadPlugin<IGatekeeperService>(serviceDll, args);
|
||||||
|
|
||||||
|
serviceDll = gridConfig.GetString("HypergridService", string.Empty);
|
||||||
|
m_HypergridService = ServerUtils.LoadPlugin<IHypergridService>(serviceDll, args);
|
||||||
|
|
||||||
}
|
}
|
||||||
if (m_GatekeeperService == null)
|
if (m_GatekeeperService == null || m_HypergridService == null)
|
||||||
throw new Exception("Gatekeeper server connector cannot proceed because of missing service");
|
throw new Exception("Gatekeeper server connector cannot proceed because of missing service");
|
||||||
|
|
||||||
HypergridHandlers hghandlers = new HypergridHandlers(m_GatekeeperService);
|
HypergridHandlers hghandlers = new HypergridHandlers(m_GatekeeperService, m_HypergridService);
|
||||||
server.AddXmlRPCHandler("link_region", hghandlers.LinkRegionRequest, false);
|
server.AddXmlRPCHandler("link_region", hghandlers.LinkRegionRequest, false);
|
||||||
|
server.AddXmlRPCHandler("link_region_by_desc", hghandlers.LinkRegionByDescRequest, false);
|
||||||
server.AddXmlRPCHandler("get_region", hghandlers.GetRegion, false);
|
server.AddXmlRPCHandler("get_region", hghandlers.GetRegion, false);
|
||||||
server.AddXmlRPCHandler("get_home_region", hghandlers.GetHomeRegion, false);
|
server.AddXmlRPCHandler("get_home_region", hghandlers.GetHomeRegion, false);
|
||||||
|
|
||||||
|
|
|
@ -44,10 +44,12 @@ namespace OpenSim.Server.Handlers.Hypergrid
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private IGatekeeperService m_GatekeeperService;
|
private IGatekeeperService m_GatekeeperService;
|
||||||
|
private IHypergridService m_HypergridService;
|
||||||
|
|
||||||
public HypergridHandlers(IGatekeeperService gatekeeper)
|
public HypergridHandlers(IGatekeeperService gatekeeper, IHypergridService hyper)
|
||||||
{
|
{
|
||||||
m_GatekeeperService = gatekeeper;
|
m_GatekeeperService = gatekeeper;
|
||||||
|
m_HypergridService = hyper;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -80,6 +82,36 @@ namespace OpenSim.Server.Handlers.Hypergrid
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A local region wants to establish a grid-wide hyperlink to another region
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="request"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public XmlRpcResponse LinkRegionByDescRequest(XmlRpcRequest request, IPEndPoint remoteClient)
|
||||||
|
{
|
||||||
|
Hashtable requestData = (Hashtable)request.Params[0];
|
||||||
|
//string host = (string)requestData["host"];
|
||||||
|
//string portstr = (string)requestData["port"];
|
||||||
|
string descriptor = (string)requestData["region_desc"];
|
||||||
|
|
||||||
|
UUID regionID = UUID.Zero;
|
||||||
|
string imageURL = string.Empty;
|
||||||
|
ulong regionHandle = 0;
|
||||||
|
string reason = string.Empty;
|
||||||
|
|
||||||
|
bool success = m_HypergridService.LinkRegion(descriptor, out regionID, out regionHandle, out imageURL, out reason);
|
||||||
|
|
||||||
|
Hashtable hash = new Hashtable();
|
||||||
|
hash["result"] = success.ToString();
|
||||||
|
hash["uuid"] = regionID.ToString();
|
||||||
|
hash["handle"] = regionHandle.ToString();
|
||||||
|
hash["region_image"] = imageURL;
|
||||||
|
|
||||||
|
XmlRpcResponse response = new XmlRpcResponse();
|
||||||
|
response.Value = hash;
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
public XmlRpcResponse GetRegion(XmlRpcRequest request, IPEndPoint remoteClient)
|
public XmlRpcResponse GetRegion(XmlRpcRequest request, IPEndPoint remoteClient)
|
||||||
{
|
{
|
||||||
Hashtable requestData = (Hashtable)request.Params[0];
|
Hashtable requestData = (Hashtable)request.Params[0];
|
||||||
|
|
|
@ -41,22 +41,49 @@ using OpenMetaverse;
|
||||||
using OpenMetaverse.Imaging;
|
using OpenMetaverse.Imaging;
|
||||||
using log4net;
|
using log4net;
|
||||||
using Nwc.XmlRpc;
|
using Nwc.XmlRpc;
|
||||||
|
using Nini.Config;
|
||||||
|
|
||||||
namespace OpenSim.Services.Connectors.Hypergrid
|
namespace OpenSim.Services.Connectors.Hypergrid
|
||||||
{
|
{
|
||||||
public class HypergridServiceConnector
|
public class HypergridServiceConnector : IHypergridService
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private IAssetService m_AssetService;
|
private IAssetService m_AssetService;
|
||||||
|
private string m_ServerURL;
|
||||||
|
|
||||||
public HypergridServiceConnector() : this(null) { }
|
public HypergridServiceConnector() { }
|
||||||
|
|
||||||
public HypergridServiceConnector(IAssetService assService)
|
public HypergridServiceConnector(IAssetService assService)
|
||||||
{
|
{
|
||||||
m_AssetService = assService;
|
m_AssetService = assService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public HypergridServiceConnector(IConfigSource source)
|
||||||
|
{
|
||||||
|
Initialise(source);
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void Initialise(IConfigSource source)
|
||||||
|
{
|
||||||
|
IConfig hgConfig = source.Configs["HypergridService"];
|
||||||
|
if (hgConfig == null)
|
||||||
|
{
|
||||||
|
m_log.Error("[HYPERGRID CONNECTOR]: HypergridService missing from OpenSim.ini");
|
||||||
|
throw new Exception("Hypergrid connector init error");
|
||||||
|
}
|
||||||
|
|
||||||
|
string serviceURI = hgConfig.GetString("HypergridServerURI",
|
||||||
|
String.Empty);
|
||||||
|
|
||||||
|
if (serviceURI == String.Empty)
|
||||||
|
{
|
||||||
|
m_log.Error("[HYPERGRID CONNECTOR]: No Server URI named in section HypergridService");
|
||||||
|
throw new Exception("Hypergrid connector init error");
|
||||||
|
}
|
||||||
|
m_ServerURL = serviceURI;
|
||||||
|
}
|
||||||
|
|
||||||
public bool LinkRegion(GridRegion info, out UUID regionID, out ulong realHandle, out string imageURL, out string reason)
|
public bool LinkRegion(GridRegion info, out UUID regionID, out ulong realHandle, out string imageURL, out string reason)
|
||||||
{
|
{
|
||||||
regionID = UUID.Zero;
|
regionID = UUID.Zero;
|
||||||
|
@ -246,5 +273,82 @@ namespace OpenSim.Services.Connectors.Hypergrid
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region From local regions to grid-wide hypergrid service
|
||||||
|
|
||||||
|
public bool LinkRegion(string regionDescriptor, out UUID regionID, out ulong realHandle, out string imageURL, out string reason)
|
||||||
|
{
|
||||||
|
regionID = UUID.Zero;
|
||||||
|
imageURL = string.Empty;
|
||||||
|
realHandle = 0;
|
||||||
|
reason = string.Empty;
|
||||||
|
|
||||||
|
Hashtable hash = new Hashtable();
|
||||||
|
hash["region_desc"] = regionDescriptor;
|
||||||
|
|
||||||
|
IList paramList = new ArrayList();
|
||||||
|
paramList.Add(hash);
|
||||||
|
|
||||||
|
XmlRpcRequest request = new XmlRpcRequest("link_region_by_desc", paramList);
|
||||||
|
XmlRpcResponse response = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
response = request.Send(m_ServerURL, 10000);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
m_log.Debug("[HGrid]: Exception " + e.Message);
|
||||||
|
reason = "Error contacting remote server";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (response.IsFault)
|
||||||
|
{
|
||||||
|
reason = response.FaultString;
|
||||||
|
m_log.ErrorFormat("[HGrid]: remote call returned an error: {0}", response.FaultString);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
hash = (Hashtable)response.Value;
|
||||||
|
//foreach (Object o in hash)
|
||||||
|
// m_log.Debug(">> " + ((DictionaryEntry)o).Key + ":" + ((DictionaryEntry)o).Value);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
bool success = false;
|
||||||
|
Boolean.TryParse((string)hash["result"], out success);
|
||||||
|
if (success)
|
||||||
|
{
|
||||||
|
UUID.TryParse((string)hash["uuid"], out regionID);
|
||||||
|
//m_log.Debug(">> HERE, uuid: " + uuid);
|
||||||
|
if ((string)hash["handle"] != null)
|
||||||
|
{
|
||||||
|
realHandle = Convert.ToUInt64((string)hash["handle"]);
|
||||||
|
//m_log.Debug(">> HERE, realHandle: " + realHandle);
|
||||||
|
}
|
||||||
|
if (hash["region_image"] != null)
|
||||||
|
{
|
||||||
|
imageURL = (string)hash["region_image"];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
reason = "Error parsing return arguments";
|
||||||
|
m_log.Error("[HGrid]: Got exception while parsing hyperlink response " + e.StackTrace);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO !!!
|
||||||
|
public GridRegion GetRegionByUUID(UUID regionID) { return null; }
|
||||||
|
public GridRegion GetRegionByPosition(int x, int y) { return null; }
|
||||||
|
public GridRegion GetRegionByName(string name) { return null; }
|
||||||
|
public List<GridRegion> GetRegionsByName(string name) { return null; }
|
||||||
|
public List<GridRegion> GetRegionRange(int xmin, int xmax, int ymin, int ymax) { return null; }
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,7 +42,6 @@ ServiceConnectors = "OpenSim.Server.Handlers.dll:AssetServiceConnector,OpenSim.S
|
||||||
; *
|
; *
|
||||||
[InventoryService]
|
[InventoryService]
|
||||||
LocalServiceModule = "OpenSim.Services.InventoryService.dll:InventoryService"
|
LocalServiceModule = "OpenSim.Services.InventoryService.dll:InventoryService"
|
||||||
UserServerURI = "http://127.0.0.1:8002"
|
|
||||||
SessionAuthentication = "false"
|
SessionAuthentication = "false"
|
||||||
StorageProvider = "OpenSim.Data.MySQL.dll"
|
StorageProvider = "OpenSim.Data.MySQL.dll"
|
||||||
ConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=opensim123;"
|
ConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=opensim123;"
|
||||||
|
@ -58,10 +57,12 @@ ServiceConnectors = "OpenSim.Server.Handlers.dll:AssetServiceConnector,OpenSim.S
|
||||||
Realm = "regions"
|
Realm = "regions"
|
||||||
; AllowDuplicateNames = "True"
|
; AllowDuplicateNames = "True"
|
||||||
;; Next, we can specify properties of regions, including default and fallback regions
|
;; Next, we can specify properties of regions, including default and fallback regions
|
||||||
;; The syntax is: Region_<RegioName> = "<flags>"
|
;; The syntax is: Region_<RegionName> = "<flags>"
|
||||||
|
;; or: Region_<RegionID> = "<flags>"
|
||||||
;; where <flags> can be DefaultRegion, FallbackRegion, NoDirectLogin, Persistent, LockedOut,Reservation,NoMove,Authenticate
|
;; where <flags> can be DefaultRegion, FallbackRegion, NoDirectLogin, Persistent, LockedOut,Reservation,NoMove,Authenticate
|
||||||
;; For example:
|
;; For example:
|
||||||
; Region_Welcome_Area = "DefaultRegion, FallbackRegion"
|
; Region_Welcome_Area = "DefaultRegion, FallbackRegion"
|
||||||
|
; (replace spaces with underscore)
|
||||||
|
|
||||||
; * This is the configuration for the freeswitch server in grid mode
|
; * This is the configuration for the freeswitch server in grid mode
|
||||||
[FreeswitchService]
|
[FreeswitchService]
|
||||||
|
|
|
@ -17,18 +17,17 @@
|
||||||
AvatarServices = "RemoteAvatarServicesConnector"
|
AvatarServices = "RemoteAvatarServicesConnector"
|
||||||
NeighbourServices = "RemoteNeighbourServicesConnector"
|
NeighbourServices = "RemoteNeighbourServicesConnector"
|
||||||
AuthenticationServices = "RemoteAuthenticationServicesConnector"
|
AuthenticationServices = "RemoteAuthenticationServicesConnector"
|
||||||
|
AuthorizationServices = "LocalAuthorizationServicesConnector"
|
||||||
PresenceServices = "RemotePresenceServicesConnector"
|
PresenceServices = "RemotePresenceServicesConnector"
|
||||||
UserAccountServices = "RemoteUserAccountServicesConnector"
|
UserAccountServices = "RemoteUserAccountServicesConnector"
|
||||||
SimulationServices = "RemoteSimulationConnectorModule"
|
SimulationServices = "RemoteSimulationConnectorModule"
|
||||||
EntityTransferModule = "BasicEntityTransferModule"
|
EntityTransferModule = "HGEntityTransferModule"
|
||||||
LandServiceInConnector = true
|
LandServiceInConnector = true
|
||||||
NeighbourServiceInConnector = true
|
NeighbourServiceInConnector = true
|
||||||
HypergridServiceInConnector = true
|
|
||||||
SimulationServiceInConnector = true
|
SimulationServiceInConnector = true
|
||||||
LibraryModule = true
|
LibraryModule = true
|
||||||
InventoryServiceInConnector = false
|
InventoryServiceInConnector = false
|
||||||
AssetServiceInConnector = false
|
AssetServiceInConnector = false
|
||||||
LLLoginServiceInConnector = false
|
|
||||||
|
|
||||||
[AssetService]
|
[AssetService]
|
||||||
LocalGridAssetService = "OpenSim.Services.Connectors.dll:AssetServicesConnector"
|
LocalGridAssetService = "OpenSim.Services.Connectors.dll:AssetServicesConnector"
|
||||||
|
@ -41,12 +40,12 @@
|
||||||
[GridService]
|
[GridService]
|
||||||
; for the HGGridServicesConnector to instantiate
|
; for the HGGridServicesConnector to instantiate
|
||||||
GridServiceConnectorModule = "OpenSim.Region.CoreModules.dll:RemoteGridServicesConnector"
|
GridServiceConnectorModule = "OpenSim.Region.CoreModules.dll:RemoteGridServicesConnector"
|
||||||
|
HypergridService = "OpenSim.Services.HypergridService.dll:HypergridService"
|
||||||
; RemoteGridServicesConnector instantiates a LocalGridServicesConnector,
|
; RemoteGridServicesConnector instantiates a LocalGridServicesConnector,
|
||||||
; which in turn uses this
|
; which in turn uses this
|
||||||
LocalServiceModule = "OpenSim.Services.GridService.dll:GridService"
|
LocalServiceModule = "OpenSim.Services.GridService.dll:GridService"
|
||||||
StorageProvider = "OpenSim.Data.Null.dll:NullRegionData"
|
StorageProvider = "OpenSim.Data.Null.dll:NullRegionData"
|
||||||
|
|
||||||
[LibraryService]
|
[HypergridService]
|
||||||
LocalServiceModule = "OpenSim.Services.InventoryService.dll:LibraryService"
|
GridService = "OpenSim.Services.GridService.dll:GridService"
|
||||||
LibraryName = "OpenSim Library"
|
AssetService = "OpenSim.Services.AssetService.dll:AssetService"
|
||||||
DefaultLibrary = "./inventory/Libraries.xml"
|
|
||||||
|
|
Loading…
Reference in New Issue