From 279e0061c515ee0a03036bef68eea9738273d785 Mon Sep 17 00:00:00 2001
From: Johan Berntsson
Date: Tue, 4 Mar 2008 05:31:54 +0000
Subject: Merged 3Di code that provides scene and avatar serialization, and
plugin support for region move/split/merge. See ThirdParty/3Di/README.txt.
Unless the new modules are used there should be no noticeable changes when
running OpenSim.
---
OpenSim/Grid/GridServer/GridManager.cs | 76 +++++++++++++++++++++++++++--
OpenSim/Grid/GridServer/Main.cs | 1 +
OpenSim/Grid/UserServer/UserLoginService.cs | 8 +--
3 files changed, 77 insertions(+), 8 deletions(-)
(limited to 'OpenSim/Grid')
diff --git a/OpenSim/Grid/GridServer/GridManager.cs b/OpenSim/Grid/GridServer/GridManager.cs
index e32f551..2e6a892 100644
--- a/OpenSim/Grid/GridServer/GridManager.cs
+++ b/OpenSim/Grid/GridServer/GridManager.cs
@@ -37,6 +37,7 @@ using OpenSim.Framework;
using OpenSim.Framework.Console;
using OpenSim.Framework.Data;
using OpenSim.Framework.Servers;
+using OpenSim.Framework.Data.MySQL;
namespace OpenSim.Grid.GridServer
{
@@ -301,16 +302,20 @@ namespace OpenSim.Grid.GridServer
catch (KeyNotFoundException) { }
TheSim.regionHandle = Helpers.UIntsToLong((TheSim.regionLocX * Constants.RegionSize), (TheSim.regionLocY * Constants.RegionSize));
- TheSim.serverURI = "http://" + TheSim.serverIP + ":" + TheSim.serverPort + "/";
+ TheSim.serverURI = (string)requestData["server_uri"];
+ Console.WriteLine("adding region " + TheSim.regionLocX + " , " + TheSim.regionLocY + " , " +
+ TheSim.serverURI);
TheSim.httpServerURI = "http://" + TheSim.serverIP + ":" + TheSim.httpPort + "/";
TheSim.regionName = (string)requestData["sim_name"];
TheSim.UUID = new LLUUID((string)requestData["UUID"]);
+ TheSim.originUUID = new LLUUID((string) requestData["originUUID"]);
//make sure there is not an existing region at this location
OldSim = getRegion(TheSim.regionHandle);
- if (OldSim == null || OldSim.UUID == TheSim.UUID)
+ //if (OldSim == null || OldSim.UUID == TheSim.UUID)
+ if (OldSim == null || OldSim.UUID == TheSim.UUID || TheSim.UUID != TheSim.originUUID)
{
bool brandNew = ( OldSim == null && TheSim.regionRecvKey == config.SimSendKey &&
TheSim.regionSendKey == config.SimRecvKey);
@@ -502,6 +507,69 @@ namespace OpenSim.Grid.GridServer
///
/// Returns an XML RPC response to a simulator profile request
+ /// Performed after moving a region.
+ ///
+ ///
+ ///
+ /// The XMLRPC Request
+ /// Processing parameters
+ public XmlRpcResponse XmlRpcDeleteRegionMethod(XmlRpcRequest request)
+ {
+ XmlRpcResponse response = new XmlRpcResponse();
+ Hashtable responseData = new Hashtable();
+ response.Value = responseData;
+
+ //RegionProfileData TheSim = null;
+ string uuid = String.Empty;;
+ Hashtable requestData = (Hashtable) request.Params[0];
+ string myword;
+ if (requestData.ContainsKey("UUID")) {
+ //TheSim = getRegion(new LLUUID((string) requestData["UUID"]));
+ uuid = requestData["UUID"].ToString();
+ Console.WriteLine("deleting region " + uuid);
+// logToDB((new LLUUID((string)requestData["UUID"])).ToString(),"XmlRpcDeleteRegionMethod","", 5,"Attempting delete with UUID.");
+ }
+ else {
+ responseData["error"] = "No UUID or region_handle passed to grid server - unable to delete";
+ return response;
+ }
+
+ foreach (KeyValuePair kvp in _plugins) {
+ //OpenSim.Framework.Data.MySQL.MySQLGridData dbengine = new OpenSim.Framework.Data.MySQL.MySQLGridData();
+ try {
+ OpenSim.Framework.Data.MySQL.MySQLGridData mysqldata = (OpenSim.Framework.Data.MySQL.MySQLGridData)(kvp.Value);
+ //DataResponse insertResponse = mysqldata.DeleteProfile(TheSim);
+ DataResponse insertResponse = mysqldata.DeleteProfile(uuid);
+ switch (insertResponse) {
+ case DataResponse.RESPONSE_OK:
+ //MainLog.Instance.Verbose("grid", "Deleting region successful: " + uuid);
+ responseData["status"] = "Deleting region successful: " + uuid;
+ break;
+ case DataResponse.RESPONSE_ERROR:
+ //MainLog.Instance.Warn("storage", "Deleting region failed (Error): " + uuid);
+ responseData["status"] = "Deleting region failed (Error): " + uuid;
+ break;
+ case DataResponse.RESPONSE_INVALIDCREDENTIALS:
+ //MainLog.Instance.Warn("storage", "Deleting region failed (Invalid Credentials): " + uuid);
+ responseData["status"] = "Deleting region (Invalid Credentials): " + uuid;
+ break;
+ case DataResponse.RESPONSE_AUTHREQUIRED:
+ //MainLog.Instance.Warn("storage", "Deleting region failed (Authentication Required): " + uuid);
+ responseData["status"] = "Deleting region (Authentication Required): " + uuid;
+ break;
+ }
+ }
+ catch (Exception e) {
+ m_log.Error("storage Unable to delete region " + uuid + " via MySQL");
+ //MainLog.Instance.Warn("storage", e.ToString());
+ }
+ }
+
+ return response;
+ }
+
+ ///
+ /// Returns an XML RPC response to a simulator profile request
///
///
///
@@ -533,6 +601,7 @@ namespace OpenSim.Grid.GridServer
(string) requestData["region_handle"]);
responseData["sim_ip"] = Util.GetHostFromDNS(simData.serverIP).ToString();
responseData["sim_port"] = simData.serverPort.ToString();
+ responseData["server_uri"] = simData.serverURI;
responseData["http_port"] = simData.httpPort.ToString();
responseData["remoting_port"] = simData.remotingPort.ToString();
responseData["region_locx"] = simData.regionLocX.ToString();
@@ -798,8 +867,7 @@ namespace OpenSim.Grid.GridServer
}
}
- TheSim.serverURI = "http://" + TheSim.serverIP + ":" + TheSim.serverPort + "/";
-
+ TheSim.serverURI = "http://" + TheSim.serverIP + ":" + TheSim.serverPort + "/";
bool requirePublic = false;
bool requireValid = true;
diff --git a/OpenSim/Grid/GridServer/Main.cs b/OpenSim/Grid/GridServer/Main.cs
index ff4a888..ff4cfa2 100644
--- a/OpenSim/Grid/GridServer/Main.cs
+++ b/OpenSim/Grid/GridServer/Main.cs
@@ -113,6 +113,7 @@ namespace OpenSim.Grid.GridServer
httpServer.AddXmlRPCHandler("simulator_login", m_gridManager.XmlRpcSimulatorLoginMethod);
httpServer.AddXmlRPCHandler("simulator_data_request", m_gridManager.XmlRpcSimulatorDataRequestMethod);
+ httpServer.AddXmlRPCHandler("simulator_after_region_moved", m_gridManager.XmlRpcDeleteRegionMethod);
httpServer.AddXmlRPCHandler("map_block", m_gridManager.XmlRpcMapBlockMethod);
// Message Server ---> Grid Server
diff --git a/OpenSim/Grid/UserServer/UserLoginService.cs b/OpenSim/Grid/UserServer/UserLoginService.cs
index 0b832f4..e03ac3a 100644
--- a/OpenSim/Grid/UserServer/UserLoginService.cs
+++ b/OpenSim/Grid/UserServer/UserLoginService.cs
@@ -99,8 +99,8 @@ namespace OpenSim.Grid.UserServer
//CFK: the next one for X & Y and comment this one.
//CFK: m_log.Info("[LOGIN]: CUSTOMISERESPONSE: Region X: " + SimInfo.regionLocX +
//CFK: "; Region Y: " + SimInfo.regionLocY);
- response.SimAddress = Util.GetHostFromDNS(SimInfo.serverIP).ToString();
- response.SimPort = (uint) SimInfo.serverPort;
+ response.SimAddress = Util.GetHostFromDNS(SimInfo.serverURI.Split(new char[] { '/', ':' })[3]).ToString();
+ response.SimPort = uint.Parse(SimInfo.serverURI.Split(new char[] { '/', ':' })[4]);
response.RegionX = SimInfo.regionLocX;
response.RegionY = SimInfo.regionLocY;
@@ -190,8 +190,8 @@ namespace OpenSim.Grid.UserServer
m_log.Info("[LOGIN]: " +
"CUSTOMISERESPONSE: Region X: " + SimInfo.regionLocX + "; Region Y: " +
SimInfo.regionLocY);
- response.SimAddress = Util.GetHostFromDNS(SimInfo.serverIP).ToString();
- response.SimPort = (uint) SimInfo.serverPort;
+ response.SimAddress = Util.GetHostFromDNS(SimInfo.serverURI.Split(new char[] { '/', ':' })[3]).ToString();
+ response.SimPort = uint.Parse(SimInfo.serverURI.Split(new char[] { '/', ':' })[4]);
response.RegionX = SimInfo.regionLocX;
response.RegionY = SimInfo.regionLocY;
--
cgit v1.1