* Rolled back a few changes.
parent
138e612300
commit
20a9bf08f5
|
@ -68,7 +68,7 @@ namespace OpenSim.ApplicationPlugins.LoadRegions
|
||||||
|
|
||||||
for (int i = 0; i < regionsToLoad.Length; i++)
|
for (int i = 0; i < regionsToLoad.Length; i++)
|
||||||
{
|
{
|
||||||
m_log.Debug("[LOADREGIONS]: Creating Region: " + regionsToLoad[i].RegionName + " (ThreadID: " + Thread.CurrentThread.ManagedThreadId +
|
m_log.Debug("[LOADREGIONS]: Creating Region: " + regionsToLoad[i].RegionName + " (ThreadID: " + Thread.CurrentThread.ManagedThreadId.ToString() +
|
||||||
")");
|
")");
|
||||||
openSim.CreateRegion(regionsToLoad[i], true);
|
openSim.CreateRegion(regionsToLoad[i], true);
|
||||||
}
|
}
|
||||||
|
@ -106,7 +106,7 @@ namespace OpenSim.ApplicationPlugins.LoadRegions
|
||||||
if (regionhandle == regionsToLoad[i].RegionHandle)
|
if (regionhandle == regionsToLoad[i].RegionHandle)
|
||||||
{
|
{
|
||||||
m_log.Debug("[LOADREGIONS]: Creating Region: " + regionsToLoad[i].RegionName + " (ThreadID: " +
|
m_log.Debug("[LOADREGIONS]: Creating Region: " + regionsToLoad[i].RegionName + " (ThreadID: " +
|
||||||
Thread.CurrentThread.ManagedThreadId + ")");
|
Thread.CurrentThread.ManagedThreadId.ToString() + ")");
|
||||||
openSim.CreateRegion(regionsToLoad[i], true);
|
openSim.CreateRegion(regionsToLoad[i], true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,13 +54,11 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
||||||
private BaseHttpServer m_httpd;
|
private BaseHttpServer m_httpd;
|
||||||
private string requiredPassword = String.Empty;
|
private string requiredPassword = String.Empty;
|
||||||
|
|
||||||
#region IApplicationPlugin Members
|
|
||||||
|
|
||||||
public void Initialise(OpenSimMain openSim)
|
public void Initialise(OpenSimMain openSim)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (openSim.ConfigSource.Configs["RemoteAdmin"] != null &&
|
if (openSim.ConfigSource.Configs["RemoteAdmin"] != null &&
|
||||||
openSim.ConfigSource.Configs["RemoteAdmin"].GetBoolean("enabled", false))
|
openSim.ConfigSource.Configs["RemoteAdmin"].GetBoolean("enabled", false))
|
||||||
{
|
{
|
||||||
m_log.Info("[RADMIN]: Remote Admin Plugin Enabled");
|
m_log.Info("[RADMIN]: Remote Admin Plugin Enabled");
|
||||||
|
@ -84,12 +82,6 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Close()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
public XmlRpcResponse XmlRpcRestartMethod(XmlRpcRequest request)
|
public XmlRpcResponse XmlRpcRestartMethod(XmlRpcRequest request)
|
||||||
{
|
{
|
||||||
XmlRpcResponse response = new XmlRpcResponse();
|
XmlRpcResponse response = new XmlRpcResponse();
|
||||||
|
@ -98,14 +90,13 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
||||||
Hashtable responseData = new Hashtable();
|
Hashtable responseData = new Hashtable();
|
||||||
|
|
||||||
m_log.Info("[RADMIN]: Request to restart Region.");
|
m_log.Info("[RADMIN]: Request to restart Region.");
|
||||||
try
|
try {
|
||||||
{
|
checkStringParameters(request, new string[] { "password", "regionID" });
|
||||||
checkStringParameters(request, new[] {"password", "regionID"});
|
|
||||||
|
|
||||||
if (requiredPassword != String.Empty &&
|
if (requiredPassword != String.Empty &&
|
||||||
(!requestData.Contains("password") || (string) requestData["password"] != requiredPassword))
|
(!requestData.Contains("password") || (string) requestData["password"] != requiredPassword))
|
||||||
throw new Exception("wrong password");
|
throw new Exception("wrong password");
|
||||||
|
|
||||||
LLUUID regionID = new LLUUID((string) requestData["regionID"]);
|
LLUUID regionID = new LLUUID((string) requestData["regionID"]);
|
||||||
|
|
||||||
responseData["accepted"] = "true";
|
responseData["accepted"] = "true";
|
||||||
|
@ -115,11 +106,11 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
||||||
|
|
||||||
if (!m_app.SceneManager.TryGetScene(regionID, out rebootedScene))
|
if (!m_app.SceneManager.TryGetScene(regionID, out rebootedScene))
|
||||||
throw new Exception("region not found");
|
throw new Exception("region not found");
|
||||||
|
|
||||||
responseData["rebooting"] = "true";
|
responseData["rebooting"] = "true";
|
||||||
rebootedScene.Restart(30);
|
rebootedScene.Restart(30);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch(Exception e)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[RADMIN]: Restart region: failed: {0}", e.Message);
|
m_log.ErrorFormat("[RADMIN]: Restart region: failed: {0}", e.Message);
|
||||||
m_log.DebugFormat("[RADMIN]: Restart region: failed: {0}", e.ToString());
|
m_log.DebugFormat("[RADMIN]: Restart region: failed: {0}", e.ToString());
|
||||||
|
@ -139,14 +130,13 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
||||||
Hashtable requestData = (Hashtable) request.Params[0];
|
Hashtable requestData = (Hashtable) request.Params[0];
|
||||||
Hashtable responseData = new Hashtable();
|
Hashtable responseData = new Hashtable();
|
||||||
|
|
||||||
try
|
try {
|
||||||
{
|
checkStringParameters(request, new string[] { "password", "message" });
|
||||||
checkStringParameters(request, new[] {"password", "message"});
|
|
||||||
|
|
||||||
if (requiredPassword != String.Empty &&
|
if (requiredPassword != String.Empty &&
|
||||||
(!requestData.Contains("password") || (string) requestData["password"] != requiredPassword))
|
(!requestData.Contains("password") || (string) requestData["password"] != requiredPassword))
|
||||||
throw new Exception("wrong password");
|
throw new Exception("wrong password");
|
||||||
|
|
||||||
string message = (string) requestData["message"];
|
string message = (string) requestData["message"];
|
||||||
m_log.InfoFormat("[RADMIN]: Broadcasting: {0}", message);
|
m_log.InfoFormat("[RADMIN]: Broadcasting: {0}", message);
|
||||||
|
|
||||||
|
@ -155,7 +145,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
||||||
|
|
||||||
m_app.SceneManager.SendGeneralMessage(message);
|
m_app.SceneManager.SendGeneralMessage(message);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch(Exception e)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[RADMIN]: Broadcasting: failed: {0}", e.Message);
|
m_log.ErrorFormat("[RADMIN]: Broadcasting: failed: {0}", e.Message);
|
||||||
m_log.DebugFormat("[RADMIN]: Broadcasting: failed: {0}", e.ToString());
|
m_log.DebugFormat("[RADMIN]: Broadcasting: failed: {0}", e.ToString());
|
||||||
|
@ -172,25 +162,24 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
||||||
public XmlRpcResponse XmlRpcLoadHeightmapMethod(XmlRpcRequest request)
|
public XmlRpcResponse XmlRpcLoadHeightmapMethod(XmlRpcRequest request)
|
||||||
{
|
{
|
||||||
XmlRpcResponse response = new XmlRpcResponse();
|
XmlRpcResponse response = new XmlRpcResponse();
|
||||||
Hashtable requestData = (Hashtable) request.Params[0];
|
Hashtable requestData = (Hashtable)request.Params[0];
|
||||||
|
|
||||||
m_log.DebugFormat("[RADMIN]: Load Terrain: XmlRpc {0}", request.ToString());
|
m_log.DebugFormat("[RADMIN]: Load Terrain: XmlRpc {0}", request.ToString());
|
||||||
foreach (string k in requestData.Keys)
|
foreach (string k in requestData.Keys)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[RADMIN]: Load Terrain: XmlRpc {0}: >{1}< {2}",
|
m_log.DebugFormat("[RADMIN]: Load Terrain: XmlRpc {0}: >{1}< {2}",
|
||||||
k, requestData[k], ((string) requestData[k]).Length);
|
k, (string)requestData[k], ((string)requestData[k]).Length);
|
||||||
}
|
}
|
||||||
|
|
||||||
Hashtable responseData = new Hashtable();
|
Hashtable responseData = new Hashtable();
|
||||||
try
|
try {
|
||||||
{
|
checkStringParameters(request, new string[] { "password", "filename", "regionid"});
|
||||||
checkStringParameters(request, new[] {"password", "filename", "regionid"});
|
|
||||||
|
|
||||||
if (requiredPassword != String.Empty &&
|
if (requiredPassword != String.Empty &&
|
||||||
(!requestData.Contains("password") || (string) requestData["password"] != requiredPassword))
|
(!requestData.Contains("password") || (string)requestData["password"] != requiredPassword))
|
||||||
throw new Exception("wrong password");
|
throw new Exception("wrong password");
|
||||||
|
|
||||||
string file = (string) requestData["filename"];
|
string file = (string)requestData["filename"];
|
||||||
LLUUID regionID = (string) requestData["regionid"];
|
LLUUID regionID = (string) requestData["regionid"];
|
||||||
m_log.InfoFormat("[RADMIN]: Terrain Loading: {0}", file);
|
m_log.InfoFormat("[RADMIN]: Terrain Loading: {0}", file);
|
||||||
|
|
||||||
|
@ -209,7 +198,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
||||||
|
|
||||||
response.Value = responseData;
|
response.Value = responseData;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[RADMIN] Terrain Loading: failed: {0}", e.Message);
|
m_log.ErrorFormat("[RADMIN] Terrain Loading: failed: {0}", e.Message);
|
||||||
m_log.DebugFormat("[RADMIN] Terrain Loading: failed: {0}", e.ToString());
|
m_log.DebugFormat("[RADMIN] Terrain Loading: failed: {0}", e.ToString());
|
||||||
|
@ -228,8 +217,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
||||||
Hashtable requestData = (Hashtable) request.Params[0];
|
Hashtable requestData = (Hashtable) request.Params[0];
|
||||||
Hashtable responseData = new Hashtable();
|
Hashtable responseData = new Hashtable();
|
||||||
|
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
if (requiredPassword != String.Empty &&
|
if (requiredPassword != String.Empty &&
|
||||||
(!requestData.Contains("password") || (string) requestData["password"] != requiredPassword))
|
(!requestData.Contains("password") || (string) requestData["password"] != requiredPassword))
|
||||||
throw new Exception("wrong password");
|
throw new Exception("wrong password");
|
||||||
|
@ -239,14 +227,14 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
||||||
|
|
||||||
int timeout = 2000;
|
int timeout = 2000;
|
||||||
|
|
||||||
if (requestData.ContainsKey("shutdown") &&
|
if (requestData.ContainsKey("shutdown") &&
|
||||||
((string) requestData["shutdown"] == "delayed") &&
|
((string) requestData["shutdown"] == "delayed") &&
|
||||||
requestData.ContainsKey("milliseconds"))
|
requestData.ContainsKey("milliseconds"))
|
||||||
{
|
{
|
||||||
timeout = (Int32) requestData["milliseconds"];
|
timeout = (Int32) requestData["milliseconds"];
|
||||||
m_app.SceneManager.SendGeneralMessage("Region is going down in " + ((timeout / 1000)) +
|
m_app.SceneManager.SendGeneralMessage("Region is going down in " + ((int) (timeout/1000)).ToString() +
|
||||||
" second(s). Please save what you are doing and log out.");
|
" second(s). Please save what you are doing and log out.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_app.SceneManager.SendGeneralMessage("Region is going down now.");
|
m_app.SceneManager.SendGeneralMessage("Region is going down now.");
|
||||||
|
@ -255,12 +243,12 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
||||||
// Perform shutdown
|
// Perform shutdown
|
||||||
Timer shutdownTimer = new Timer(timeout); // Wait before firing
|
Timer shutdownTimer = new Timer(timeout); // Wait before firing
|
||||||
shutdownTimer.AutoReset = false;
|
shutdownTimer.AutoReset = false;
|
||||||
shutdownTimer.Elapsed += shutdownTimer_Elapsed;
|
shutdownTimer.Elapsed += new ElapsedEventHandler(shutdownTimer_Elapsed);
|
||||||
shutdownTimer.Start();
|
shutdownTimer.Start();
|
||||||
|
|
||||||
responseData["success"] = "true";
|
responseData["success"] = "true";
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[RADMIN] Shutdown: failed: {0}", e.Message);
|
m_log.ErrorFormat("[RADMIN] Shutdown: failed: {0}", e.Message);
|
||||||
m_log.DebugFormat("[RADMIN] Shutdown: failed: {0}", e.ToString());
|
m_log.DebugFormat("[RADMIN] Shutdown: failed: {0}", e.ToString());
|
||||||
|
@ -284,9 +272,9 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
||||||
Hashtable requestData = (Hashtable) request.Params[0];
|
Hashtable requestData = (Hashtable) request.Params[0];
|
||||||
foreach (string p in param)
|
foreach (string p in param)
|
||||||
{
|
{
|
||||||
if (!requestData.Contains(p))
|
if (!requestData.Contains(p))
|
||||||
throw new Exception(String.Format("missing string parameter {0}", p));
|
throw new Exception(String.Format("missing string parameter {0}", p));
|
||||||
if (String.IsNullOrEmpty((string) requestData[p]))
|
if (String.IsNullOrEmpty((string)requestData[p]))
|
||||||
throw new Exception(String.Format("parameter {0} is empty", p));
|
throw new Exception(String.Format("parameter {0} is empty", p));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -296,7 +284,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
||||||
Hashtable requestData = (Hashtable) request.Params[0];
|
Hashtable requestData = (Hashtable) request.Params[0];
|
||||||
foreach (string p in param)
|
foreach (string p in param)
|
||||||
{
|
{
|
||||||
if (!requestData.Contains(p))
|
if (!requestData.Contains(p))
|
||||||
throw new Exception(String.Format("missing integer parameter {0}", p));
|
throw new Exception(String.Format("missing integer parameter {0}", p));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -357,35 +345,31 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
||||||
Hashtable requestData = (Hashtable) request.Params[0];
|
Hashtable requestData = (Hashtable) request.Params[0];
|
||||||
Hashtable responseData = new Hashtable();
|
Hashtable responseData = new Hashtable();
|
||||||
|
|
||||||
try
|
try {
|
||||||
{
|
checkStringParameters(request, new string[] { "password",
|
||||||
checkStringParameters(request, new[]
|
"region_name",
|
||||||
{
|
"region_master_first", "region_master_last",
|
||||||
"password",
|
"region_master_password",
|
||||||
"region_name",
|
"listen_ip", "external_address"});
|
||||||
"region_master_first", "region_master_last",
|
checkIntegerParams(request, new string[] { "region_x", "region_y", "listen_port"});
|
||||||
"region_master_password",
|
|
||||||
"listen_ip", "external_address"
|
|
||||||
});
|
|
||||||
checkIntegerParams(request, new[] {"region_x", "region_y", "listen_port"});
|
|
||||||
|
|
||||||
// check password
|
// check password
|
||||||
if (!String.IsNullOrEmpty(requiredPassword) &&
|
if (!String.IsNullOrEmpty(requiredPassword) &&
|
||||||
(string) requestData["password"] != requiredPassword) throw new Exception("wrong password");
|
(string)requestData["password"] != requiredPassword) throw new Exception("wrong password");
|
||||||
|
|
||||||
// extract or generate region ID now
|
// extract or generate region ID now
|
||||||
Scene scene = null;
|
Scene scene = null;
|
||||||
LLUUID regionID = LLUUID.Zero;
|
LLUUID regionID = LLUUID.Zero;
|
||||||
if (requestData.ContainsKey("region_id") &&
|
if (requestData.ContainsKey("region_id") &&
|
||||||
!String.IsNullOrEmpty((string) requestData["region_id"]))
|
!String.IsNullOrEmpty((string)requestData["region_id"]))
|
||||||
{
|
{
|
||||||
regionID = (string) requestData["region_id"];
|
regionID = (string) requestData["region_id"];
|
||||||
if (m_app.SceneManager.TryGetScene(regionID, out scene))
|
if (m_app.SceneManager.TryGetScene(regionID, out scene))
|
||||||
throw new Exception(String.Format("region UUID already in use by region {0}, UUID {1}, <{2},{3}>",
|
throw new Exception(String.Format("region UUID already in use by region {0}, UUID {1}, <{2},{3}>",
|
||||||
scene.RegionInfo.RegionName, scene.RegionInfo.RegionID,
|
scene.RegionInfo.RegionName, scene.RegionInfo.RegionID,
|
||||||
scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY));
|
scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
regionID = LLUUID.Random();
|
regionID = LLUUID.Random();
|
||||||
m_log.DebugFormat("[RADMIN] CreateRegion: new region UUID {0}", regionID);
|
m_log.DebugFormat("[RADMIN] CreateRegion: new region UUID {0}", regionID);
|
||||||
|
@ -401,7 +385,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
||||||
|
|
||||||
// check for collisions: region name, region UUID,
|
// check for collisions: region name, region UUID,
|
||||||
// region location
|
// region location
|
||||||
if (m_app.SceneManager.TryGetScene(region.RegionName, out scene))
|
if (m_app.SceneManager.TryGetScene(region.RegionName, out scene))
|
||||||
throw new Exception(String.Format("region name already in use by region {0}, UUID {1}, <{2},{3}>",
|
throw new Exception(String.Format("region name already in use by region {0}, UUID {1}, <{2},{3}>",
|
||||||
scene.RegionInfo.RegionName, scene.RegionInfo.RegionID,
|
scene.RegionInfo.RegionName, scene.RegionInfo.RegionID,
|
||||||
scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY));
|
scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY));
|
||||||
|
@ -411,46 +395,46 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
||||||
region.RegionLocX, region.RegionLocY,
|
region.RegionLocX, region.RegionLocY,
|
||||||
scene.RegionInfo.RegionName, scene.RegionInfo.RegionID,
|
scene.RegionInfo.RegionName, scene.RegionInfo.RegionID,
|
||||||
scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY));
|
scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY));
|
||||||
|
|
||||||
// Security risk [and apparently not used]
|
// Security risk [and apparently not used]
|
||||||
// if (requestData.ContainsKey("datastore"))
|
// if (requestData.ContainsKey("datastore"))
|
||||||
// region.DataStore = (string) requestData["datastore"];
|
// region.DataStore = (string) requestData["datastore"];
|
||||||
|
|
||||||
region.InternalEndPoint =
|
region.InternalEndPoint =
|
||||||
new IPEndPoint(IPAddress.Parse((string) requestData["listen_ip"]), 0);
|
new IPEndPoint(IPAddress.Parse((string) requestData["listen_ip"]), 0);
|
||||||
|
|
||||||
region.InternalEndPoint.Port = (Int32) requestData["listen_port"];
|
region.InternalEndPoint.Port = (Int32) requestData["listen_port"];
|
||||||
if (0 == region.InternalEndPoint.Port) throw new Exception("listen_port is 0");
|
if (0 == region.InternalEndPoint.Port) throw new Exception("listen_port is 0");
|
||||||
if (m_app.SceneManager.TryGetScene(region.InternalEndPoint, out scene))
|
if (m_app.SceneManager.TryGetScene(region.InternalEndPoint, out scene))
|
||||||
throw new Exception(String.Format("region internal IP {0} and port {1} already in use by region {2}, UUID {3}, <{4},{5}>",
|
throw new Exception(String.Format("region internal IP {0} and port {1} already in use by region {2}, UUID {3}, <{4},{5}>",
|
||||||
region.InternalEndPoint.Address,
|
region.InternalEndPoint.Address,
|
||||||
region.InternalEndPoint.Port,
|
region.InternalEndPoint.Port,
|
||||||
scene.RegionInfo.RegionName, scene.RegionInfo.RegionID,
|
scene.RegionInfo.RegionName, scene.RegionInfo.RegionID,
|
||||||
scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY));
|
scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY));
|
||||||
|
|
||||||
|
|
||||||
region.ExternalHostName = (string) requestData["external_address"];
|
region.ExternalHostName = (string) requestData["external_address"];
|
||||||
|
|
||||||
region.MasterAvatarFirstName = (string) requestData["region_master_first"];
|
region.MasterAvatarFirstName = (string) requestData["region_master_first"];
|
||||||
region.MasterAvatarLastName = (string) requestData["region_master_last"];
|
region.MasterAvatarLastName = (string) requestData["region_master_last"];
|
||||||
region.MasterAvatarSandboxPassword = (string) requestData["region_master_password"];
|
region.MasterAvatarSandboxPassword = (string) requestData["region_master_password"];
|
||||||
|
|
||||||
bool persist = Convert.ToBoolean((string) requestData["persist"]);
|
bool persist = Convert.ToBoolean((string)requestData["persist"]);
|
||||||
if (persist)
|
if (persist)
|
||||||
{
|
{
|
||||||
string regionConfigPath = Path.Combine(Path.Combine(Util.configDir(), "Regions"),
|
string regionConfigPath = Path.Combine(Path.Combine(Util.configDir(), "Regions"),
|
||||||
String.Format("{0}x{1}-{2}.xml",
|
String.Format("{0}x{1}-{2}.xml",
|
||||||
region.RegionLocX,
|
region.RegionLocX.ToString(),
|
||||||
region.RegionLocY,
|
region.RegionLocY.ToString(),
|
||||||
regionID));
|
regionID.ToString()));
|
||||||
m_log.DebugFormat("[RADMIN] CreateRegion: persisting region {0} to {1}",
|
m_log.DebugFormat("[RADMIN] CreateRegion: persisting region {0} to {1}",
|
||||||
region.RegionID, regionConfigPath);
|
region.RegionID, regionConfigPath);
|
||||||
region.SaveRegionToFile("dynamic region", regionConfigPath);
|
region.SaveRegionToFile("dynamic region", regionConfigPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_app.CreateRegion(region);
|
m_app.CreateRegion(region);
|
||||||
|
|
||||||
responseData["success"] = "true";
|
responseData["success"] = "true";
|
||||||
responseData["region_name"] = region.RegionName;
|
responseData["region_name"] = region.RegionName;
|
||||||
responseData["region_uuid"] = region.RegionID.ToString();
|
responseData["region_uuid"] = region.RegionID.ToString();
|
||||||
|
|
||||||
|
@ -513,52 +497,48 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
||||||
Hashtable requestData = (Hashtable) request.Params[0];
|
Hashtable requestData = (Hashtable) request.Params[0];
|
||||||
Hashtable responseData = new Hashtable();
|
Hashtable responseData = new Hashtable();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// check completeness
|
// check completeness
|
||||||
checkStringParameters(request, new[]
|
checkStringParameters(request, new string[] { "password", "user_firstname",
|
||||||
{
|
"user_lastname", "user_password" });
|
||||||
"password", "user_firstname",
|
checkIntegerParams(request, new string[] { "start_region_x", "start_region_y" });
|
||||||
"user_lastname", "user_password"
|
|
||||||
});
|
|
||||||
checkIntegerParams(request, new[] {"start_region_x", "start_region_y"});
|
|
||||||
|
|
||||||
// check password
|
// check password
|
||||||
if (!String.IsNullOrEmpty(requiredPassword) &&
|
if (!String.IsNullOrEmpty(requiredPassword) &&
|
||||||
(string) requestData["password"] != requiredPassword) throw new Exception("wrong password");
|
(string)requestData["password"] != requiredPassword) throw new Exception("wrong password");
|
||||||
|
|
||||||
// do the job
|
// do the job
|
||||||
string firstname = (string) requestData["user_firstname"];
|
string firstname = (string) requestData["user_firstname"];
|
||||||
string lastname = (string) requestData["user_lastname"];
|
string lastname = (string) requestData["user_lastname"];
|
||||||
string passwd = (string) requestData["user_password"];
|
string passwd = (string) requestData["user_password"];
|
||||||
uint regX = Convert.ToUInt32((Int32) requestData["start_region_x"]);
|
uint regX = Convert.ToUInt32((Int32)requestData["start_region_x"]);
|
||||||
uint regY = Convert.ToUInt32((Int32) requestData["start_region_y"]);
|
uint regY = Convert.ToUInt32((Int32)requestData["start_region_y"]);
|
||||||
|
|
||||||
UserProfileData userProfile = m_app.CommunicationsManager.UserService.GetUserProfile(firstname, lastname);
|
UserProfileData userProfile = m_app.CommunicationsManager.UserService.GetUserProfile(firstname, lastname);
|
||||||
if (null != userProfile)
|
if (null != userProfile)
|
||||||
throw new Exception(String.Format("avatar {0} {1} already exists", firstname, lastname));
|
throw new Exception(String.Format("avatar {0} {1} already exists", firstname, lastname));
|
||||||
|
|
||||||
LLUUID userID = m_app.CreateUser(firstname, lastname, passwd, regX, regY);
|
LLUUID userID = m_app.CreateUser(firstname, lastname, passwd, regX, regY);
|
||||||
|
|
||||||
if (userID == LLUUID.Zero)
|
if (userID == LLUUID.Zero) throw new Exception(String.Format("failed to create new user {0} {1}",
|
||||||
throw new Exception(String.Format("failed to create new user {0} {1}",
|
firstname, lastname));
|
||||||
firstname, lastname));
|
|
||||||
|
responseData["success"] = "true";
|
||||||
responseData["success"] = "true";
|
|
||||||
responseData["avatar_uuid"] = userID.ToString();
|
responseData["avatar_uuid"] = userID.ToString();
|
||||||
|
|
||||||
response.Value = responseData;
|
response.Value = responseData;
|
||||||
|
|
||||||
m_log.InfoFormat("[RADMIN]: CreateUser: User {0} {1} created, UUID {2}", firstname, lastname, userID);
|
m_log.InfoFormat("[RADMIN]: CreateUser: User {0} {1} created, UUID {2}", firstname, lastname, userID);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[RADMIN] CreateUser: failed: {0}", e.Message);
|
m_log.ErrorFormat("[RADMIN] CreateUser: failed: {0}", e.Message);
|
||||||
m_log.DebugFormat("[RADMIN] CreateUser: failed: {0}", e.ToString());
|
m_log.DebugFormat("[RADMIN] CreateUser: failed: {0}", e.ToString());
|
||||||
|
|
||||||
responseData["success"] = "false";
|
responseData["success"] = "false";
|
||||||
responseData["avatar_uuid"] = LLUUID.Zero.ToString();
|
responseData["avatar_uuid"] = LLUUID.Zero.ToString();
|
||||||
responseData["error"] = e.Message;
|
responseData["error"] = e.Message;
|
||||||
|
|
||||||
response.Value = responseData;
|
response.Value = responseData;
|
||||||
}
|
}
|
||||||
|
@ -573,33 +553,33 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
||||||
Hashtable requestData = (Hashtable) request.Params[0];
|
Hashtable requestData = (Hashtable) request.Params[0];
|
||||||
Hashtable responseData = new Hashtable();
|
Hashtable responseData = new Hashtable();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// check completeness
|
// check completeness
|
||||||
foreach (string p in new[] {"password", "filename"})
|
foreach (string p in new string[] { "password", "filename" })
|
||||||
{
|
{
|
||||||
if (!requestData.Contains(p))
|
if (!requestData.Contains(p))
|
||||||
throw new Exception(String.Format("missing parameter {0}", p));
|
throw new Exception(String.Format("missing parameter {0}", p));
|
||||||
if (String.IsNullOrEmpty((string) requestData[p]))
|
if (String.IsNullOrEmpty((string)requestData[p]))
|
||||||
throw new Exception(String.Format("parameter {0} is empty"));
|
throw new Exception(String.Format("parameter {0} is empty"));
|
||||||
}
|
}
|
||||||
|
|
||||||
// check password
|
// check password
|
||||||
if (!String.IsNullOrEmpty(requiredPassword) &&
|
if (!String.IsNullOrEmpty(requiredPassword) &&
|
||||||
(string) requestData["password"] != requiredPassword) throw new Exception("wrong password");
|
(string)requestData["password"] != requiredPassword) throw new Exception("wrong password");
|
||||||
|
|
||||||
string filename = (string) requestData["filename"];
|
string filename = (string)requestData["filename"];
|
||||||
if (requestData.Contains("region_uuid"))
|
if (requestData.Contains("region_uuid"))
|
||||||
{
|
{
|
||||||
LLUUID region_uuid = (string) requestData["region_uuid"];
|
LLUUID region_uuid = (string)requestData["region_uuid"];
|
||||||
if (!m_app.SceneManager.TrySetCurrentScene(region_uuid))
|
if (!m_app.SceneManager.TrySetCurrentScene(region_uuid))
|
||||||
throw new Exception(String.Format("failed to switch to region {0}", region_uuid));
|
throw new Exception(String.Format("failed to switch to region {0}", region_uuid.ToString()));
|
||||||
m_log.InfoFormat("[RADMIN] Switched to region {0}", region_uuid.ToString());
|
m_log.InfoFormat("[RADMIN] Switched to region {0}", region_uuid.ToString());
|
||||||
}
|
}
|
||||||
else if (requestData.Contains("region_name"))
|
else if (requestData.Contains("region_name"))
|
||||||
{
|
{
|
||||||
string region_name = (string) requestData["region_name"];
|
string region_name = (string)requestData["region_name"];
|
||||||
if (!m_app.SceneManager.TrySetCurrentScene(region_name))
|
if (!m_app.SceneManager.TrySetCurrentScene(region_name))
|
||||||
throw new Exception(String.Format("failed to switch to region {0}", region_name));
|
throw new Exception(String.Format("failed to switch to region {0}", region_name));
|
||||||
m_log.InfoFormat("[RADMIN] Switched to region {0}", region_name);
|
m_log.InfoFormat("[RADMIN] Switched to region {0}", region_name);
|
||||||
}
|
}
|
||||||
|
@ -608,23 +588,27 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
||||||
responseData["switched"] = "true";
|
responseData["switched"] = "true";
|
||||||
|
|
||||||
m_app.SceneManager.LoadCurrentSceneFromXml(filename, true, new LLVector3(0, 0, 0));
|
m_app.SceneManager.LoadCurrentSceneFromXml(filename, true, new LLVector3(0, 0, 0));
|
||||||
responseData["loaded"] = "true";
|
responseData["loaded"] = "true";
|
||||||
|
|
||||||
response.Value = responseData;
|
response.Value = responseData;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.InfoFormat("[RADMIN] LoadXml: {0}", e.Message);
|
m_log.InfoFormat("[RADMIN] LoadXml: {0}", e.Message);
|
||||||
m_log.DebugFormat("[RADMIN] LoadXml: {0}", e.ToString());
|
m_log.DebugFormat("[RADMIN] LoadXml: {0}", e.ToString());
|
||||||
|
|
||||||
responseData["loaded"] = "false";
|
responseData["loaded"] = "false";
|
||||||
responseData["switched"] = "false";
|
responseData["switched"] = "false";
|
||||||
responseData["error"] = e.Message;
|
responseData["error"] = e.Message;
|
||||||
|
|
||||||
response.Value = responseData;
|
response.Value = responseData;
|
||||||
}
|
}
|
||||||
|
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Close()
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -70,7 +70,7 @@ namespace OpenSim.Data.MSSQL
|
||||||
|
|
||||||
override public AssetBase FetchAsset(LLUUID assetID)
|
override public AssetBase FetchAsset(LLUUID assetID)
|
||||||
{
|
{
|
||||||
AssetBase asset;
|
AssetBase asset = null;
|
||||||
|
|
||||||
Dictionary<string, string> param = new Dictionary<string, string>();
|
Dictionary<string, string> param = new Dictionary<string, string>();
|
||||||
param["id"] = assetID.ToString();
|
param["id"] = assetID.ToString();
|
||||||
|
|
|
@ -46,48 +46,14 @@ namespace OpenSim.Grid.AssetServer
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
public static OpenAsset_Main assetserver;
|
|
||||||
|
|
||||||
// Temporarily hardcoded - should be a plugin
|
|
||||||
protected IAssetLoader assetLoader = new AssetLoaderFileSystem();
|
|
||||||
|
|
||||||
private IAssetProvider m_assetProvider;
|
|
||||||
public AssetConfig m_config;
|
public AssetConfig m_config;
|
||||||
|
|
||||||
public OpenAsset_Main()
|
public static OpenAsset_Main assetserver;
|
||||||
{
|
|
||||||
m_console = new ConsoleBase("OpenAsset", this);
|
// Temporarily hardcoded - should be a plugin
|
||||||
|
protected IAssetLoader assetLoader = new AssetLoaderFileSystem();
|
||||||
MainConsole.Instance = m_console;
|
|
||||||
}
|
private IAssetProvider m_assetProvider;
|
||||||
|
|
||||||
#region conscmd_callback Members
|
|
||||||
|
|
||||||
public override void RunCmd(string cmd, string[] cmdparams)
|
|
||||||
{
|
|
||||||
base.RunCmd(cmd, cmdparams);
|
|
||||||
|
|
||||||
switch (cmd)
|
|
||||||
{
|
|
||||||
case "help":
|
|
||||||
m_console.Notice(
|
|
||||||
@"shutdown - shutdown this asset server (USE CAUTION!)
|
|
||||||
stats - statistical information for this server");
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "stats":
|
|
||||||
m_console.Notice("STATS", Environment.NewLine + StatsManager.AssetStats.Report());
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "shutdown":
|
|
||||||
m_console.Close();
|
|
||||||
Environment.Exit(0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
[STAThread]
|
[STAThread]
|
||||||
public static void Main(string[] args)
|
public static void Main(string[] args)
|
||||||
|
@ -112,6 +78,13 @@ namespace OpenSim.Grid.AssetServer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public OpenAsset_Main()
|
||||||
|
{
|
||||||
|
m_console = new ConsoleBase("OpenAsset", this);
|
||||||
|
|
||||||
|
MainConsole.Instance = m_console;
|
||||||
|
}
|
||||||
|
|
||||||
public void Startup()
|
public void Startup()
|
||||||
{
|
{
|
||||||
m_config = new AssetConfig("ASSET SERVER", (Path.Combine(Util.configDir(), "AssetServer_Config.xml")));
|
m_config = new AssetConfig("ASSET SERVER", (Path.Combine(Util.configDir(), "AssetServer_Config.xml")));
|
||||||
|
@ -187,18 +160,42 @@ namespace OpenSim.Grid.AssetServer
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.Warn("[ASSET]: setupDB() - Exception occured");
|
m_log.Warn("[ASSET]: setupDB() - Exception occured");
|
||||||
m_log.Warn("[ASSET]: " + e);
|
m_log.Warn("[ASSET]: " + e.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LoadDefaultAssets()
|
public void LoadDefaultAssets()
|
||||||
{
|
{
|
||||||
assetLoader.ForEachDefaultXmlAsset(StoreAsset);
|
assetLoader.ForEachDefaultXmlAsset(StoreAsset);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void StoreAsset(AssetBase asset)
|
protected void StoreAsset(AssetBase asset)
|
||||||
{
|
{
|
||||||
m_assetProvider.CreateAsset(asset);
|
m_assetProvider.CreateAsset(asset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void RunCmd(string cmd, string[] cmdparams)
|
||||||
|
{
|
||||||
|
base.RunCmd(cmd, cmdparams);
|
||||||
|
|
||||||
|
switch (cmd)
|
||||||
|
{
|
||||||
|
case "help":
|
||||||
|
m_console.Notice(
|
||||||
|
@"shutdown - shutdown this asset server (USE CAUTION!)
|
||||||
|
stats - statistical information for this server");
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "stats":
|
||||||
|
m_console.Notice("STATS", Environment.NewLine + StatsManager.AssetStats.Report());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "shutdown":
|
||||||
|
m_console.Close();
|
||||||
|
Environment.Exit(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,4 +60,4 @@ using System.Runtime.InteropServices;
|
||||||
//
|
//
|
||||||
|
|
||||||
[assembly : AssemblyVersion("1.0.0.0")]
|
[assembly : AssemblyVersion("1.0.0.0")]
|
||||||
[assembly : AssemblyFileVersion("1.0.0.0")]
|
[assembly : AssemblyFileVersion("1.0.0.0")]
|
||||||
|
|
|
@ -43,8 +43,8 @@ namespace OpenSim.Grid.AssetServer
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private readonly IAssetProvider m_assetProvider;
|
|
||||||
private OpenAsset_Main m_assetManager;
|
private OpenAsset_Main m_assetManager;
|
||||||
|
private IAssetProvider m_assetProvider;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructor.
|
/// Constructor.
|
||||||
|
@ -58,28 +58,28 @@ namespace OpenSim.Grid.AssetServer
|
||||||
m_assetManager = assetManager;
|
m_assetManager = assetManager;
|
||||||
m_assetProvider = assetProvider;
|
m_assetProvider = assetProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream request)
|
public override byte[] Handle(string path, Stream request)
|
||||||
{
|
{
|
||||||
string param = GetParam(path);
|
string param = GetParam(path);
|
||||||
byte[] result = new byte[] {};
|
byte[] result = new byte[] {};
|
||||||
|
|
||||||
string[] p = param.Split(new[] {'/', '?', '&'}, StringSplitOptions.RemoveEmptyEntries);
|
string[] p = param.Split(new char[] {'/', '?', '&'}, StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
|
||||||
if (p.Length > 0)
|
if (p.Length > 0)
|
||||||
{
|
{
|
||||||
LLUUID assetID = null;
|
LLUUID assetID = null;
|
||||||
|
|
||||||
if (!LLUUID.TryParse(p[0], out assetID))
|
if (!LLUUID.TryParse(p[0], out assetID))
|
||||||
{
|
{
|
||||||
m_log.InfoFormat(
|
m_log.InfoFormat(
|
||||||
"[REST]: GET:/asset ignoring request with malformed UUID {0}", p[0]);
|
"[REST]: GET:/asset ignoring request with malformed UUID {0}", p[0]);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (StatsManager.AssetStats != null)
|
if (StatsManager.AssetStats != null)
|
||||||
StatsManager.AssetStats.AddRequest();
|
StatsManager.AssetStats.AddRequest();
|
||||||
|
|
||||||
AssetBase asset = m_assetProvider.FetchAsset(assetID);
|
AssetBase asset = m_assetProvider.FetchAsset(assetID);
|
||||||
if (asset != null)
|
if (asset != null)
|
||||||
{
|
{
|
||||||
|
@ -94,39 +94,32 @@ namespace OpenSim.Grid.AssetServer
|
||||||
//StreamReader sr = new StreamReader(ms);
|
//StreamReader sr = new StreamReader(ms);
|
||||||
|
|
||||||
result = ms.GetBuffer();
|
result = ms.GetBuffer();
|
||||||
|
|
||||||
m_log.InfoFormat(
|
m_log.InfoFormat(
|
||||||
"[REST]: GET:/asset found {0} with name {1}, size {2} bytes",
|
"[REST]: GET:/asset found {0} with name {1}, size {2} bytes",
|
||||||
assetID, asset.Name, result.Length);
|
assetID, asset.Name, result.Length);
|
||||||
|
|
||||||
Array.Resize(ref result, (int) ms.Length);
|
Array.Resize<byte>(ref result, (int) ms.Length);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (StatsManager.AssetStats != null)
|
if (StatsManager.AssetStats != null)
|
||||||
StatsManager.AssetStats.AddNotFoundRequest();
|
StatsManager.AssetStats.AddNotFoundRequest();
|
||||||
|
|
||||||
m_log.InfoFormat("[REST]: GET:/asset failed to find {0}", assetID);
|
m_log.InfoFormat("[REST]: GET:/asset failed to find {0}", assetID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class PostAssetStreamHandler : BaseStreamHandler
|
public class PostAssetStreamHandler : BaseStreamHandler
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private readonly IAssetProvider m_assetProvider;
|
|
||||||
private OpenAsset_Main m_assetManager;
|
private OpenAsset_Main m_assetManager;
|
||||||
|
private IAssetProvider m_assetProvider;
|
||||||
public PostAssetStreamHandler(OpenAsset_Main assetManager, IAssetProvider assetProvider)
|
|
||||||
: base("POST", "/assets")
|
|
||||||
{
|
|
||||||
m_assetManager = assetManager;
|
|
||||||
m_assetProvider = assetProvider;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream request)
|
public override byte[] Handle(string path, Stream request)
|
||||||
{
|
{
|
||||||
|
@ -146,5 +139,12 @@ namespace OpenSim.Grid.AssetServer
|
||||||
|
|
||||||
return new byte[] {};
|
return new byte[] {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PostAssetStreamHandler(OpenAsset_Main assetManager, IAssetProvider assetProvider)
|
||||||
|
: base("POST", "/assets")
|
||||||
|
{
|
||||||
|
m_assetManager = assetManager;
|
||||||
|
m_assetProvider = assetProvider;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,11 +44,11 @@ namespace OpenSim.Grid.GridServer
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private readonly Dictionary<string, ILogData> _logplugins = new Dictionary<string, ILogData>();
|
private Dictionary<string, IGridData> _plugins = new Dictionary<string, IGridData>();
|
||||||
|
private Dictionary<string, ILogData> _logplugins = new Dictionary<string, ILogData>();
|
||||||
|
|
||||||
// This is here so that the grid server can hand out MessageServer settings to regions on registration
|
// This is here so that the grid server can hand out MessageServer settings to regions on registration
|
||||||
private readonly List<MessageServerInfo> _MessageServers = new List<MessageServerInfo>();
|
private List<MessageServerInfo> _MessageServers = new List<MessageServerInfo>();
|
||||||
private readonly Dictionary<string, IGridData> _plugins = new Dictionary<string, IGridData>();
|
|
||||||
|
|
||||||
public GridConfig Config;
|
public GridConfig Config;
|
||||||
|
|
||||||
|
@ -72,7 +72,7 @@ namespace OpenSim.Grid.GridServer
|
||||||
if (typeInterface != null)
|
if (typeInterface != null)
|
||||||
{
|
{
|
||||||
IGridData plug =
|
IGridData plug =
|
||||||
(IGridData) Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
|
(IGridData)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
|
||||||
plug.Initialise();
|
plug.Initialise();
|
||||||
_plugins.Add(plug.getName(), plug);
|
_plugins.Add(plug.getName(), plug);
|
||||||
m_log.Info("[DATA]: Added IGridData Interface");
|
m_log.Info("[DATA]: Added IGridData Interface");
|
||||||
|
@ -84,7 +84,7 @@ namespace OpenSim.Grid.GridServer
|
||||||
if (typeInterface != null)
|
if (typeInterface != null)
|
||||||
{
|
{
|
||||||
ILogData plug =
|
ILogData plug =
|
||||||
(ILogData) Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
|
(ILogData)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
|
||||||
plug.Initialise();
|
plug.Initialise();
|
||||||
_logplugins.Add(plug.getName(), plug);
|
_logplugins.Add(plug.getName(), plug);
|
||||||
m_log.Info("[DATA]: Added ILogData Interface");
|
m_log.Info("[DATA]: Added ILogData Interface");
|
||||||
|
@ -152,7 +152,7 @@ namespace OpenSim.Grid.GridServer
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
m_log.Warn("[storage]: Unable to find region " + handle + " via " + kvp.Key);
|
m_log.Warn("[storage]: Unable to find region " + handle.ToString() + " via " + kvp.Key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
@ -218,20 +218,20 @@ namespace OpenSim.Grid.GridServer
|
||||||
{
|
{
|
||||||
if (
|
if (
|
||||||
GetRegion(
|
GetRegion(
|
||||||
Util.UIntsToLong((uint) ((central_region.regionLocX + x) * Constants.RegionSize),
|
Util.UIntsToLong((uint)((central_region.regionLocX + x) * Constants.RegionSize),
|
||||||
(uint) (central_region.regionLocY + y) * Constants.RegionSize)) != null)
|
(uint)(central_region.regionLocY + y) * Constants.RegionSize)) != null)
|
||||||
{
|
{
|
||||||
neighbour =
|
neighbour =
|
||||||
GetRegion(
|
GetRegion(
|
||||||
Util.UIntsToLong((uint) ((central_region.regionLocX + x) * Constants.RegionSize),
|
Util.UIntsToLong((uint)((central_region.regionLocX + x) * Constants.RegionSize),
|
||||||
(uint) (central_region.regionLocY + y) * Constants.RegionSize));
|
(uint)(central_region.regionLocY + y) * Constants.RegionSize));
|
||||||
|
|
||||||
response += "<neighbour>";
|
response += "<neighbour>";
|
||||||
response += "<sim_ip>" + neighbour.serverIP + "</sim_ip>";
|
response += "<sim_ip>" + neighbour.serverIP + "</sim_ip>";
|
||||||
response += "<sim_port>" + neighbour.serverPort + "</sim_port>";
|
response += "<sim_port>" + neighbour.serverPort.ToString() + "</sim_port>";
|
||||||
response += "<locx>" + neighbour.regionLocX + "</locx>";
|
response += "<locx>" + neighbour.regionLocX.ToString() + "</locx>";
|
||||||
response += "<locy>" + neighbour.regionLocY + "</locy>";
|
response += "<locy>" + neighbour.regionLocY.ToString() + "</locy>";
|
||||||
response += "<regionhandle>" + neighbour.regionHandle + "</regionhandle>";
|
response += "<regionhandle>" + neighbour.regionHandle.ToString() + "</regionhandle>";
|
||||||
response += "</neighbour>";
|
response += "</neighbour>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -287,10 +287,10 @@ namespace OpenSim.Grid.GridServer
|
||||||
RegionProfileData sim;
|
RegionProfileData sim;
|
||||||
RegionProfileData existingSim;
|
RegionProfileData existingSim;
|
||||||
|
|
||||||
Hashtable requestData = (Hashtable) request.Params[0];
|
Hashtable requestData = (Hashtable)request.Params[0];
|
||||||
LLUUID uuid;
|
LLUUID uuid;
|
||||||
|
|
||||||
if (!requestData.ContainsKey("UUID") || !LLUUID.TryParse((string) requestData["UUID"], out uuid))
|
if (!requestData.ContainsKey("UUID") || !LLUUID.TryParse((string)requestData["UUID"], out uuid))
|
||||||
{
|
{
|
||||||
m_log.Info("[GRID]: Region connected without a UUID, ignoring.");
|
m_log.Info("[GRID]: Region connected without a UUID, ignoring.");
|
||||||
return ErrorResponse("No UUID passed to grid server - unable to connect you");
|
return ErrorResponse("No UUID passed to grid server - unable to connect you");
|
||||||
|
@ -303,7 +303,7 @@ namespace OpenSim.Grid.GridServer
|
||||||
catch (FormatException e)
|
catch (FormatException e)
|
||||||
{
|
{
|
||||||
m_log.Info("[GRID]: Invalid login parameters, ignoring.");
|
m_log.Info("[GRID]: Invalid login parameters, ignoring.");
|
||||||
return ErrorResponse("Wrong format in login parameters. Please verify parameters." + e);
|
return ErrorResponse("Wrong format in login parameters. Please verify parameters." + e.ToString() );
|
||||||
}
|
}
|
||||||
|
|
||||||
existingSim = GetRegion(sim.regionHandle);
|
existingSim = GetRegion(sim.regionHandle);
|
||||||
|
@ -329,7 +329,7 @@ namespace OpenSim.Grid.GridServer
|
||||||
{
|
{
|
||||||
DataResponse insertResponse;
|
DataResponse insertResponse;
|
||||||
|
|
||||||
if (existingSim == null)
|
if( existingSim == null )
|
||||||
{
|
{
|
||||||
insertResponse = kvp.Value.AddProfile(sim);
|
insertResponse = kvp.Value.AddProfile(sim);
|
||||||
}
|
}
|
||||||
|
@ -348,20 +348,20 @@ namespace OpenSim.Grid.GridServer
|
||||||
break;
|
break;
|
||||||
case DataResponse.RESPONSE_INVALIDCREDENTIALS:
|
case DataResponse.RESPONSE_INVALIDCREDENTIALS:
|
||||||
m_log.Warn("[storage]: " +
|
m_log.Warn("[storage]: " +
|
||||||
"New sim creation failed (Invalid Credentials): " + sim.regionName);
|
"New sim creation failed (Invalid Credentials): " + sim.regionName);
|
||||||
break;
|
break;
|
||||||
case DataResponse.RESPONSE_AUTHREQUIRED:
|
case DataResponse.RESPONSE_AUTHREQUIRED:
|
||||||
m_log.Warn("[storage]: " +
|
m_log.Warn("[storage]: " +
|
||||||
"New sim creation failed (Authentication Required): " +
|
"New sim creation failed (Authentication Required): " +
|
||||||
sim.regionName);
|
sim.regionName);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.Warn("[storage]: " +
|
m_log.Warn("[storage]: " +
|
||||||
"Unable to add region " + sim.UUID + " via " + kvp.Key);
|
"Unable to add region " + sim.UUID.ToString() + " via " + kvp.Key);
|
||||||
m_log.Warn("[storage]: " + e);
|
m_log.Warn("[storage]: " + e.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -375,8 +375,7 @@ namespace OpenSim.Grid.GridServer
|
||||||
{
|
{
|
||||||
m_log.Warn("[grid]: Authentication failed when trying to add new region " + sim.regionName +
|
m_log.Warn("[grid]: Authentication failed when trying to add new region " + sim.regionName +
|
||||||
" at location " + sim.regionLocX +
|
" at location " + sim.regionLocX +
|
||||||
" " + sim.regionLocY + " with TheSim.regionRecvKey " + sim.regionRecvKey + "(" + Config.SimSendKey +
|
" " + sim.regionLocY + " with TheSim.regionRecvKey " + sim.regionRecvKey + "(" + Config.SimSendKey + ") and TheSim.regionRecvKey " + sim.regionSendKey + "(" + Config.SimRecvKey + ") ");
|
||||||
") and TheSim.regionRecvKey " + sim.regionSendKey + "(" + Config.SimRecvKey + ") ");
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -390,8 +389,7 @@ namespace OpenSim.Grid.GridServer
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.Warn("[grid]: Failed to add new region " + sim.regionName + " at location " + sim.regionLocX + " " + sim.regionLocY +
|
m_log.Warn("[grid]: Failed to add new region " + sim.regionName + " at location " + sim.regionLocX + " " + sim.regionLocY + " currently occupied by " + existingSim.regionName);
|
||||||
" currently occupied by " + existingSim.regionName);
|
|
||||||
return ErrorResponse("Another region already exists at that location. Try another");
|
return ErrorResponse("Another region already exists at that location. Try another");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -466,7 +464,7 @@ namespace OpenSim.Grid.GridServer
|
||||||
foreach (KeyValuePair<ulong, RegionProfileData> aSim in neighbours)
|
foreach (KeyValuePair<ulong, RegionProfileData> aSim in neighbours)
|
||||||
{
|
{
|
||||||
NeighbourBlock = new Hashtable();
|
NeighbourBlock = new Hashtable();
|
||||||
NeighbourBlock["sim_ip"] = Util.GetHostFromDNS(aSim.Value.serverIP).ToString();
|
NeighbourBlock["sim_ip"] = Util.GetHostFromDNS(aSim.Value.serverIP.ToString()).ToString();
|
||||||
NeighbourBlock["sim_port"] = aSim.Value.serverPort.ToString();
|
NeighbourBlock["sim_port"] = aSim.Value.serverPort.ToString();
|
||||||
NeighbourBlock["region_locx"] = aSim.Value.regionLocX.ToString();
|
NeighbourBlock["region_locx"] = aSim.Value.regionLocX.ToString();
|
||||||
NeighbourBlock["region_locy"] = aSim.Value.regionLocY.ToString();
|
NeighbourBlock["region_locy"] = aSim.Value.regionLocY.ToString();
|
||||||
|
@ -487,13 +485,13 @@ namespace OpenSim.Grid.GridServer
|
||||||
{
|
{
|
||||||
if (
|
if (
|
||||||
GetRegion(
|
GetRegion(
|
||||||
Helpers.UIntsToLong((uint) ((sim.regionLocX + x) * Constants.RegionSize),
|
Helpers.UIntsToLong((uint)((sim.regionLocX + x) * Constants.RegionSize),
|
||||||
(uint) (sim.regionLocY + y) * Constants.RegionSize)) != null)
|
(uint)(sim.regionLocY + y) * Constants.RegionSize)) != null)
|
||||||
{
|
{
|
||||||
neighbour =
|
neighbour =
|
||||||
GetRegion(
|
GetRegion(
|
||||||
Helpers.UIntsToLong((uint) ((sim.regionLocX + x) * Constants.RegionSize),
|
Helpers.UIntsToLong((uint)((sim.regionLocX + x) * Constants.RegionSize),
|
||||||
(uint) (sim.regionLocY + y) * Constants.RegionSize));
|
(uint)(sim.regionLocY + y) * Constants.RegionSize));
|
||||||
|
|
||||||
NeighbourBlock = new Hashtable();
|
NeighbourBlock = new Hashtable();
|
||||||
NeighbourBlock["sim_ip"] = Util.GetHostFromDNS(neighbour.serverIP).ToString();
|
NeighbourBlock["sim_ip"] = Util.GetHostFromDNS(neighbour.serverIP).ToString();
|
||||||
|
@ -521,26 +519,27 @@ namespace OpenSim.Grid.GridServer
|
||||||
RegionProfileData sim;
|
RegionProfileData sim;
|
||||||
sim = new RegionProfileData();
|
sim = new RegionProfileData();
|
||||||
|
|
||||||
sim.UUID = new LLUUID((string) requestData["UUID"]);
|
sim.UUID = new LLUUID((string)requestData["UUID"]);
|
||||||
sim.originUUID = new LLUUID((string) requestData["originUUID"]);
|
sim.originUUID = new LLUUID((string)requestData["originUUID"]);
|
||||||
|
|
||||||
sim.regionRecvKey = String.Empty;
|
sim.regionRecvKey = String.Empty;
|
||||||
sim.regionSendKey = String.Empty;
|
sim.regionSendKey = String.Empty;
|
||||||
|
|
||||||
if (requestData.ContainsKey("region_secret"))
|
if (requestData.ContainsKey("region_secret"))
|
||||||
{
|
{
|
||||||
string regionsecret = (string) requestData["region_secret"];
|
string regionsecret = (string)requestData["region_secret"];
|
||||||
if (regionsecret.Length > 0)
|
if (regionsecret.Length > 0)
|
||||||
sim.regionSecret = regionsecret;
|
sim.regionSecret = regionsecret;
|
||||||
else
|
else
|
||||||
sim.regionSecret = Config.SimRecvKey;
|
sim.regionSecret = Config.SimRecvKey;
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sim.regionSecret = Config.SimRecvKey;
|
sim.regionSecret = Config.SimRecvKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
sim.regionDataURI = String.Empty;
|
sim.regionDataURI = String.Empty;
|
||||||
sim.regionAssetURI = Config.DefaultAssetServer;
|
sim.regionAssetURI = Config.DefaultAssetServer;
|
||||||
sim.regionAssetRecvKey = Config.AssetRecvKey;
|
sim.regionAssetRecvKey = Config.AssetRecvKey;
|
||||||
|
@ -549,16 +548,16 @@ namespace OpenSim.Grid.GridServer
|
||||||
sim.regionUserSendKey = Config.UserSendKey;
|
sim.regionUserSendKey = Config.UserSendKey;
|
||||||
sim.regionUserRecvKey = Config.UserRecvKey;
|
sim.regionUserRecvKey = Config.UserRecvKey;
|
||||||
|
|
||||||
sim.serverIP = (string) requestData["sim_ip"];
|
sim.serverIP = (string)requestData["sim_ip"];
|
||||||
sim.serverPort = Convert.ToUInt32((string) requestData["sim_port"]);
|
sim.serverPort = Convert.ToUInt32((string)requestData["sim_port"]);
|
||||||
sim.httpPort = Convert.ToUInt32((string) requestData["http_port"]);
|
sim.httpPort = Convert.ToUInt32((string)requestData["http_port"]);
|
||||||
sim.remotingPort = Convert.ToUInt32((string) requestData["remoting_port"]);
|
sim.remotingPort = Convert.ToUInt32((string)requestData["remoting_port"]);
|
||||||
sim.regionLocX = Convert.ToUInt32((string) requestData["region_locx"]);
|
sim.regionLocX = Convert.ToUInt32((string)requestData["region_locx"]);
|
||||||
sim.regionLocY = Convert.ToUInt32((string) requestData["region_locy"]);
|
sim.regionLocY = Convert.ToUInt32((string)requestData["region_locy"]);
|
||||||
sim.regionLocZ = 0;
|
sim.regionLocZ = 0;
|
||||||
|
|
||||||
LLUUID textureID;
|
LLUUID textureID;
|
||||||
if (LLUUID.TryParse((string) requestData["map-image-id"], out textureID))
|
if (LLUUID.TryParse((string)requestData["map-image-id"], out textureID))
|
||||||
{
|
{
|
||||||
sim.regionMapTextureID = textureID;
|
sim.regionMapTextureID = textureID;
|
||||||
}
|
}
|
||||||
|
@ -571,23 +570,21 @@ namespace OpenSim.Grid.GridServer
|
||||||
//
|
//
|
||||||
// this particular section of the mod attempts to receive a value from the region's xml file by way of
|
// this particular section of the mod attempts to receive a value from the region's xml file by way of
|
||||||
// OSG1GridServices for the region's owner
|
// OSG1GridServices for the region's owner
|
||||||
sim.owner_uuid = (string) requestData["master_avatar_uuid"];
|
sim.owner_uuid = (string)requestData["master_avatar_uuid"];
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
sim.regionRecvKey = (string) requestData["recvkey"];
|
sim.regionRecvKey = (string)requestData["recvkey"];
|
||||||
sim.regionSendKey = (string) requestData["authkey"];
|
sim.regionSendKey = (string)requestData["authkey"];
|
||||||
}
|
|
||||||
catch (KeyNotFoundException)
|
|
||||||
{
|
|
||||||
}
|
}
|
||||||
|
catch (KeyNotFoundException) { }
|
||||||
|
|
||||||
sim.regionHandle = Helpers.UIntsToLong((sim.regionLocX * Constants.RegionSize), (sim.regionLocY * Constants.RegionSize));
|
sim.regionHandle = Helpers.UIntsToLong((sim.regionLocX * Constants.RegionSize), (sim.regionLocY * Constants.RegionSize));
|
||||||
sim.serverURI = (string) requestData["server_uri"];
|
sim.serverURI = (string)requestData["server_uri"];
|
||||||
|
|
||||||
sim.httpServerURI = "http://" + sim.serverIP + ":" + sim.httpPort + "/";
|
sim.httpServerURI = "http://" + sim.serverIP + ":" + sim.httpPort + "/";
|
||||||
|
|
||||||
sim.regionName = (string) requestData["sim_name"];
|
sim.regionName = (string)requestData["sim_name"];
|
||||||
return sim;
|
return sim;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -607,7 +604,7 @@ namespace OpenSim.Grid.GridServer
|
||||||
|
|
||||||
//RegionProfileData TheSim = null;
|
//RegionProfileData TheSim = null;
|
||||||
string uuid;
|
string uuid;
|
||||||
Hashtable requestData = (Hashtable) request.Params[0];
|
Hashtable requestData = (Hashtable)request.Params[0];
|
||||||
|
|
||||||
if (requestData.ContainsKey("UUID"))
|
if (requestData.ContainsKey("UUID"))
|
||||||
{
|
{
|
||||||
|
@ -627,7 +624,7 @@ namespace OpenSim.Grid.GridServer
|
||||||
//OpenSim.Data.MySQL.MySQLGridData dbengine = new OpenSim.Data.MySQL.MySQLGridData();
|
//OpenSim.Data.MySQL.MySQLGridData dbengine = new OpenSim.Data.MySQL.MySQLGridData();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
MySQLGridData mysqldata = (MySQLGridData) (kvp.Value);
|
MySQLGridData mysqldata = (MySQLGridData)(kvp.Value);
|
||||||
//DataResponse insertResponse = mysqldata.DeleteProfile(TheSim);
|
//DataResponse insertResponse = mysqldata.DeleteProfile(TheSim);
|
||||||
DataResponse insertResponse = mysqldata.DeleteProfile(uuid);
|
DataResponse insertResponse = mysqldata.DeleteProfile(uuid);
|
||||||
switch (insertResponse)
|
switch (insertResponse)
|
||||||
|
@ -667,22 +664,22 @@ namespace OpenSim.Grid.GridServer
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public XmlRpcResponse XmlRpcSimulatorDataRequestMethod(XmlRpcRequest request)
|
public XmlRpcResponse XmlRpcSimulatorDataRequestMethod(XmlRpcRequest request)
|
||||||
{
|
{
|
||||||
Hashtable requestData = (Hashtable) request.Params[0];
|
Hashtable requestData = (Hashtable)request.Params[0];
|
||||||
Hashtable responseData = new Hashtable();
|
Hashtable responseData = new Hashtable();
|
||||||
RegionProfileData simData = null;
|
RegionProfileData simData = null;
|
||||||
if (requestData.ContainsKey("region_UUID"))
|
if (requestData.ContainsKey("region_UUID"))
|
||||||
{
|
{
|
||||||
simData = GetRegion(new LLUUID((string) requestData["region_UUID"]));
|
simData = GetRegion(new LLUUID((string)requestData["region_UUID"]));
|
||||||
}
|
}
|
||||||
else if (requestData.ContainsKey("region_handle"))
|
else if (requestData.ContainsKey("region_handle"))
|
||||||
{
|
{
|
||||||
//CFK: The if/else below this makes this message redundant.
|
//CFK: The if/else below this makes this message redundant.
|
||||||
//CFK: Console.WriteLine("requesting data for region " + (string) requestData["region_handle"]);
|
//CFK: Console.WriteLine("requesting data for region " + (string) requestData["region_handle"]);
|
||||||
simData = GetRegion(Convert.ToUInt64((string) requestData["region_handle"]));
|
simData = GetRegion(Convert.ToUInt64((string)requestData["region_handle"]));
|
||||||
}
|
}
|
||||||
else if (requestData.ContainsKey("region_name_search"))
|
else if (requestData.ContainsKey("region_name_search"))
|
||||||
{
|
{
|
||||||
simData = GetRegion((string) requestData["region_name_search"]);
|
simData = GetRegion((string)requestData["region_name_search"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (simData == null)
|
if (simData == null)
|
||||||
|
@ -693,8 +690,8 @@ namespace OpenSim.Grid.GridServer
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.Info("[DATA]: found " + simData.regionName + " regionHandle = " +
|
m_log.Info("[DATA]: found " + (string)simData.regionName + " regionHandle = " +
|
||||||
(string) requestData["region_handle"]);
|
(string)requestData["region_handle"]);
|
||||||
responseData["sim_ip"] = Util.GetHostFromDNS(simData.serverIP).ToString();
|
responseData["sim_ip"] = Util.GetHostFromDNS(simData.serverIP).ToString();
|
||||||
responseData["sim_port"] = simData.serverPort.ToString();
|
responseData["sim_port"] = simData.serverPort.ToString();
|
||||||
responseData["server_uri"] = simData.serverURI;
|
responseData["server_uri"] = simData.serverURI;
|
||||||
|
@ -716,22 +713,22 @@ namespace OpenSim.Grid.GridServer
|
||||||
{
|
{
|
||||||
int xmin = 980, ymin = 980, xmax = 1020, ymax = 1020;
|
int xmin = 980, ymin = 980, xmax = 1020, ymax = 1020;
|
||||||
|
|
||||||
Hashtable requestData = (Hashtable) request.Params[0];
|
Hashtable requestData = (Hashtable)request.Params[0];
|
||||||
if (requestData.ContainsKey("xmin"))
|
if (requestData.ContainsKey("xmin"))
|
||||||
{
|
{
|
||||||
xmin = (Int32) requestData["xmin"];
|
xmin = (Int32)requestData["xmin"];
|
||||||
}
|
}
|
||||||
if (requestData.ContainsKey("ymin"))
|
if (requestData.ContainsKey("ymin"))
|
||||||
{
|
{
|
||||||
ymin = (Int32) requestData["ymin"];
|
ymin = (Int32)requestData["ymin"];
|
||||||
}
|
}
|
||||||
if (requestData.ContainsKey("xmax"))
|
if (requestData.ContainsKey("xmax"))
|
||||||
{
|
{
|
||||||
xmax = (Int32) requestData["xmax"];
|
xmax = (Int32)requestData["xmax"];
|
||||||
}
|
}
|
||||||
if (requestData.ContainsKey("ymax"))
|
if (requestData.ContainsKey("ymax"))
|
||||||
{
|
{
|
||||||
ymax = (Int32) requestData["ymax"];
|
ymax = (Int32)requestData["ymax"];
|
||||||
}
|
}
|
||||||
//CFK: The second log is more meaningful and either standard or fast generally occurs.
|
//CFK: The second log is more meaningful and either standard or fast generally occurs.
|
||||||
//CFK: m_log.Info("[MAP]: World map request for range (" + xmin + "," + ymin + ")..(" + xmax + "," + ymax + ")");
|
//CFK: m_log.Info("[MAP]: World map request for range (" + xmin + "," + ymin + ")..(" + xmax + "," + ymax + ")");
|
||||||
|
@ -746,15 +743,15 @@ namespace OpenSim.Grid.GridServer
|
||||||
if (fastMode)
|
if (fastMode)
|
||||||
{
|
{
|
||||||
Dictionary<ulong, RegionProfileData> neighbours =
|
Dictionary<ulong, RegionProfileData> neighbours =
|
||||||
GetRegions((uint) xmin, (uint) ymin, (uint) xmax, (uint) ymax);
|
GetRegions((uint)xmin, (uint)ymin, (uint)xmax, (uint)ymax);
|
||||||
|
|
||||||
foreach (KeyValuePair<ulong, RegionProfileData> aSim in neighbours)
|
foreach (KeyValuePair<ulong, RegionProfileData> aSim in neighbours)
|
||||||
{
|
{
|
||||||
Hashtable simProfileBlock = new Hashtable();
|
Hashtable simProfileBlock = new Hashtable();
|
||||||
simProfileBlock["x"] = aSim.Value.regionLocX.ToString();
|
simProfileBlock["x"] = aSim.Value.regionLocX.ToString();
|
||||||
simProfileBlock["y"] = aSim.Value.regionLocY.ToString();
|
simProfileBlock["y"] = aSim.Value.regionLocY.ToString();
|
||||||
Console.WriteLine("send neighbour info for " + aSim.Value.regionLocX + " , " +
|
Console.WriteLine("send neighbour info for " + aSim.Value.regionLocX.ToString() + " , " +
|
||||||
aSim.Value.regionLocY);
|
aSim.Value.regionLocY.ToString());
|
||||||
simProfileBlock["name"] = aSim.Value.regionName;
|
simProfileBlock["name"] = aSim.Value.regionName;
|
||||||
simProfileBlock["access"] = 21;
|
simProfileBlock["access"] = 21;
|
||||||
simProfileBlock["region-flags"] = 512;
|
simProfileBlock["region-flags"] = 512;
|
||||||
|
@ -764,15 +761,15 @@ namespace OpenSim.Grid.GridServer
|
||||||
|
|
||||||
// For Sugilite compatibility
|
// For Sugilite compatibility
|
||||||
simProfileBlock["regionhandle"] = aSim.Value.regionHandle.ToString();
|
simProfileBlock["regionhandle"] = aSim.Value.regionHandle.ToString();
|
||||||
simProfileBlock["sim_ip"] = aSim.Value.serverIP;
|
simProfileBlock["sim_ip"] = aSim.Value.serverIP.ToString();
|
||||||
simProfileBlock["sim_port"] = aSim.Value.serverPort.ToString();
|
simProfileBlock["sim_port"] = aSim.Value.serverPort.ToString();
|
||||||
simProfileBlock["sim_uri"] = aSim.Value.serverURI;
|
simProfileBlock["sim_uri"] = aSim.Value.serverURI.ToString();
|
||||||
simProfileBlock["uuid"] = aSim.Value.UUID.ToString();
|
simProfileBlock["uuid"] = aSim.Value.UUID.ToString();
|
||||||
simProfileBlock["remoting_port"] = aSim.Value.remotingPort;
|
simProfileBlock["remoting_port"] = aSim.Value.remotingPort;
|
||||||
|
|
||||||
simProfileList.Add(simProfileBlock);
|
simProfileList.Add(simProfileBlock);
|
||||||
}
|
}
|
||||||
m_log.Info("[MAP]: Fast map " + simProfileList.Count +
|
m_log.Info("[MAP]: Fast map " + simProfileList.Count.ToString() +
|
||||||
" regions @ (" + xmin + "," + ymin + ")..(" + xmax + "," + ymax + ")");
|
" regions @ (" + xmin + "," + ymin + ")..(" + xmax + "," + ymax + ")");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -782,7 +779,7 @@ namespace OpenSim.Grid.GridServer
|
||||||
{
|
{
|
||||||
for (int y = ymin; y < ymax + 1; y++)
|
for (int y = ymin; y < ymax + 1; y++)
|
||||||
{
|
{
|
||||||
ulong regHandle = Helpers.UIntsToLong((uint) (x * Constants.RegionSize), (uint) (y * Constants.RegionSize));
|
ulong regHandle = Helpers.UIntsToLong((uint)(x * Constants.RegionSize), (uint)(y * Constants.RegionSize));
|
||||||
simProfile = GetRegion(regHandle);
|
simProfile = GetRegion(regHandle);
|
||||||
if (simProfile != null)
|
if (simProfile != null)
|
||||||
{
|
{
|
||||||
|
@ -798,16 +795,16 @@ namespace OpenSim.Grid.GridServer
|
||||||
|
|
||||||
// For Sugilite compatibility
|
// For Sugilite compatibility
|
||||||
simProfileBlock["regionhandle"] = simProfile.regionHandle.ToString();
|
simProfileBlock["regionhandle"] = simProfile.regionHandle.ToString();
|
||||||
simProfileBlock["sim_ip"] = simProfile.serverIP;
|
simProfileBlock["sim_ip"] = simProfile.serverIP.ToString();
|
||||||
simProfileBlock["sim_port"] = simProfile.serverPort.ToString();
|
simProfileBlock["sim_port"] = simProfile.serverPort.ToString();
|
||||||
simProfileBlock["sim_uri"] = simProfile.serverURI;
|
simProfileBlock["sim_uri"] = simProfile.serverURI.ToString();
|
||||||
simProfileBlock["uuid"] = simProfile.UUID.ToString();
|
simProfileBlock["uuid"] = simProfile.UUID.ToString();
|
||||||
|
|
||||||
simProfileList.Add(simProfileBlock);
|
simProfileList.Add(simProfileBlock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_log.Info("[MAP]: Std map " + simProfileList.Count +
|
m_log.Info("[MAP]: Std map " + simProfileList.Count.ToString() +
|
||||||
" regions @ (" + xmin + "," + ymin + ")..(" + xmax + "," + ymax + ")");
|
" regions @ (" + xmin + "," + ymin + ")..(" + xmax + "," + ymax + ")");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -863,12 +860,12 @@ namespace OpenSim.Grid.GridServer
|
||||||
respstring = "<Root>";
|
respstring = "<Root>";
|
||||||
respstring += "<authkey>" + TheSim.regionSendKey + "</authkey>";
|
respstring += "<authkey>" + TheSim.regionSendKey + "</authkey>";
|
||||||
respstring += "<sim>";
|
respstring += "<sim>";
|
||||||
respstring += "<uuid>" + TheSim.UUID + "</uuid>";
|
respstring += "<uuid>" + TheSim.UUID.ToString() + "</uuid>";
|
||||||
respstring += "<regionname>" + TheSim.regionName + "</regionname>";
|
respstring += "<regionname>" + TheSim.regionName + "</regionname>";
|
||||||
respstring += "<sim_ip>" + Util.GetHostFromDNS(TheSim.serverIP) + "</sim_ip>";
|
respstring += "<sim_ip>" + Util.GetHostFromDNS(TheSim.serverIP).ToString() + "</sim_ip>";
|
||||||
respstring += "<sim_port>" + TheSim.serverPort + "</sim_port>";
|
respstring += "<sim_port>" + TheSim.serverPort.ToString() + "</sim_port>";
|
||||||
respstring += "<region_locx>" + TheSim.regionLocX + "</region_locx>";
|
respstring += "<region_locx>" + TheSim.regionLocX.ToString() + "</region_locx>";
|
||||||
respstring += "<region_locy>" + TheSim.regionLocY + "</region_locy>";
|
respstring += "<region_locy>" + TheSim.regionLocY.ToString() + "</region_locy>";
|
||||||
respstring += "<estate_id>1</estate_id>";
|
respstring += "<estate_id>1</estate_id>";
|
||||||
respstring += "</sim>";
|
respstring += "</sim>";
|
||||||
respstring += "</Root>";
|
respstring += "</Root>";
|
||||||
|
@ -949,12 +946,12 @@ namespace OpenSim.Grid.GridServer
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "region_locx":
|
case "region_locx":
|
||||||
theSim.regionLocX = Convert.ToUInt32(simnode.ChildNodes[i].InnerText);
|
theSim.regionLocX = Convert.ToUInt32((string)simnode.ChildNodes[i].InnerText);
|
||||||
theSim.regionHandle = Helpers.UIntsToLong((theSim.regionLocX * Constants.RegionSize), (theSim.regionLocY * Constants.RegionSize));
|
theSim.regionHandle = Helpers.UIntsToLong((theSim.regionLocX * Constants.RegionSize), (theSim.regionLocY * Constants.RegionSize));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "region_locy":
|
case "region_locy":
|
||||||
theSim.regionLocY = Convert.ToUInt32(simnode.ChildNodes[i].InnerText);
|
theSim.regionLocY = Convert.ToUInt32((string)simnode.ChildNodes[i].InnerText);
|
||||||
theSim.regionHandle = Helpers.UIntsToLong((theSim.regionLocX * Constants.RegionSize), (theSim.regionLocY * Constants.RegionSize));
|
theSim.regionHandle = Helpers.UIntsToLong((theSim.regionLocX * Constants.RegionSize), (theSim.regionLocY * Constants.RegionSize));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1008,28 +1005,28 @@ namespace OpenSim.Grid.GridServer
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.Warn("[GRID]: GetRegionPlugin Handle " + kvp.Key + " unable to add new sim: " +
|
m_log.Warn("[GRID]: GetRegionPlugin Handle " + kvp.Key + " unable to add new sim: " +
|
||||||
e);
|
e.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return "OK";
|
return "OK";
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
return "ERROR! Could not save to database! (" + e + ")";
|
return "ERROR! Could not save to database! (" + e.ToString() + ")";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public XmlRpcResponse XmlRPCRegisterMessageServer(XmlRpcRequest request)
|
public XmlRpcResponse XmlRPCRegisterMessageServer(XmlRpcRequest request)
|
||||||
{
|
{
|
||||||
XmlRpcResponse response = new XmlRpcResponse();
|
XmlRpcResponse response = new XmlRpcResponse();
|
||||||
Hashtable requestData = (Hashtable) request.Params[0];
|
Hashtable requestData = (Hashtable)request.Params[0];
|
||||||
Hashtable responseData = new Hashtable();
|
Hashtable responseData = new Hashtable();
|
||||||
|
|
||||||
if (requestData.Contains("uri"))
|
if (requestData.Contains("uri"))
|
||||||
{
|
{
|
||||||
string URI = (string) requestData["URI"];
|
string URI = (string)requestData["URI"];
|
||||||
string sendkey = (string) requestData["sendkey"];
|
string sendkey = (string)requestData["sendkey"];
|
||||||
string recvkey = (string) requestData["recvkey"];
|
string recvkey = (string)requestData["recvkey"];
|
||||||
MessageServerInfo m = new MessageServerInfo();
|
MessageServerInfo m = new MessageServerInfo();
|
||||||
m.URI = URI;
|
m.URI = URI;
|
||||||
m.sendkey = sendkey;
|
m.sendkey = sendkey;
|
||||||
|
@ -1045,14 +1042,14 @@ namespace OpenSim.Grid.GridServer
|
||||||
public XmlRpcResponse XmlRPCDeRegisterMessageServer(XmlRpcRequest request)
|
public XmlRpcResponse XmlRPCDeRegisterMessageServer(XmlRpcRequest request)
|
||||||
{
|
{
|
||||||
XmlRpcResponse response = new XmlRpcResponse();
|
XmlRpcResponse response = new XmlRpcResponse();
|
||||||
Hashtable requestData = (Hashtable) request.Params[0];
|
Hashtable requestData = (Hashtable)request.Params[0];
|
||||||
Hashtable responseData = new Hashtable();
|
Hashtable responseData = new Hashtable();
|
||||||
|
|
||||||
if (requestData.Contains("uri"))
|
if (requestData.Contains("uri"))
|
||||||
{
|
{
|
||||||
string URI = (string) requestData["uri"];
|
string URI = (string)requestData["uri"];
|
||||||
string sendkey = (string) requestData["sendkey"];
|
string sendkey = (string)requestData["sendkey"];
|
||||||
string recvkey = (string) requestData["recvkey"];
|
string recvkey = (string)requestData["recvkey"];
|
||||||
MessageServerInfo m = new MessageServerInfo();
|
MessageServerInfo m = new MessageServerInfo();
|
||||||
m.URI = URI;
|
m.URI = URI;
|
||||||
m.sendkey = sendkey;
|
m.sendkey = sendkey;
|
||||||
|
@ -1065,4 +1062,4 @@ namespace OpenSim.Grid.GridServer
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,34 +44,6 @@ namespace OpenSim.Grid.GridServer
|
||||||
protected GridManager m_gridManager;
|
protected GridManager m_gridManager;
|
||||||
protected List<IGridPlugin> m_plugins = new List<IGridPlugin>();
|
protected List<IGridPlugin> m_plugins = new List<IGridPlugin>();
|
||||||
|
|
||||||
public GridServerBase()
|
|
||||||
{
|
|
||||||
m_console = new ConsoleBase("OpenGrid", this);
|
|
||||||
MainConsole.Instance = m_console;
|
|
||||||
}
|
|
||||||
|
|
||||||
#region conscmd_callback Members
|
|
||||||
|
|
||||||
public override void RunCmd(string cmd, string[] cmdparams)
|
|
||||||
{
|
|
||||||
base.RunCmd(cmd, cmdparams);
|
|
||||||
|
|
||||||
switch (cmd)
|
|
||||||
{
|
|
||||||
case "help":
|
|
||||||
m_console.Notice("shutdown - shutdown the grid (USE CAUTION!)");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "shutdown":
|
|
||||||
foreach (IGridPlugin plugin in m_plugins) plugin.Close();
|
|
||||||
m_console.Close();
|
|
||||||
Environment.Exit(0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
public void Work()
|
public void Work()
|
||||||
{
|
{
|
||||||
m_console.Notice("Enter help for a list of commands\n");
|
m_console.Notice("Enter help for a list of commands\n");
|
||||||
|
@ -82,6 +54,12 @@ namespace OpenSim.Grid.GridServer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public GridServerBase()
|
||||||
|
{
|
||||||
|
m_console = new ConsoleBase("OpenGrid", this);
|
||||||
|
MainConsole.Instance = m_console;
|
||||||
|
}
|
||||||
|
|
||||||
public void managercallback(string cmd)
|
public void managercallback(string cmd)
|
||||||
{
|
{
|
||||||
switch (cmd)
|
switch (cmd)
|
||||||
|
@ -105,14 +83,14 @@ namespace OpenSim.Grid.GridServer
|
||||||
|
|
||||||
AddHttpHandlers();
|
AddHttpHandlers();
|
||||||
|
|
||||||
LoadGridPlugins();
|
LoadGridPlugins( );
|
||||||
|
|
||||||
m_httpServer.Start();
|
m_httpServer.Start();
|
||||||
|
|
||||||
m_console.Status("[GRID]: Starting sim status checker");
|
m_console.Status("[GRID]: Starting sim status checker");
|
||||||
|
|
||||||
Timer simCheckTimer = new Timer(3600000 * 3); // 3 Hours between updates.
|
Timer simCheckTimer = new Timer(3600000 * 3); // 3 Hours between updates.
|
||||||
simCheckTimer.Elapsed += CheckSims;
|
simCheckTimer.Elapsed += new ElapsedEventHandler(CheckSims);
|
||||||
simCheckTimer.Enabled = true;
|
simCheckTimer.Enabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -144,7 +122,7 @@ namespace OpenSim.Grid.GridServer
|
||||||
foreach (TypeExtensionNode node in nodes)
|
foreach (TypeExtensionNode node in nodes)
|
||||||
{
|
{
|
||||||
m_console.Status("[GRIDPLUGINS]: Loading OpenSim plugin " + node.Path);
|
m_console.Status("[GRIDPLUGINS]: Loading OpenSim plugin " + node.Path);
|
||||||
IGridPlugin plugin = (IGridPlugin) node.CreateInstance();
|
IGridPlugin plugin = (IGridPlugin)node.CreateInstance();
|
||||||
plugin.Initialise(this);
|
plugin.Initialise(this);
|
||||||
m_plugins.Add(plugin);
|
m_plugins.Add(plugin);
|
||||||
}
|
}
|
||||||
|
@ -199,5 +177,23 @@ namespace OpenSim.Grid.GridServer
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void RunCmd(string cmd, string[] cmdparams)
|
||||||
|
{
|
||||||
|
base.RunCmd(cmd, cmdparams);
|
||||||
|
|
||||||
|
switch (cmd)
|
||||||
|
{
|
||||||
|
case "help":
|
||||||
|
m_console.Notice("shutdown - shutdown the grid (USE CAUTION!)");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "shutdown":
|
||||||
|
foreach (IGridPlugin plugin in m_plugins) plugin.Close();
|
||||||
|
m_console.Close();
|
||||||
|
Environment.Exit(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,4 +38,4 @@ namespace OpenSim.Grid.GridServer
|
||||||
void Initialise(GridServerBase gridServer);
|
void Initialise(GridServerBase gridServer);
|
||||||
void Close();
|
void Close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,4 +50,4 @@ namespace OpenSim.Grid.GridServer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,4 +60,4 @@ using System.Runtime.InteropServices;
|
||||||
//
|
//
|
||||||
|
|
||||||
[assembly : AssemblyVersion("1.0.0.0")]
|
[assembly : AssemblyVersion("1.0.0.0")]
|
||||||
[assembly : AssemblyFileVersion("1.0.0.0")]
|
[assembly : AssemblyFileVersion("1.0.0.0")]
|
||||||
|
|
|
@ -40,7 +40,7 @@ namespace OpenSim.Grid.InventoryServer
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class GridInventoryService : InventoryServiceBase
|
public class GridInventoryService : InventoryServiceBase
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log
|
private static readonly ILog m_log
|
||||||
= LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
= LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
public override void RequestInventoryForUser(LLUUID userID, InventoryReceiptCallback callback)
|
public override void RequestInventoryForUser(LLUUID userID, InventoryReceiptCallback callback)
|
||||||
|
@ -55,7 +55,7 @@ namespace OpenSim.Grid.InventoryServer
|
||||||
/// <param name="itemsList"></param>
|
/// <param name="itemsList"></param>
|
||||||
/// <returns>true if the inventory was retrieved, false otherwise</returns>
|
/// <returns>true if the inventory was retrieved, false otherwise</returns>
|
||||||
private bool GetUsersInventory(LLUUID userID, out List<InventoryFolderBase> folderList,
|
private bool GetUsersInventory(LLUUID userID, out List<InventoryFolderBase> folderList,
|
||||||
out List<InventoryItemBase> itemsList)
|
out List<InventoryItemBase> itemsList)
|
||||||
{
|
{
|
||||||
List<InventoryFolderBase> allFolders = GetInventorySkeleton(userID);
|
List<InventoryFolderBase> allFolders = GetInventorySkeleton(userID);
|
||||||
List<InventoryItemBase> allItems = new List<InventoryItemBase>();
|
List<InventoryItemBase> allItems = new List<InventoryItemBase>();
|
||||||
|
@ -109,28 +109,28 @@ namespace OpenSim.Grid.InventoryServer
|
||||||
{
|
{
|
||||||
// uncomment me to simulate an overloaded inventory server
|
// uncomment me to simulate an overloaded inventory server
|
||||||
//Thread.Sleep(20000);
|
//Thread.Sleep(20000);
|
||||||
|
|
||||||
LLUUID userID = new LLUUID(rawUserID);
|
LLUUID userID = new LLUUID(rawUserID);
|
||||||
|
|
||||||
m_log.InfoFormat("[GRID AGENT INVENTORY]: Processing request for inventory of {0}", userID);
|
m_log.InfoFormat("[GRID AGENT INVENTORY]: Processing request for inventory of {0}", userID);
|
||||||
|
|
||||||
InventoryCollection invCollection = new InventoryCollection();
|
InventoryCollection invCollection = new InventoryCollection();
|
||||||
|
|
||||||
List<InventoryFolderBase> allFolders = GetInventorySkeleton(userID);
|
List<InventoryFolderBase> allFolders = GetInventorySkeleton(userID);
|
||||||
|
|
||||||
if (null == allFolders)
|
if (null == allFolders)
|
||||||
{
|
{
|
||||||
m_log.WarnFormat("[GRID AGENT INVENTORY]: No inventory found for user {0}", rawUserID);
|
m_log.WarnFormat("[GRID AGENT INVENTORY]: No inventory found for user {0}", rawUserID);
|
||||||
|
|
||||||
return invCollection;
|
return invCollection;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<InventoryItemBase> allItems = new List<InventoryItemBase>();
|
List<InventoryItemBase> allItems = new List<InventoryItemBase>();
|
||||||
|
|
||||||
foreach (InventoryFolderBase folder in allFolders)
|
foreach (InventoryFolderBase folder in allFolders)
|
||||||
{
|
{
|
||||||
List<InventoryItemBase> items = RequestFolderItems(folder.ID);
|
List<InventoryItemBase> items = RequestFolderItems(folder.ID);
|
||||||
|
|
||||||
if (items != null)
|
if (items != null)
|
||||||
{
|
{
|
||||||
allItems.InsertRange(0, items);
|
allItems.InsertRange(0, items);
|
||||||
|
@ -138,9 +138,9 @@ namespace OpenSim.Grid.InventoryServer
|
||||||
}
|
}
|
||||||
|
|
||||||
invCollection.UserID = userID;
|
invCollection.UserID = userID;
|
||||||
invCollection.Folders = allFolders;
|
invCollection.Folders = allFolders;
|
||||||
invCollection.Items = allItems;
|
invCollection.Items = allItems;
|
||||||
|
|
||||||
// foreach (InventoryFolderBase folder in invCollection.Folders)
|
// foreach (InventoryFolderBase folder in invCollection.Folders)
|
||||||
// {
|
// {
|
||||||
// m_log.DebugFormat("[GRID AGENT INVENTORY]: Sending back folder {0} {1}", folder.Name, folder.ID);
|
// m_log.DebugFormat("[GRID AGENT INVENTORY]: Sending back folder {0} {1}", folder.Name, folder.ID);
|
||||||
|
@ -150,14 +150,14 @@ namespace OpenSim.Grid.InventoryServer
|
||||||
// {
|
// {
|
||||||
// m_log.DebugFormat("[GRID AGENT INVENTORY]: Sending back item {0} {1}, folder {2}", item.Name, item.ID, item.Folder);
|
// m_log.DebugFormat("[GRID AGENT INVENTORY]: Sending back item {0} {1}, folder {2}", item.Name, item.ID, item.Folder);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
m_log.InfoFormat(
|
m_log.InfoFormat(
|
||||||
"[GRID AGENT INVENTORY]: Sending back inventory response to user {0} containing {1} folders and {2} items",
|
"[GRID AGENT INVENTORY]: Sending back inventory response to user {0} containing {1} folders and {2} items",
|
||||||
invCollection.UserID, invCollection.Folders.Count, invCollection.Items.Count);
|
invCollection.UserID, invCollection.Folders.Count, invCollection.Items.Count);
|
||||||
|
|
||||||
return invCollection;
|
return invCollection;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Guid to UUID wrapper for same name IInventoryServices method
|
/// Guid to UUID wrapper for same name IInventoryServices method
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -166,10 +166,10 @@ namespace OpenSim.Grid.InventoryServer
|
||||||
public List<InventoryFolderBase> GetInventorySkeleton(Guid rawUserID)
|
public List<InventoryFolderBase> GetInventorySkeleton(Guid rawUserID)
|
||||||
{
|
{
|
||||||
//Thread.Sleep(10000);
|
//Thread.Sleep(10000);
|
||||||
|
|
||||||
LLUUID userID = new LLUUID(rawUserID);
|
LLUUID userID = new LLUUID(rawUserID);
|
||||||
return GetInventorySkeleton(userID);
|
return GetInventorySkeleton(userID);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Create an inventory for the given user.
|
/// Create an inventory for the given user.
|
||||||
|
@ -196,11 +196,11 @@ namespace OpenSim.Grid.InventoryServer
|
||||||
{
|
{
|
||||||
MoveFolder(folder);
|
MoveFolder(folder);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void PurgeInventoryFolder(LLUUID userID, InventoryFolderBase folder)
|
public override void PurgeInventoryFolder(LLUUID userID, InventoryFolderBase folder)
|
||||||
{
|
{
|
||||||
PurgeFolder(folder);
|
PurgeFolder(folder);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void AddNewInventoryItem(LLUUID userID, InventoryItemBase item)
|
public override void AddNewInventoryItem(LLUUID userID, InventoryItemBase item)
|
||||||
{
|
{
|
||||||
|
@ -230,15 +230,15 @@ namespace OpenSim.Grid.InventoryServer
|
||||||
MoveExistingInventoryFolder(folder);
|
MoveExistingInventoryFolder(folder);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool PurgeInventoryFolder(InventoryFolderBase folder)
|
public bool PurgeInventoryFolder(InventoryFolderBase folder)
|
||||||
{
|
{
|
||||||
m_log.InfoFormat(
|
m_log.InfoFormat(
|
||||||
"[GRID AGENT INVENTORY]: Purging folder {0} {1} of its contents", folder.Name, folder.ID);
|
"[GRID AGENT INVENTORY]: Purging folder {0} {1} of its contents", folder.Name, folder.ID);
|
||||||
|
|
||||||
PurgeInventoryFolder(folder.Owner, folder);
|
PurgeInventoryFolder(folder.Owner, folder);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool AddInventoryItem(InventoryItemBase item)
|
public bool AddInventoryItem(InventoryItemBase item)
|
||||||
{
|
{
|
||||||
|
@ -267,4 +267,4 @@ namespace OpenSim.Grid.InventoryServer
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,7 +54,7 @@ namespace OpenSim.Grid.InventoryServer
|
||||||
Assembly pluginAssembly = Assembly.LoadFrom(FileName);
|
Assembly pluginAssembly = Assembly.LoadFrom(FileName);
|
||||||
|
|
||||||
m_log.Info("[" + OpenInventory_Main.LogName + "]: " +
|
m_log.Info("[" + OpenInventory_Main.LogName + "]: " +
|
||||||
"Invenstorage: Found " + pluginAssembly.GetTypes().Length + " interfaces.");
|
"Invenstorage: Found " + pluginAssembly.GetTypes().Length + " interfaces.");
|
||||||
foreach (Type pluginType in pluginAssembly.GetTypes())
|
foreach (Type pluginType in pluginAssembly.GetTypes())
|
||||||
{
|
{
|
||||||
if (!pluginType.IsAbstract)
|
if (!pluginType.IsAbstract)
|
||||||
|
@ -68,7 +68,7 @@ namespace OpenSim.Grid.InventoryServer
|
||||||
plug.Initialise(dbconnect);
|
plug.Initialise(dbconnect);
|
||||||
_databasePlugin = plug;
|
_databasePlugin = plug;
|
||||||
m_log.Info("[" + OpenInventory_Main.LogName + "]: " +
|
m_log.Info("[" + OpenInventory_Main.LogName + "]: " +
|
||||||
"Invenstorage: Added IInventoryData Interface");
|
"Invenstorage: Added IInventoryData Interface");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -136,12 +136,10 @@ namespace OpenSim.Grid.InventoryServer
|
||||||
return fixupFolder(inventory.root, null);
|
return fixupFolder(inventory.root, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Nested type: GetInventory
|
|
||||||
|
|
||||||
public class GetInventory : BaseStreamHandler
|
public class GetInventory : BaseStreamHandler
|
||||||
{
|
{
|
||||||
private readonly SerializableInventory _inventory;
|
private SerializableInventory _inventory;
|
||||||
private readonly InventoryManager _manager;
|
private InventoryManager _manager;
|
||||||
|
|
||||||
public GetInventory(InventoryManager manager)
|
public GetInventory(InventoryManager manager)
|
||||||
: base("GET", "/inventory")
|
: base("GET", "/inventory")
|
||||||
|
@ -183,7 +181,7 @@ namespace OpenSim.Grid.InventoryServer
|
||||||
{
|
{
|
||||||
byte[] result = new byte[] {};
|
byte[] result = new byte[] {};
|
||||||
|
|
||||||
string[] parms = path.Split(new[] {'/'}, StringSplitOptions.RemoveEmptyEntries);
|
string[] parms = path.Split(new char[] {'/'}, StringSplitOptions.RemoveEmptyEntries);
|
||||||
if (parms.Length > 1)
|
if (parms.Length > 1)
|
||||||
{
|
{
|
||||||
if (string.Compare(parms[1], "library", true) == 0)
|
if (string.Compare(parms[1], "library", true) == 0)
|
||||||
|
@ -192,7 +190,7 @@ namespace OpenSim.Grid.InventoryServer
|
||||||
saveInventoryToStream(_inventory, ms);
|
saveInventoryToStream(_inventory, ms);
|
||||||
|
|
||||||
result = ms.GetBuffer();
|
result = ms.GetBuffer();
|
||||||
Array.Resize(ref result, (int) ms.Length);
|
Array.Resize<byte>(ref result, (int) ms.Length);
|
||||||
}
|
}
|
||||||
else if (string.Compare(parms[1], "user", true) == 0)
|
else if (string.Compare(parms[1], "user", true) == 0)
|
||||||
{
|
{
|
||||||
|
@ -205,7 +203,5 @@ namespace OpenSim.Grid.InventoryServer
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,38 +40,13 @@ namespace OpenSim.Grid.InventoryServer
|
||||||
{
|
{
|
||||||
public class OpenInventory_Main : BaseOpenSimServer, conscmd_callback
|
public class OpenInventory_Main : BaseOpenSimServer, conscmd_callback
|
||||||
{
|
{
|
||||||
public const string LogName = "INVENTORY";
|
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private InventoryConfig m_config;
|
|
||||||
private InventoryManager m_inventoryManager;
|
private InventoryManager m_inventoryManager;
|
||||||
|
private InventoryConfig m_config;
|
||||||
private GridInventoryService m_inventoryService;
|
private GridInventoryService m_inventoryService;
|
||||||
|
|
||||||
public OpenInventory_Main()
|
public const string LogName = "INVENTORY";
|
||||||
{
|
|
||||||
m_console = new ConsoleBase(LogName, this);
|
|
||||||
MainConsole.Instance = m_console;
|
|
||||||
}
|
|
||||||
|
|
||||||
#region conscmd_callback Members
|
|
||||||
|
|
||||||
public override void RunCmd(string cmd, string[] cmdparams)
|
|
||||||
{
|
|
||||||
base.RunCmd(cmd, cmdparams);
|
|
||||||
|
|
||||||
switch (cmd)
|
|
||||||
{
|
|
||||||
case "add-user":
|
|
||||||
m_inventoryService.CreateUsersInventory(LLUUID.Random().UUID);
|
|
||||||
break;
|
|
||||||
case "shutdown":
|
|
||||||
m_console.Close();
|
|
||||||
Environment.Exit(0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
[STAThread]
|
[STAThread]
|
||||||
public static void Main(string[] args)
|
public static void Main(string[] args)
|
||||||
|
@ -84,6 +59,12 @@ namespace OpenSim.Grid.InventoryServer
|
||||||
theServer.Work();
|
theServer.Work();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public OpenInventory_Main()
|
||||||
|
{
|
||||||
|
m_console = new ConsoleBase(LogName, this);
|
||||||
|
MainConsole.Instance = m_console;
|
||||||
|
}
|
||||||
|
|
||||||
public void Startup()
|
public void Startup()
|
||||||
{
|
{
|
||||||
m_log.Info("Initialising inventory manager...");
|
m_log.Info("Initialising inventory manager...");
|
||||||
|
@ -94,7 +75,7 @@ namespace OpenSim.Grid.InventoryServer
|
||||||
m_inventoryService.AddPlugin(m_config.DatabaseProvider, m_config.DatabaseConnect);
|
m_inventoryService.AddPlugin(m_config.DatabaseProvider, m_config.DatabaseConnect);
|
||||||
|
|
||||||
m_log.Info("[" + LogName + "]: Starting HTTP server ...");
|
m_log.Info("[" + LogName + "]: Starting HTTP server ...");
|
||||||
|
|
||||||
m_httpServer = new BaseHttpServer(m_config.HttpPort);
|
m_httpServer = new BaseHttpServer(m_config.HttpPort);
|
||||||
AddHttpHandlers();
|
AddHttpHandlers();
|
||||||
m_httpServer.Start();
|
m_httpServer.Start();
|
||||||
|
@ -107,11 +88,11 @@ namespace OpenSim.Grid.InventoryServer
|
||||||
m_httpServer.AddStreamHandler(
|
m_httpServer.AddStreamHandler(
|
||||||
new RestDeserialisehandler<Guid, InventoryCollection>(
|
new RestDeserialisehandler<Guid, InventoryCollection>(
|
||||||
"POST", "/GetInventory/", m_inventoryService.GetUserInventory));
|
"POST", "/GetInventory/", m_inventoryService.GetUserInventory));
|
||||||
|
|
||||||
m_httpServer.AddStreamHandler(
|
m_httpServer.AddStreamHandler(
|
||||||
new RestDeserialisehandler<Guid, bool>(
|
new RestDeserialisehandler<Guid, bool>(
|
||||||
"POST", "/CreateInventory/", m_inventoryService.CreateUsersInventory));
|
"POST", "/CreateInventory/", m_inventoryService.CreateUsersInventory));
|
||||||
|
|
||||||
m_httpServer.AddStreamHandler(
|
m_httpServer.AddStreamHandler(
|
||||||
new RestDeserialisehandler<InventoryFolderBase, bool>(
|
new RestDeserialisehandler<InventoryFolderBase, bool>(
|
||||||
"POST", "/NewFolder/", m_inventoryService.AddInventoryFolder));
|
"POST", "/NewFolder/", m_inventoryService.AddInventoryFolder));
|
||||||
|
@ -119,15 +100,15 @@ namespace OpenSim.Grid.InventoryServer
|
||||||
m_httpServer.AddStreamHandler(
|
m_httpServer.AddStreamHandler(
|
||||||
new RestDeserialisehandler<InventoryFolderBase, bool>(
|
new RestDeserialisehandler<InventoryFolderBase, bool>(
|
||||||
"POST", "/MoveFolder/", m_inventoryService.MoveInventoryFolder));
|
"POST", "/MoveFolder/", m_inventoryService.MoveInventoryFolder));
|
||||||
|
|
||||||
m_httpServer.AddStreamHandler(
|
m_httpServer.AddStreamHandler(
|
||||||
new RestDeserialisehandler<InventoryFolderBase, bool>(
|
new RestDeserialisehandler<InventoryFolderBase, bool>(
|
||||||
"POST", "/PurgeFolder/", m_inventoryService.PurgeInventoryFolder));
|
"POST", "/PurgeFolder/", m_inventoryService.PurgeInventoryFolder));
|
||||||
|
|
||||||
m_httpServer.AddStreamHandler(
|
m_httpServer.AddStreamHandler(
|
||||||
new RestDeserialisehandler<InventoryItemBase, bool>(
|
new RestDeserialisehandler<InventoryItemBase, bool>(
|
||||||
"POST", "/NewItem/", m_inventoryService.AddInventoryItem));
|
"POST", "/NewItem/", m_inventoryService.AddInventoryItem));
|
||||||
|
|
||||||
m_httpServer.AddStreamHandler(
|
m_httpServer.AddStreamHandler(
|
||||||
new RestDeserialisehandler<InventoryItemBase, bool>(
|
new RestDeserialisehandler<InventoryItemBase, bool>(
|
||||||
"POST", "/DeleteItem/", m_inventoryService.DeleteInvItem));
|
"POST", "/DeleteItem/", m_inventoryService.DeleteInvItem));
|
||||||
|
@ -153,5 +134,21 @@ namespace OpenSim.Grid.InventoryServer
|
||||||
m_console.Prompt();
|
m_console.Prompt();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void RunCmd(string cmd, string[] cmdparams)
|
||||||
|
{
|
||||||
|
base.RunCmd(cmd, cmdparams);
|
||||||
|
|
||||||
|
switch (cmd)
|
||||||
|
{
|
||||||
|
case "add-user":
|
||||||
|
m_inventoryService.CreateUsersInventory(LLUUID.Random().UUID);
|
||||||
|
break;
|
||||||
|
case "shutdown":
|
||||||
|
m_console.Close();
|
||||||
|
Environment.Exit(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,42 +44,9 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private MessageServerConfig Cfg;
|
private MessageServerConfig Cfg;
|
||||||
|
|
||||||
private LLUUID m_lastCreatedUser = LLUUID.Random();
|
|
||||||
private MessageService msgsvc;
|
private MessageService msgsvc;
|
||||||
|
|
||||||
private OpenMessage_Main()
|
private LLUUID m_lastCreatedUser = LLUUID.Random();
|
||||||
{
|
|
||||||
m_console = new ConsoleBase("OpenMessage", this);
|
|
||||||
MainConsole.Instance = m_console;
|
|
||||||
}
|
|
||||||
|
|
||||||
#region conscmd_callback Members
|
|
||||||
|
|
||||||
public override void RunCmd(string cmd, string[] cmdparams)
|
|
||||||
{
|
|
||||||
base.RunCmd(cmd, cmdparams);
|
|
||||||
|
|
||||||
switch (cmd)
|
|
||||||
{
|
|
||||||
case "help":
|
|
||||||
m_console.Notice("shutdown - shutdown the message server (USE CAUTION!)");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "shutdown":
|
|
||||||
msgsvc.deregisterWithUserServer();
|
|
||||||
m_console.Close();
|
|
||||||
Environment.Exit(0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void Show(string ShowWhat)
|
|
||||||
{
|
|
||||||
base.Show(ShowWhat);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
[STAThread]
|
[STAThread]
|
||||||
public static void Main(string[] args)
|
public static void Main(string[] args)
|
||||||
|
@ -88,6 +55,7 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
|
|
||||||
m_log.Info("Launching MessagingServer...");
|
m_log.Info("Launching MessagingServer...");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
OpenMessage_Main messageserver = new OpenMessage_Main();
|
OpenMessage_Main messageserver = new OpenMessage_Main();
|
||||||
|
|
||||||
|
@ -95,6 +63,12 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
messageserver.Work();
|
messageserver.Work();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private OpenMessage_Main()
|
||||||
|
{
|
||||||
|
m_console = new ConsoleBase("OpenMessage", this);
|
||||||
|
MainConsole.Instance = m_console;
|
||||||
|
}
|
||||||
|
|
||||||
private void Work()
|
private void Work()
|
||||||
{
|
{
|
||||||
m_console.Notice("Enter help for a list of commands\n");
|
m_console.Notice("Enter help for a list of commands\n");
|
||||||
|
@ -144,13 +118,12 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
switch (what)
|
switch (what)
|
||||||
{
|
{
|
||||||
case "user":
|
case "user":
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
//userID =
|
//userID =
|
||||||
//m_userManager.AddUserProfile(tempfirstname, templastname, tempMD5Passwd, regX, regY);
|
//m_userManager.AddUserProfile(tempfirstname, templastname, tempMD5Passwd, regX, regY);
|
||||||
}
|
} catch (Exception ex)
|
||||||
catch (Exception ex)
|
|
||||||
{
|
{
|
||||||
m_console.Error("[SERVER]: Error creating user: {0}", ex.ToString());
|
m_console.Error("[SERVER]: Error creating user: {0}", ex.ToString());
|
||||||
}
|
}
|
||||||
|
@ -158,7 +131,7 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
//RestObjectPoster.BeginPostObject<Guid>(m_userManager._config.InventoryUrl + "CreateInventory/",
|
//RestObjectPoster.BeginPostObject<Guid>(m_userManager._config.InventoryUrl + "CreateInventory/",
|
||||||
//userID.UUID);
|
//userID.UUID);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
@ -168,5 +141,28 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void RunCmd(string cmd, string[] cmdparams)
|
||||||
|
{
|
||||||
|
base.RunCmd(cmd, cmdparams);
|
||||||
|
|
||||||
|
switch (cmd)
|
||||||
|
{
|
||||||
|
case "help":
|
||||||
|
m_console.Notice("shutdown - shutdown the message server (USE CAUTION!)");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "shutdown":
|
||||||
|
msgsvc.deregisterWithUserServer();
|
||||||
|
m_console.Close();
|
||||||
|
Environment.Exit(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Show(string ShowWhat)
|
||||||
|
{
|
||||||
|
base.Show(ShowWhat);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,16 +45,16 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private readonly MessageServerConfig m_cfg;
|
private MessageServerConfig m_cfg;
|
||||||
private readonly Hashtable m_presence_BackReferences = new Hashtable();
|
|
||||||
|
|
||||||
//A hashtable of all current presences this server knows about
|
//A hashtable of all current presences this server knows about
|
||||||
private readonly Hashtable m_presences = new Hashtable();
|
private Hashtable m_presences = new Hashtable();
|
||||||
|
|
||||||
//a hashtable of all current regions this server knows about
|
//a hashtable of all current regions this server knows about
|
||||||
private readonly Hashtable m_regionInfoCache = new Hashtable();
|
private Hashtable m_regionInfoCache = new Hashtable();
|
||||||
|
|
||||||
//A hashtable containing lists of UUIDs keyed by UUID for fast backreferencing
|
//A hashtable containing lists of UUIDs keyed by UUID for fast backreferencing
|
||||||
|
private Hashtable m_presence_BackReferences = new Hashtable();
|
||||||
|
|
||||||
// Hashtable containing work units that need to be processed
|
// Hashtable containing work units that need to be processed
|
||||||
private Hashtable m_unProcessedWorkUnits = new Hashtable();
|
private Hashtable m_unProcessedWorkUnits = new Hashtable();
|
||||||
|
@ -63,13 +63,13 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
{
|
{
|
||||||
m_cfg = cfg;
|
m_cfg = cfg;
|
||||||
}
|
}
|
||||||
|
|
||||||
#region RegionComms Methods
|
#region RegionComms Methods
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region FriendList Methods
|
#region FriendList Methods
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Process Friendlist subscriptions for a user
|
/// Process Friendlist subscriptions for a user
|
||||||
/// The login method calls this for a User
|
/// The login method calls this for a User
|
||||||
|
@ -87,14 +87,14 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
for (int i = 0; i < uFriendList.Count; i++)
|
for (int i = 0; i < uFriendList.Count; i++)
|
||||||
{
|
{
|
||||||
//m_presence_BackReferences.Add(userpresence.agentData.AgentID, uFriendList[i].Friend);
|
//m_presence_BackReferences.Add(userpresence.agentData.AgentID, uFriendList[i].Friend);
|
||||||
// m_presence_BackReferences.Add(uFriendList[i].Friend, userpresence.agentData.AgentID);
|
// m_presence_BackReferences.Add(uFriendList[i].Friend, userpresence.agentData.AgentID);
|
||||||
|
|
||||||
if (m_presences.Contains(uFriendList[i].Friend))
|
if (m_presences.Contains(uFriendList[i].Friend))
|
||||||
{
|
{
|
||||||
UserPresenceData friendup = (UserPresenceData) m_presences[uFriendList[i].Friend];
|
UserPresenceData friendup = (UserPresenceData)m_presences[uFriendList[i].Friend];
|
||||||
// Add backreference
|
// Add backreference
|
||||||
|
|
||||||
SubscribeToPresenceUpdates(userpresence, friendup, uFriendList[i], i);
|
SubscribeToPresenceUpdates(userpresence, friendup, uFriendList[i],i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -108,10 +108,10 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
/// <param name="friendpresence">P2</param>
|
/// <param name="friendpresence">P2</param>
|
||||||
/// <param name="uFriendListItem"></param>
|
/// <param name="uFriendListItem"></param>
|
||||||
/// <param name="uFriendListIndex"></param>
|
/// <param name="uFriendListIndex"></param>
|
||||||
public void SubscribeToPresenceUpdates(UserPresenceData userpresence, UserPresenceData friendpresence,
|
public void SubscribeToPresenceUpdates(UserPresenceData userpresence, UserPresenceData friendpresence,
|
||||||
FriendListItem uFriendListItem, int uFriendListIndex)
|
FriendListItem uFriendListItem, int uFriendListIndex)
|
||||||
{
|
{
|
||||||
if ((uFriendListItem.FriendListOwnerPerms & (uint) FriendRights.CanSeeOnline) != 0)
|
if ((uFriendListItem.FriendListOwnerPerms & (uint)FriendRights.CanSeeOnline) != 0)
|
||||||
{
|
{
|
||||||
// Subscribe and Send Out updates
|
// Subscribe and Send Out updates
|
||||||
if (!friendpresence.subscriptionData.Contains(friendpresence.agentData.AgentID))
|
if (!friendpresence.subscriptionData.Contains(friendpresence.agentData.AgentID))
|
||||||
|
@ -126,13 +126,13 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
PresenceInformer friendlistupdater = new PresenceInformer();
|
PresenceInformer friendlistupdater = new PresenceInformer();
|
||||||
friendlistupdater.presence1 = friendpresence;
|
friendlistupdater.presence1 = friendpresence;
|
||||||
friendlistupdater.presence2 = userpresence;
|
friendlistupdater.presence2 = userpresence;
|
||||||
WaitCallback cb = friendlistupdater.go;
|
WaitCallback cb = new WaitCallback(friendlistupdater.go);
|
||||||
ThreadPool.QueueUserWorkItem(cb);
|
ThreadPool.QueueUserWorkItem(cb);
|
||||||
|
|
||||||
//SendRegionPresenceUpdate(friendpresence, userpresence);
|
//SendRegionPresenceUpdate(friendpresence, userpresence);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((uFriendListItem.FriendPerms & (uint) FriendRights.CanSeeOnline) != 0)
|
if ((uFriendListItem.FriendPerms & (uint)FriendRights.CanSeeOnline) != 0)
|
||||||
{
|
{
|
||||||
if (!friendpresence.subscriptionData.Contains(userpresence.agentData.AgentID))
|
if (!friendpresence.subscriptionData.Contains(userpresence.agentData.AgentID))
|
||||||
{
|
{
|
||||||
|
@ -147,9 +147,9 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
friendlistupdater.presence1 = userpresence;
|
friendlistupdater.presence1 = userpresence;
|
||||||
friendlistupdater.presence2 = friendpresence;
|
friendlistupdater.presence2 = friendpresence;
|
||||||
|
|
||||||
WaitCallback cb2 = friendlistupdater.go;
|
WaitCallback cb2 = new WaitCallback(friendlistupdater.go);
|
||||||
ThreadPool.QueueUserWorkItem(cb2);
|
ThreadPool.QueueUserWorkItem(cb2);
|
||||||
|
|
||||||
//SendRegionPresenceUpdate(userpresence, friendpresence);
|
//SendRegionPresenceUpdate(userpresence, friendpresence);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -164,7 +164,7 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
{
|
{
|
||||||
if (m_presence_BackReferences.Contains(friendID))
|
if (m_presence_BackReferences.Contains(friendID))
|
||||||
{
|
{
|
||||||
List<LLUUID> presenseBackReferences = (List<LLUUID>) m_presence_BackReferences[friendID];
|
List<LLUUID> presenseBackReferences = (List<LLUUID>)m_presence_BackReferences[friendID];
|
||||||
if (!presenseBackReferences.Contains(agentID))
|
if (!presenseBackReferences.Contains(agentID))
|
||||||
{
|
{
|
||||||
presenseBackReferences.Add(agentID);
|
presenseBackReferences.Add(agentID);
|
||||||
|
@ -188,7 +188,7 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
{
|
{
|
||||||
if (m_presence_BackReferences.Contains(friendID))
|
if (m_presence_BackReferences.Contains(friendID))
|
||||||
{
|
{
|
||||||
List<LLUUID> presenseBackReferences = (List<LLUUID>) m_presence_BackReferences[friendID];
|
List<LLUUID> presenseBackReferences = (List<LLUUID>)m_presence_BackReferences[friendID];
|
||||||
if (presenseBackReferences.Contains(agentID))
|
if (presenseBackReferences.Contains(agentID))
|
||||||
{
|
{
|
||||||
presenseBackReferences.Remove(agentID);
|
presenseBackReferences.Remove(agentID);
|
||||||
|
@ -216,29 +216,29 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
{
|
{
|
||||||
if (m_presences.Contains(AgentID))
|
if (m_presences.Contains(AgentID))
|
||||||
{
|
{
|
||||||
AgentData = (UserPresenceData) m_presences[AgentID];
|
AgentData = (UserPresenceData)m_presences[AgentID];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (AgentData != null)
|
if (AgentData != null)
|
||||||
{
|
{
|
||||||
AgentsNeedingNotification = AgentData.subscriptionData;
|
AgentsNeedingNotification = AgentData.subscriptionData;
|
||||||
//lock (m_presence_BackReferences)
|
//lock (m_presence_BackReferences)
|
||||||
//{
|
//{
|
||||||
//if (m_presence_BackReferences.Contains(AgentID))
|
//if (m_presence_BackReferences.Contains(AgentID))
|
||||||
//{
|
//{
|
||||||
//AgentsNeedingNotification = (List<LLUUID>)m_presence_BackReferences[AgentID];
|
//AgentsNeedingNotification = (List<LLUUID>)m_presence_BackReferences[AgentID];
|
||||||
//}
|
//}
|
||||||
//}
|
//}
|
||||||
|
|
||||||
for (int i = 0; i < AgentsNeedingNotification.Count; i++)
|
for (int i = 0; i < AgentsNeedingNotification.Count; i++)
|
||||||
{
|
{
|
||||||
// TODO: Do Region Notifications
|
// TODO: Do Region Notifications
|
||||||
lock (m_presences)
|
lock(m_presences)
|
||||||
{
|
{
|
||||||
if (m_presences.Contains(AgentsNeedingNotification[i]))
|
if (m_presences.Contains(AgentsNeedingNotification[i]))
|
||||||
{
|
{
|
||||||
friendd = (UserPresenceData) m_presences[AgentsNeedingNotification[i]];
|
friendd = (UserPresenceData)m_presences[AgentsNeedingNotification[i]];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -266,7 +266,7 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
friendlistupdater.presence1 = AgentData;
|
friendlistupdater.presence1 = AgentData;
|
||||||
friendlistupdater.presence2 = friendd;
|
friendlistupdater.presence2 = friendd;
|
||||||
|
|
||||||
WaitCallback cb3 = friendlistupdater.go;
|
WaitCallback cb3 = new WaitCallback(friendlistupdater.go);
|
||||||
ThreadPool.QueueUserWorkItem(cb3);
|
ThreadPool.QueueUserWorkItem(cb3);
|
||||||
|
|
||||||
//SendRegionPresenceUpdate(AgentData, friendd);
|
//SendRegionPresenceUpdate(AgentData, friendd);
|
||||||
|
@ -276,7 +276,7 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region UserServer Comms
|
#region UserServer Comms
|
||||||
|
@ -298,17 +298,18 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
parameters.Add(param);
|
parameters.Add(param);
|
||||||
XmlRpcRequest req = new XmlRpcRequest("get_user_friend_list", parameters);
|
XmlRpcRequest req = new XmlRpcRequest("get_user_friend_list", parameters);
|
||||||
XmlRpcResponse resp = req.Send(m_cfg.UserServerURL, 3000);
|
XmlRpcResponse resp = req.Send(m_cfg.UserServerURL, 3000);
|
||||||
Hashtable respData = (Hashtable) resp.Value;
|
Hashtable respData = (Hashtable)resp.Value;
|
||||||
|
|
||||||
if (respData.Contains("avcount"))
|
if (respData.Contains("avcount"))
|
||||||
{
|
{
|
||||||
buddylist = ConvertXMLRPCDataToFriendListItemList(respData);
|
buddylist = ConvertXMLRPCDataToFriendListItemList(respData);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (WebException e)
|
catch (WebException e)
|
||||||
{
|
{
|
||||||
m_log.Warn("Error when trying to fetch Avatar's friends list: " +
|
m_log.Warn("Error when trying to fetch Avatar's friends list: " +
|
||||||
e.Message);
|
e.Message);
|
||||||
// Return Empty list (no friends)
|
// Return Empty list (no friends)
|
||||||
}
|
}
|
||||||
return buddylist;
|
return buddylist;
|
||||||
|
@ -322,16 +323,16 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
public List<FriendListItem> ConvertXMLRPCDataToFriendListItemList(Hashtable data)
|
public List<FriendListItem> ConvertXMLRPCDataToFriendListItemList(Hashtable data)
|
||||||
{
|
{
|
||||||
List<FriendListItem> buddylist = new List<FriendListItem>();
|
List<FriendListItem> buddylist = new List<FriendListItem>();
|
||||||
int buddycount = Convert.ToInt32((string) data["avcount"]);
|
int buddycount = Convert.ToInt32((string)data["avcount"]);
|
||||||
|
|
||||||
for (int i = 0; i < buddycount; i++)
|
for (int i = 0; i < buddycount; i++)
|
||||||
{
|
{
|
||||||
FriendListItem buddylistitem = new FriendListItem();
|
FriendListItem buddylistitem = new FriendListItem();
|
||||||
|
|
||||||
buddylistitem.FriendListOwner = new LLUUID((string) data["ownerID" + i]);
|
buddylistitem.FriendListOwner = new LLUUID((string)data["ownerID" + i.ToString()]);
|
||||||
buddylistitem.Friend = new LLUUID((string) data["friendID" + i]);
|
buddylistitem.Friend = new LLUUID((string)data["friendID" + i.ToString()]);
|
||||||
buddylistitem.FriendListOwnerPerms = (uint) Convert.ToInt32((string) data["ownerPerms" + i]);
|
buddylistitem.FriendListOwnerPerms = (uint)Convert.ToInt32((string)data["ownerPerms" + i.ToString()]);
|
||||||
buddylistitem.FriendPerms = (uint) Convert.ToInt32((string) data["friendPerms" + i]);
|
buddylistitem.FriendPerms = (uint)Convert.ToInt32((string)data["friendPerms" + i.ToString()]);
|
||||||
|
|
||||||
buddylist.Add(buddylistitem);
|
buddylist.Add(buddylistitem);
|
||||||
}
|
}
|
||||||
|
@ -349,7 +350,7 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
public XmlRpcResponse UserLoggedOn(XmlRpcRequest request)
|
public XmlRpcResponse UserLoggedOn(XmlRpcRequest request)
|
||||||
{
|
{
|
||||||
m_log.Info("[LOGON]: User logged on, building indexes for user");
|
m_log.Info("[LOGON]: User logged on, building indexes for user");
|
||||||
Hashtable requestData = (Hashtable) request.Params[0];
|
Hashtable requestData = (Hashtable)request.Params[0];
|
||||||
|
|
||||||
//requestData["sendkey"] = serv.sendkey;
|
//requestData["sendkey"] = serv.sendkey;
|
||||||
//requestData["agentid"] = agentID.ToString();
|
//requestData["agentid"] = agentID.ToString();
|
||||||
|
@ -363,13 +364,13 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
//requestData["lastname"] = lastname;
|
//requestData["lastname"] = lastname;
|
||||||
|
|
||||||
AgentCircuitData agentData = new AgentCircuitData();
|
AgentCircuitData agentData = new AgentCircuitData();
|
||||||
agentData.SessionID = new LLUUID((string) requestData["sessionid"]);
|
agentData.SessionID = new LLUUID((string)requestData["sessionid"]);
|
||||||
agentData.SecureSessionID = new LLUUID((string) requestData["secure_session_id"]);
|
agentData.SecureSessionID = new LLUUID((string)requestData["secure_session_id"]);
|
||||||
agentData.firstname = (string) requestData["firstname"];
|
agentData.firstname = (string)requestData["firstname"];
|
||||||
agentData.lastname = (string) requestData["lastname"];
|
agentData.lastname = (string)requestData["lastname"];
|
||||||
agentData.AgentID = new LLUUID((string) requestData["agentid"]);
|
agentData.AgentID = new LLUUID((string)requestData["agentid"]);
|
||||||
agentData.circuitcode = Convert.ToUInt32(requestData["circuit_code"]);
|
agentData.circuitcode = Convert.ToUInt32(requestData["circuit_code"]);
|
||||||
agentData.CapsPath = (string) requestData["caps_path"];
|
agentData.CapsPath = (string)requestData["caps_path"];
|
||||||
|
|
||||||
if (requestData.ContainsKey("child_agent") && requestData["child_agent"].Equals("1"))
|
if (requestData.ContainsKey("child_agent") && requestData["child_agent"].Equals("1"))
|
||||||
{
|
{
|
||||||
|
@ -378,13 +379,13 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
agentData.startpos =
|
agentData.startpos =
|
||||||
new LLVector3(Convert.ToUInt32(requestData["positionx"]),
|
new LLVector3(Convert.ToUInt32(requestData["positionx"]),
|
||||||
Convert.ToUInt32(requestData["positiony"]),
|
Convert.ToUInt32(requestData["positiony"]),
|
||||||
Convert.ToUInt32(requestData["positionz"]));
|
Convert.ToUInt32(requestData["positionz"]));
|
||||||
agentData.child = false;
|
agentData.child = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ulong regionHandle = Convert.ToUInt64((string) requestData["regionhandle"]);
|
ulong regionHandle = Convert.ToUInt64((string)requestData["regionhandle"]);
|
||||||
|
|
||||||
UserPresenceData up = new UserPresenceData();
|
UserPresenceData up = new UserPresenceData();
|
||||||
up.agentData = agentData;
|
up.agentData = agentData;
|
||||||
|
@ -397,7 +398,7 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
|
|
||||||
return new XmlRpcResponse();
|
return new XmlRpcResponse();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The UserServer got a Logoff message
|
/// The UserServer got a Logoff message
|
||||||
/// Cleanup time for that user. Send out presence notifications
|
/// Cleanup time for that user. Send out presence notifications
|
||||||
|
@ -406,9 +407,9 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public XmlRpcResponse UserLoggedOff(XmlRpcRequest request)
|
public XmlRpcResponse UserLoggedOff(XmlRpcRequest request)
|
||||||
{
|
{
|
||||||
Hashtable requestData = (Hashtable) request.Params[0];
|
Hashtable requestData = (Hashtable)request.Params[0];
|
||||||
|
|
||||||
LLUUID AgentID = new LLUUID((string) requestData["agentid"]);
|
LLUUID AgentID = new LLUUID((string)requestData["agentid"]);
|
||||||
|
|
||||||
ProcessLogOff(AgentID);
|
ProcessLogOff(AgentID);
|
||||||
|
|
||||||
|
@ -430,9 +431,9 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
RegionProfileData regionInfo = null;
|
RegionProfileData regionInfo = null;
|
||||||
if (m_regionInfoCache.Contains(regionhandle))
|
if (m_regionInfoCache.Contains(regionhandle))
|
||||||
{
|
{
|
||||||
regionInfo = (RegionProfileData) m_regionInfoCache[regionhandle];
|
regionInfo = (RegionProfileData)m_regionInfoCache[regionhandle];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
regionInfo = RequestRegionInfo(regionhandle);
|
regionInfo = RequestRegionInfo(regionhandle);
|
||||||
}
|
}
|
||||||
|
@ -446,8 +447,7 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
/// <param name="regionHandle"></param>
|
/// <param name="regionHandle"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public RegionProfileData RequestRegionInfo(ulong regionHandle)
|
public RegionProfileData RequestRegionInfo(ulong regionHandle)
|
||||||
{
|
{ RegionProfileData regionProfile = null;
|
||||||
RegionProfileData regionProfile = null;
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Hashtable requestData = new Hashtable();
|
Hashtable requestData = new Hashtable();
|
||||||
|
@ -457,8 +457,8 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
SendParams.Add(requestData);
|
SendParams.Add(requestData);
|
||||||
XmlRpcRequest GridReq = new XmlRpcRequest("simulator_data_request", SendParams);
|
XmlRpcRequest GridReq = new XmlRpcRequest("simulator_data_request", SendParams);
|
||||||
XmlRpcResponse GridResp = GridReq.Send(m_cfg.GridServerURL, 3000);
|
XmlRpcResponse GridResp = GridReq.Send(m_cfg.GridServerURL, 3000);
|
||||||
|
|
||||||
Hashtable responseData = (Hashtable) GridResp.Value;
|
Hashtable responseData = (Hashtable)GridResp.Value;
|
||||||
|
|
||||||
if (responseData.ContainsKey("error"))
|
if (responseData.ContainsKey("error"))
|
||||||
{
|
{
|
||||||
|
@ -466,23 +466,23 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint regX = Convert.ToUInt32((string) responseData["region_locx"]);
|
uint regX = Convert.ToUInt32((string)responseData["region_locx"]);
|
||||||
uint regY = Convert.ToUInt32((string) responseData["region_locy"]);
|
uint regY = Convert.ToUInt32((string)responseData["region_locy"]);
|
||||||
string internalIpStr = (string) responseData["sim_ip"];
|
string internalIpStr = (string)responseData["sim_ip"];
|
||||||
uint port = Convert.ToUInt32(responseData["sim_port"]);
|
uint port = Convert.ToUInt32(responseData["sim_port"]);
|
||||||
string externalUri = (string) responseData["sim_uri"];
|
string externalUri = (string)responseData["sim_uri"];
|
||||||
string neighbourExternalUri = externalUri;
|
string neighbourExternalUri = externalUri;
|
||||||
|
|
||||||
regionProfile = new RegionProfileData();
|
regionProfile = new RegionProfileData();
|
||||||
regionProfile.httpPort = (uint) Convert.ToInt32((string) responseData["http_port"]);
|
regionProfile.httpPort = (uint)Convert.ToInt32((string)responseData["http_port"]);
|
||||||
regionProfile.httpServerURI = "http://" + internalIpStr + ":" + regionProfile.httpPort + "/";
|
regionProfile.httpServerURI = "http://" + internalIpStr + ":" + regionProfile.httpPort + "/";
|
||||||
regionProfile.regionHandle = Helpers.UIntsToLong((regX * Constants.RegionSize), (regY * Constants.RegionSize));
|
regionProfile.regionHandle = Helpers.UIntsToLong((regX * Constants.RegionSize), (regY * Constants.RegionSize));
|
||||||
regionProfile.regionLocX = regX;
|
regionProfile.regionLocX = regX;
|
||||||
regionProfile.regionLocY = regY;
|
regionProfile.regionLocY = regY;
|
||||||
|
|
||||||
regionProfile.remotingPort = Convert.ToUInt32((string) responseData["remoting_port"]);
|
regionProfile.remotingPort = Convert.ToUInt32((string)responseData["remoting_port"]);
|
||||||
regionProfile.UUID = new LLUUID((string) responseData["region_UUID"]);
|
regionProfile.UUID = new LLUUID((string)responseData["region_UUID"]);
|
||||||
regionProfile.regionName = (string) responseData["region_name"];
|
regionProfile.regionName = (string)responseData["region_name"];
|
||||||
lock (m_regionInfoCache)
|
lock (m_regionInfoCache)
|
||||||
{
|
{
|
||||||
if (!m_regionInfoCache.Contains(regionHandle))
|
if (!m_regionInfoCache.Contains(regionHandle))
|
||||||
|
@ -494,31 +494,31 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
catch (WebException)
|
catch (WebException)
|
||||||
{
|
{
|
||||||
m_log.Error("[GRID]: " +
|
m_log.Error("[GRID]: " +
|
||||||
"Region lookup failed for: " + regionHandle +
|
"Region lookup failed for: " + regionHandle.ToString() +
|
||||||
" - Is the GridServer down?");
|
" - Is the GridServer down?");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return regionProfile;
|
return regionProfile;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool registerWithUserServer()
|
public bool registerWithUserServer ()
|
||||||
{
|
{
|
||||||
Hashtable UserParams = new Hashtable();
|
Hashtable UserParams = new Hashtable();
|
||||||
// Login / Authentication
|
// Login / Authentication
|
||||||
|
|
||||||
if (m_cfg.HttpSSL)
|
if (m_cfg.HttpSSL)
|
||||||
{
|
{
|
||||||
UserParams["uri"] = "https://" + m_cfg.MessageServerIP + ":" + m_cfg.HttpPort;
|
UserParams["uri"] = "https://" + m_cfg.MessageServerIP + ":" + m_cfg.HttpPort;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UserParams["uri"] = "http://" + m_cfg.MessageServerIP + ":" + m_cfg.HttpPort;
|
UserParams["uri"] = "http://" + m_cfg.MessageServerIP + ":" + m_cfg.HttpPort;
|
||||||
}
|
}
|
||||||
|
|
||||||
UserParams["recvkey"] = m_cfg.UserRecvKey;
|
UserParams["recvkey"] = m_cfg.UserRecvKey;
|
||||||
UserParams["sendkey"] = m_cfg.UserRecvKey;
|
UserParams["sendkey"] = m_cfg.UserRecvKey;
|
||||||
|
|
||||||
// Package into an XMLRPC Request
|
// Package into an XMLRPC Request
|
||||||
ArrayList SendParams = new ArrayList();
|
ArrayList SendParams = new ArrayList();
|
||||||
SendParams.Add(UserParams);
|
SendParams.Add(UserParams);
|
||||||
|
@ -530,13 +530,12 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
{
|
{
|
||||||
UserReq = new XmlRpcRequest("register_messageserver", SendParams);
|
UserReq = new XmlRpcRequest("register_messageserver", SendParams);
|
||||||
UserResp = UserReq.Send(m_cfg.UserServerURL, 16000);
|
UserResp = UserReq.Send(m_cfg.UserServerURL, 16000);
|
||||||
}
|
} catch (Exception ex)
|
||||||
catch (Exception ex)
|
|
||||||
{
|
{
|
||||||
m_log.Error("Unable to connect to grid. Grid server not running?");
|
m_log.Error("Unable to connect to grid. Grid server not running?");
|
||||||
throw (ex);
|
throw(ex);
|
||||||
}
|
}
|
||||||
Hashtable GridRespData = (Hashtable) UserResp.Value;
|
Hashtable GridRespData = (Hashtable)UserResp.Value;
|
||||||
Hashtable griddatahash = GridRespData;
|
Hashtable griddatahash = GridRespData;
|
||||||
|
|
||||||
// Process Response
|
// Process Response
|
||||||
|
@ -584,7 +583,7 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
m_log.Error("Unable to connect to grid. Grid server not running?");
|
m_log.Error("Unable to connect to grid. Grid server not running?");
|
||||||
throw (ex);
|
throw (ex);
|
||||||
}
|
}
|
||||||
Hashtable UserRespData = (Hashtable) UserResp.Value;
|
Hashtable UserRespData = (Hashtable)UserResp.Value;
|
||||||
Hashtable userdatahash = UserRespData;
|
Hashtable userdatahash = UserRespData;
|
||||||
|
|
||||||
// Process Response
|
// Process Response
|
||||||
|
@ -600,4 +599,4 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,16 +35,21 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
{
|
{
|
||||||
public class PresenceInformer
|
public class PresenceInformer
|
||||||
{
|
{
|
||||||
|
public UserPresenceData presence1 = null;
|
||||||
|
public UserPresenceData presence2 = null;
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
public UserPresenceData presence1;
|
|
||||||
public UserPresenceData presence2;
|
|
||||||
|
|
||||||
|
public PresenceInformer()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
public void go(object o)
|
public void go(object o)
|
||||||
{
|
{
|
||||||
if (presence1 != null && presence2 != null)
|
if (presence1 != null && presence2 != null)
|
||||||
{
|
{
|
||||||
SendRegionPresenceUpdate(presence1, presence2);
|
SendRegionPresenceUpdate(presence1, presence2);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -69,4 +74,4 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
XmlRpcResponse RegionResp = RegionReq.Send(whichRegion.httpServerURI, 6000);
|
XmlRpcResponse RegionResp = RegionReq.Send(whichRegion.httpServerURI, 6000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,9 +36,13 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
public class UserPresenceData
|
public class UserPresenceData
|
||||||
{
|
{
|
||||||
public AgentCircuitData agentData = new AgentCircuitData();
|
public AgentCircuitData agentData = new AgentCircuitData();
|
||||||
public List<FriendListItem> friendData = new List<FriendListItem>();
|
|
||||||
public string httpURI = String.Empty;
|
|
||||||
public RegionProfileData regionData = new RegionProfileData();
|
public RegionProfileData regionData = new RegionProfileData();
|
||||||
|
public string httpURI = String.Empty;
|
||||||
|
public List<FriendListItem> friendData = new List<FriendListItem> ();
|
||||||
public List<LLUUID> subscriptionData = new List<LLUUID>();
|
public List<LLUUID> subscriptionData = new List<LLUUID>();
|
||||||
|
|
||||||
|
public UserPresenceData()
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,4 +30,4 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
public class WorkUnitBase
|
public class WorkUnitBase
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,4 +30,4 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
public class WorkUnitPresenceUpdate : WorkUnitBase
|
public class WorkUnitPresenceUpdate : WorkUnitBase
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,26 +48,28 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
: base("GET", "/presence")
|
: base("GET", "/presence")
|
||||||
{
|
{
|
||||||
m_log.Info("[REST]: In Get Request");
|
m_log.Info("[REST]: In Get Request");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream request)
|
public override byte[] Handle(string path, Stream request)
|
||||||
{
|
{
|
||||||
string param = GetParam(path);
|
string param = GetParam(path);
|
||||||
byte[] result = new byte[] {};
|
byte[] result = new byte[] {};
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
string[] p = param.Split(new[] {'/', '?', '&'}, StringSplitOptions.RemoveEmptyEntries);
|
string[] p = param.Split(new char[] {'/', '?', '&'}, StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
|
||||||
if (p.Length > 0)
|
if (p.Length > 0)
|
||||||
{
|
{
|
||||||
LLUUID assetID = null;
|
LLUUID assetID = null;
|
||||||
|
|
||||||
if (!LLUUID.TryParse(p[0], out assetID))
|
if (!LLUUID.TryParse(p[0], out assetID))
|
||||||
{
|
{
|
||||||
m_log.InfoFormat(
|
m_log.InfoFormat(
|
||||||
"[REST]: GET:/presence ignoring request with malformed UUID {0}", p[0]);
|
"[REST]: GET:/presence ignoring request with malformed UUID {0}", p[0]);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
@ -82,11 +84,6 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
public PostXMPPStreamHandler()
|
|
||||||
: base("POST", "/presence")
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public override byte[] Handle(string path, Stream request)
|
public override byte[] Handle(string path, Stream request)
|
||||||
{
|
{
|
||||||
string param = GetParam(path);
|
string param = GetParam(path);
|
||||||
|
@ -100,5 +97,12 @@ namespace OpenSim.Grid.MessagingServer
|
||||||
|
|
||||||
return new byte[] {};
|
return new byte[] {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PostXMPPStreamHandler()
|
||||||
|
: base("POST", "/presence")
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@ namespace OpenSim.Grid.ScriptServer
|
||||||
XmlConfigurator.Configure();
|
XmlConfigurator.Configure();
|
||||||
|
|
||||||
AppDomain.CurrentDomain.UnhandledException +=
|
AppDomain.CurrentDomain.UnhandledException +=
|
||||||
CurrentDomain_UnhandledException;
|
new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
|
||||||
|
|
||||||
// Application is starting
|
// Application is starting
|
||||||
SE = new ScriptServerMain();
|
SE = new ScriptServerMain();
|
||||||
|
@ -50,9 +50,9 @@ namespace OpenSim.Grid.ScriptServer
|
||||||
Console.WriteLine(String.Empty);
|
Console.WriteLine(String.Empty);
|
||||||
Console.WriteLine("APPLICATION EXCEPTION DETECTED");
|
Console.WriteLine("APPLICATION EXCEPTION DETECTED");
|
||||||
Console.WriteLine(String.Empty);
|
Console.WriteLine(String.Empty);
|
||||||
Console.WriteLine("Application is terminating: " + e.IsTerminating);
|
Console.WriteLine("Application is terminating: " + e.IsTerminating.ToString());
|
||||||
//Console.WriteLine("Exception:");
|
//Console.WriteLine("Exception:");
|
||||||
//Console.WriteLine(e.ExceptionObject.ToString());
|
//Console.WriteLine(e.ExceptionObject.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ using OpenSim.Region.Environment.Scenes;
|
||||||
|
|
||||||
namespace OpenSim.Grid.ScriptServer
|
namespace OpenSim.Grid.ScriptServer
|
||||||
{
|
{
|
||||||
public class FakeScene : Scene
|
public class FakeScene: Scene
|
||||||
{
|
{
|
||||||
public FakeScene(RegionInfo regInfo, AgentCircuitManager authen, PermissionManager permissionManager,
|
public FakeScene(RegionInfo regInfo, AgentCircuitManager authen, PermissionManager permissionManager,
|
||||||
CommunicationsManager commsMan, SceneCommunicationService sceneGridService,
|
CommunicationsManager commsMan, SceneCommunicationService sceneGridService,
|
||||||
|
@ -48,4 +48,4 @@ namespace OpenSim.Grid.ScriptServer
|
||||||
|
|
||||||
// What does a scene have to do? :P
|
// What does a scene have to do? :P
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,4 +60,4 @@ using System.Runtime.InteropServices;
|
||||||
//
|
//
|
||||||
|
|
||||||
[assembly : AssemblyVersion("1.0.0.0")]
|
[assembly : AssemblyVersion("1.0.0.0")]
|
||||||
[assembly : AssemblyFileVersion("1.0.0.0")]
|
[assembly : AssemblyFileVersion("1.0.0.0")]
|
||||||
|
|
|
@ -34,13 +34,9 @@ namespace OpenSim.Grid.ScriptServer
|
||||||
{
|
{
|
||||||
// This object will be exposed over remoting. It is a singleton, so it exists only in as one instance.
|
// This object will be exposed over remoting. It is a singleton, so it exists only in as one instance.
|
||||||
|
|
||||||
#region ServerRemotingObject Members
|
|
||||||
|
|
||||||
ScriptServerInterfaces.RemoteEvents ScriptServerInterfaces.ServerRemotingObject.Events()
|
ScriptServerInterfaces.RemoteEvents ScriptServerInterfaces.ServerRemotingObject.Events()
|
||||||
{
|
{
|
||||||
return ScriptServerMain.Engine.EventManager();
|
return ScriptServerMain.Engine.EventManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,10 +31,9 @@ using System.Runtime.Remoting.Channels.Tcp;
|
||||||
|
|
||||||
namespace OpenSim.Grid.ScriptServer
|
namespace OpenSim.Grid.ScriptServer
|
||||||
{
|
{
|
||||||
internal class RemotingServer
|
class RemotingServer
|
||||||
{
|
{
|
||||||
private readonly TcpChannel channel;
|
TcpChannel channel;
|
||||||
|
|
||||||
public RemotingServer(int port, string instanceName)
|
public RemotingServer(int port, string instanceName)
|
||||||
{
|
{
|
||||||
// Create an instance of a channel
|
// Create an instance of a channel
|
||||||
|
@ -43,9 +42,9 @@ namespace OpenSim.Grid.ScriptServer
|
||||||
|
|
||||||
// Register as an available service with the name HelloWorld
|
// Register as an available service with the name HelloWorld
|
||||||
RemotingConfiguration.RegisterWellKnownServiceType(
|
RemotingConfiguration.RegisterWellKnownServiceType(
|
||||||
typeof (RemotingObject),
|
typeof(RemotingObject),
|
||||||
instanceName,
|
instanceName,
|
||||||
WellKnownObjectMode.Singleton);
|
WellKnownObjectMode.Singleton);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,13 +32,8 @@ namespace OpenSim.Grid.ScriptServer.ScriptServer.Region
|
||||||
// These are events that the region needs to have
|
// These are events that the region needs to have
|
||||||
|
|
||||||
// TEMP: Using System.Delegate -- needs replacing with a real delegate
|
// TEMP: Using System.Delegate -- needs replacing with a real delegate
|
||||||
|
|
||||||
#region Delegates
|
|
||||||
|
|
||||||
public delegate void DefaultDelegate();
|
public delegate void DefaultDelegate();
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
public event DefaultDelegate onScriptRez;
|
public event DefaultDelegate onScriptRez;
|
||||||
public event DefaultDelegate onstate_entry;
|
public event DefaultDelegate onstate_entry;
|
||||||
public event DefaultDelegate onstate_exit;
|
public event DefaultDelegate onstate_exit;
|
||||||
|
|
|
@ -29,8 +29,8 @@ namespace OpenSim.Grid.ScriptServer.ScriptServer.Region
|
||||||
{
|
{
|
||||||
public class RegionConnectionManager : RegionBase
|
public class RegionConnectionManager : RegionBase
|
||||||
{
|
{
|
||||||
private object m_Connection;
|
|
||||||
private ScriptServerMain m_ScriptServerMain;
|
private ScriptServerMain m_ScriptServerMain;
|
||||||
|
private object m_Connection;
|
||||||
|
|
||||||
public RegionConnectionManager(ScriptServerMain scm, object Connection)
|
public RegionConnectionManager(ScriptServerMain scm, object Connection)
|
||||||
{
|
{
|
||||||
|
|
|
@ -34,10 +34,12 @@ namespace OpenSim.Grid.ScriptServer.ScriptServer
|
||||||
{
|
{
|
||||||
internal class RegionCommManager
|
internal class RegionCommManager
|
||||||
{
|
{
|
||||||
private readonly ScriptServerMain m_ScriptServerMain;
|
|
||||||
private readonly List<RegionConnectionManager> Regions = new List<RegionConnectionManager>();
|
|
||||||
private Thread listenThread;
|
private Thread listenThread;
|
||||||
|
|
||||||
|
private List<RegionConnectionManager> Regions = new List<RegionConnectionManager>();
|
||||||
|
|
||||||
|
private ScriptServerMain m_ScriptServerMain;
|
||||||
|
|
||||||
public RegionCommManager(ScriptServerMain scm)
|
public RegionCommManager(ScriptServerMain scm)
|
||||||
{
|
{
|
||||||
m_ScriptServerMain = scm;
|
m_ScriptServerMain = scm;
|
||||||
|
|
|
@ -51,7 +51,7 @@ namespace OpenSim.Grid.ScriptServer.ScriptServer
|
||||||
{
|
{
|
||||||
m_log.Error("[ScriptEngine]: " +
|
m_log.Error("[ScriptEngine]: " +
|
||||||
"Error loading assembly \"" + EngineName + "\": " + e.Message + ", " +
|
"Error loading assembly \"" + EngineName + "\": " + e.Message + ", " +
|
||||||
e.StackTrace);
|
e.StackTrace.ToString());
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -104,7 +104,7 @@ namespace OpenSim.Grid.ScriptServer.ScriptServer
|
||||||
ScriptServerInterfaces.ScriptEngine ret;
|
ScriptServerInterfaces.ScriptEngine ret;
|
||||||
//try
|
//try
|
||||||
//{
|
//{
|
||||||
ret = (ScriptServerInterfaces.ScriptEngine) Activator.CreateInstance(t);
|
ret = (ScriptServerInterfaces.ScriptEngine)Activator.CreateInstance(t);
|
||||||
//}
|
//}
|
||||||
//catch (Exception e)
|
//catch (Exception e)
|
||||||
//{
|
//{
|
||||||
|
@ -114,4 +114,4 @@ namespace OpenSim.Grid.ScriptServer.ScriptServer
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,8 +32,8 @@ namespace OpenSim.Grid.ScriptServer.ScriptServer
|
||||||
{
|
{
|
||||||
internal class ScriptEngineManager
|
internal class ScriptEngineManager
|
||||||
{
|
{
|
||||||
private readonly ScriptEngineLoader ScriptEngineLoader;
|
private ScriptEngineLoader ScriptEngineLoader;
|
||||||
private readonly List<ScriptServerInterfaces.ScriptEngine> scriptEngines = new List<ScriptServerInterfaces.ScriptEngine>();
|
private List<ScriptServerInterfaces.ScriptEngine> scriptEngines = new List<ScriptServerInterfaces.ScriptEngine>();
|
||||||
private ScriptServerMain m_ScriptServerMain;
|
private ScriptServerMain m_ScriptServerMain;
|
||||||
|
|
||||||
// Initialize
|
// Initialize
|
||||||
|
@ -58,4 +58,4 @@ namespace OpenSim.Grid.ScriptServer.ScriptServer
|
||||||
return sei;
|
return sei;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,20 +44,20 @@ namespace OpenSim.Grid.ScriptServer
|
||||||
//
|
//
|
||||||
// Root object. Creates objects used.
|
// Root object. Creates objects used.
|
||||||
//
|
//
|
||||||
|
private int listenPort = 8010;
|
||||||
|
|
||||||
// TEMP
|
// TEMP
|
||||||
public static ScriptServerInterfaces.ScriptEngine Engine;
|
public static ScriptServerInterfaces.ScriptEngine Engine;
|
||||||
private int listenPort = 8010;
|
|
||||||
//public static FakeScene m_Scene = new FakeScene(null,null,null,null,null,null,null,null,null,false, false, false);
|
//public static FakeScene m_Scene = new FakeScene(null,null,null,null,null,null,null,null,null,false, false, false);
|
||||||
|
|
||||||
// Objects we use
|
// Objects we use
|
||||||
|
internal RegionCommManager RegionScriptDaemon; // Listen for incoming from region
|
||||||
|
internal ScriptEngineManager ScriptEngines; // Loads scriptengines
|
||||||
//internal RemotingServer m_RemotingServer;
|
//internal RemotingServer m_RemotingServer;
|
||||||
internal TCPServer m_TCPServer;
|
internal TCPServer m_TCPServer;
|
||||||
internal RegionCommManager RegionScriptDaemon; // Listen for incoming from region
|
|
||||||
internal TRPC_Remote RPC;
|
internal TRPC_Remote RPC;
|
||||||
internal ScriptEngineManager ScriptEngines; // Loads scriptengines
|
|
||||||
|
|
||||||
public ScriptServerMain()
|
public ScriptServerMain()
|
||||||
{
|
{
|
||||||
m_console = CreateConsole();
|
m_console = CreateConsole();
|
||||||
|
|
||||||
|
@ -68,13 +68,13 @@ namespace OpenSim.Grid.ScriptServer
|
||||||
Engine = ScriptEngines.LoadEngine("DotNetEngine");
|
Engine = ScriptEngines.LoadEngine("DotNetEngine");
|
||||||
|
|
||||||
Engine.InitializeEngine(null, null, false, Engine.GetScriptManager());
|
Engine.InitializeEngine(null, null, false, Engine.GetScriptManager());
|
||||||
|
|
||||||
|
|
||||||
// Set up server
|
// Set up server
|
||||||
//m_RemotingServer = new RemotingServer(listenPort, "DotNetEngine");
|
//m_RemotingServer = new RemotingServer(listenPort, "DotNetEngine");
|
||||||
m_TCPServer = new TCPServer(listenPort);
|
m_TCPServer = new TCPServer(listenPort);
|
||||||
RPC = new TRPC_Remote(m_TCPServer);
|
RPC = new TRPC_Remote(m_TCPServer);
|
||||||
RPC.ReceiveCommand += RPC_ReceiveCommand;
|
RPC.ReceiveCommand += new TRPC_Remote.ReceiveCommandDelegate(RPC_ReceiveCommand);
|
||||||
m_TCPServer.StartListen();
|
m_TCPServer.StartListen();
|
||||||
|
|
||||||
Console.ReadLine();
|
Console.ReadLine();
|
||||||
|
@ -93,7 +93,7 @@ namespace OpenSim.Grid.ScriptServer
|
||||||
|
|
||||||
if (Command == "OnRezScript")
|
if (Command == "OnRezScript")
|
||||||
{
|
{
|
||||||
Engine.EventManager().OnRezScript((uint) p[0], new LLUUID((string) p[1]), (string) p[2]);
|
Engine.EventManager().OnRezScript((uint)p[0], new LLUUID((string)p[1]), (string)p[2]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,4 +106,4 @@ namespace OpenSim.Grid.ScriptServer
|
||||||
return new ConsoleBase("ScriptServer", this);
|
return new ConsoleBase("ScriptServer", this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,61 +48,12 @@ namespace OpenSim.Grid.UserServer
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private UserConfig Cfg;
|
private UserConfig Cfg;
|
||||||
private LLUUID m_lastCreatedUser = LLUUID.Random();
|
|
||||||
|
|
||||||
public UserLoginService m_loginService;
|
|
||||||
public MessageServersConnector m_messagesService;
|
|
||||||
public UserManager m_userManager;
|
public UserManager m_userManager;
|
||||||
|
public UserLoginService m_loginService;
|
||||||
|
public MessageServersConnector m_messagesService;
|
||||||
|
|
||||||
private OpenUser_Main()
|
private LLUUID m_lastCreatedUser = LLUUID.Random();
|
||||||
{
|
|
||||||
m_console = new ConsoleBase("OpenUser", this);
|
|
||||||
MainConsole.Instance = m_console;
|
|
||||||
}
|
|
||||||
|
|
||||||
#region conscmd_callback Members
|
|
||||||
|
|
||||||
public override void RunCmd(string cmd, string[] cmdparams)
|
|
||||||
{
|
|
||||||
base.RunCmd(cmd, cmdparams);
|
|
||||||
|
|
||||||
switch (cmd)
|
|
||||||
{
|
|
||||||
case "help":
|
|
||||||
m_console.Notice("create user - create a new user");
|
|
||||||
m_console.Notice("stats - statistical information for this server");
|
|
||||||
m_console.Notice("shutdown - shutdown the grid (USE CAUTION!)");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "create":
|
|
||||||
do_create(cmdparams[0]);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "shutdown":
|
|
||||||
m_loginService.OnUserLoggedInAtLocation -= NotifyMessageServersUserLoggedInToLocation;
|
|
||||||
m_console.Close();
|
|
||||||
Environment.Exit(0);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "stats":
|
|
||||||
m_console.Notice(StatsManager.UserStats.Report());
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "test-inventory":
|
|
||||||
// RestObjectPosterResponse<List<InventoryFolderBase>> requester = new RestObjectPosterResponse<List<InventoryFolderBase>>();
|
|
||||||
// requester.ReturnResponseVal = TestResponse;
|
|
||||||
// requester.BeginPostObject<LLUUID>(m_userManager._config.InventoryUrl + "RootFolders/", m_lastCreatedUser);
|
|
||||||
SynchronousRestObjectPoster.BeginPostObject<LLUUID, List<InventoryFolderBase>>("POST",
|
|
||||||
m_userManager.
|
|
||||||
_config.
|
|
||||||
InventoryUrl +
|
|
||||||
"RootFolders/",
|
|
||||||
m_lastCreatedUser);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
[STAThread]
|
[STAThread]
|
||||||
public static void Main(string[] args)
|
public static void Main(string[] args)
|
||||||
|
@ -117,6 +68,12 @@ namespace OpenSim.Grid.UserServer
|
||||||
userserver.Work();
|
userserver.Work();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private OpenUser_Main()
|
||||||
|
{
|
||||||
|
m_console = new ConsoleBase("OpenUser", this);
|
||||||
|
MainConsole.Instance = m_console;
|
||||||
|
}
|
||||||
|
|
||||||
private void Work()
|
private void Work()
|
||||||
{
|
{
|
||||||
m_console.Notice("Enter help for a list of commands\n");
|
m_console.Notice("Enter help for a list of commands\n");
|
||||||
|
@ -130,16 +87,16 @@ namespace OpenSim.Grid.UserServer
|
||||||
public void Startup()
|
public void Startup()
|
||||||
{
|
{
|
||||||
Cfg = new UserConfig("USER SERVER", (Path.Combine(Util.configDir(), "UserServer_Config.xml")));
|
Cfg = new UserConfig("USER SERVER", (Path.Combine(Util.configDir(), "UserServer_Config.xml")));
|
||||||
|
|
||||||
StatsManager.StartCollectingUserStats();
|
StatsManager.StartCollectingUserStats();
|
||||||
|
|
||||||
m_log.Info("[REGION]: Establishing data connection");
|
m_log.Info("[REGION]: Establishing data connection");
|
||||||
m_userManager = new UserManager();
|
m_userManager = new UserManager();
|
||||||
m_userManager._config = Cfg;
|
m_userManager._config = Cfg;
|
||||||
m_userManager.AddPlugin(Cfg.DatabaseProvider);
|
m_userManager.AddPlugin(Cfg.DatabaseProvider);
|
||||||
|
|
||||||
m_loginService = new UserLoginService(
|
m_loginService = new UserLoginService(
|
||||||
m_userManager, new LibraryRootFolder(), Cfg, Cfg.DefaultStartupMsg);
|
m_userManager, new LibraryRootFolder(), Cfg, Cfg.DefaultStartupMsg);
|
||||||
|
|
||||||
m_messagesService = new MessageServersConnector();
|
m_messagesService = new MessageServersConnector();
|
||||||
|
|
||||||
|
@ -147,7 +104,7 @@ namespace OpenSim.Grid.UserServer
|
||||||
m_userManager.OnLogOffUser += NotifyMessageServersUserLoggOff;
|
m_userManager.OnLogOffUser += NotifyMessageServersUserLoggOff;
|
||||||
|
|
||||||
m_log.Info("[REGION]: Starting HTTP process");
|
m_log.Info("[REGION]: Starting HTTP process");
|
||||||
|
|
||||||
m_httpServer = new BaseHttpServer(Cfg.HttpPort);
|
m_httpServer = new BaseHttpServer(Cfg.HttpPort);
|
||||||
AddHttpHandlers();
|
AddHttpHandlers();
|
||||||
m_httpServer.Start();
|
m_httpServer.Start();
|
||||||
|
@ -160,7 +117,7 @@ namespace OpenSim.Grid.UserServer
|
||||||
m_httpServer.AddXmlRPCHandler("login_to_simulator", m_loginService.XmlRpcLoginMethod);
|
m_httpServer.AddXmlRPCHandler("login_to_simulator", m_loginService.XmlRpcLoginMethod);
|
||||||
|
|
||||||
m_httpServer.AddHTTPHandler("login", m_loginService.ProcessHTMLLogin);
|
m_httpServer.AddHTTPHandler("login", m_loginService.ProcessHTMLLogin);
|
||||||
|
|
||||||
m_httpServer.SetLLSDHandler(m_loginService.LLSDLoginMethod);
|
m_httpServer.SetLLSDHandler(m_loginService.LLSDLoginMethod);
|
||||||
|
|
||||||
m_httpServer.AddXmlRPCHandler("get_user_by_name", m_userManager.XmlRPCGetUserMethodName);
|
m_httpServer.AddXmlRPCHandler("get_user_by_name", m_userManager.XmlRPCGetUserMethodName);
|
||||||
|
@ -171,7 +128,7 @@ namespace OpenSim.Grid.UserServer
|
||||||
m_httpServer.AddXmlRPCHandler("update_user_friend_perms", m_userManager.XmlRpcResponseXmlRPCUpdateUserFriendPerms);
|
m_httpServer.AddXmlRPCHandler("update_user_friend_perms", m_userManager.XmlRpcResponseXmlRPCUpdateUserFriendPerms);
|
||||||
m_httpServer.AddXmlRPCHandler("get_user_friend_list", m_userManager.XmlRpcResponseXmlRPCGetUserFriendList);
|
m_httpServer.AddXmlRPCHandler("get_user_friend_list", m_userManager.XmlRpcResponseXmlRPCGetUserFriendList);
|
||||||
m_httpServer.AddXmlRPCHandler("logout_of_simulator", m_userManager.XmlRPCLogOffUserMethodUUID);
|
m_httpServer.AddXmlRPCHandler("logout_of_simulator", m_userManager.XmlRPCLogOffUserMethodUUID);
|
||||||
|
|
||||||
// Message Server ---> User Server
|
// Message Server ---> User Server
|
||||||
m_httpServer.AddXmlRPCHandler("register_messageserver", m_messagesService.XmlRPCRegisterMessageServer);
|
m_httpServer.AddXmlRPCHandler("register_messageserver", m_messagesService.XmlRPCRegisterMessageServer);
|
||||||
m_httpServer.AddXmlRPCHandler("agent_change_region", m_messagesService.XmlRPCUserMovedtoRegion);
|
m_httpServer.AddXmlRPCHandler("agent_change_region", m_messagesService.XmlRPCUserMovedtoRegion);
|
||||||
|
@ -206,17 +163,17 @@ namespace OpenSim.Grid.UserServer
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat(
|
m_log.ErrorFormat(
|
||||||
"[USERS]: A user with the name {0} {1} already exists!", tempfirstname, templastname);
|
"[USERS]: A user with the name {0} {1} already exists!", tempfirstname, templastname);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
tempMD5Passwd = Util.Md5Hash(Util.Md5Hash(tempMD5Passwd) + ":" + String.Empty);
|
tempMD5Passwd = Util.Md5Hash(Util.Md5Hash(tempMD5Passwd) + ":" + String.Empty);
|
||||||
|
|
||||||
LLUUID userID = new LLUUID();
|
LLUUID userID = new LLUUID();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
userID = m_userManager.AddUserProfile(tempfirstname, templastname, tempMD5Passwd, regX, regY);
|
userID = m_userManager.AddUserProfile(tempfirstname, templastname, tempMD5Passwd, regX, regY);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[USERS]: Error creating user: {0}", ex.ToString());
|
m_log.ErrorFormat("[USERS]: Error creating user: {0}", ex.ToString());
|
||||||
|
@ -224,35 +181,76 @@ namespace OpenSim.Grid.UserServer
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
bool created
|
bool created
|
||||||
= SynchronousRestObjectPoster.BeginPostObject<Guid, bool>(
|
= SynchronousRestObjectPoster.BeginPostObject<Guid, bool>(
|
||||||
"POST", m_userManager._config.InventoryUrl + "CreateInventory/", userID.UUID);
|
"POST", m_userManager._config.InventoryUrl + "CreateInventory/", userID.UUID);
|
||||||
|
|
||||||
if (!created)
|
if (!created)
|
||||||
{
|
{
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
String.Format(
|
String.Format(
|
||||||
"The inventory creation request for user {0} did not succeed."
|
"The inventory creation request for user {0} did not succeed."
|
||||||
+ " Please contact your inventory service provider for more information.",
|
+ " Please contact your inventory service provider for more information.",
|
||||||
userID));
|
userID));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (WebException e)
|
catch (WebException e)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat(
|
m_log.ErrorFormat(
|
||||||
"[USERS]: Could not contact the inventory service at {0} to create an inventory for {1}",
|
"[USERS]: Could not contact the inventory service at {0} to create an inventory for {1}",
|
||||||
m_userManager._config.InventoryUrl + "CreateInventory/", userID.UUID);
|
m_userManager._config.InventoryUrl + "CreateInventory/", userID.UUID);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[USERS]: Error creating inventory for user: {0}", e);
|
m_log.ErrorFormat("[USERS]: Error creating inventory for user: {0}", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_lastCreatedUser = userID;
|
m_lastCreatedUser = userID;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void RunCmd(string cmd, string[] cmdparams)
|
||||||
|
{
|
||||||
|
base.RunCmd(cmd, cmdparams);
|
||||||
|
|
||||||
|
switch (cmd)
|
||||||
|
{
|
||||||
|
case "help":
|
||||||
|
m_console.Notice("create user - create a new user");
|
||||||
|
m_console.Notice("stats - statistical information for this server");
|
||||||
|
m_console.Notice("shutdown - shutdown the grid (USE CAUTION!)");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "create":
|
||||||
|
do_create(cmdparams[0]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "shutdown":
|
||||||
|
m_loginService.OnUserLoggedInAtLocation -= NotifyMessageServersUserLoggedInToLocation;
|
||||||
|
m_console.Close();
|
||||||
|
Environment.Exit(0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "stats":
|
||||||
|
m_console.Notice(StatsManager.UserStats.Report());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "test-inventory":
|
||||||
|
// RestObjectPosterResponse<List<InventoryFolderBase>> requester = new RestObjectPosterResponse<List<InventoryFolderBase>>();
|
||||||
|
// requester.ReturnResponseVal = TestResponse;
|
||||||
|
// requester.BeginPostObject<LLUUID>(m_userManager._config.InventoryUrl + "RootFolders/", m_lastCreatedUser);
|
||||||
|
SynchronousRestObjectPoster.BeginPostObject<LLUUID, List<InventoryFolderBase>>("POST",
|
||||||
|
m_userManager.
|
||||||
|
_config.
|
||||||
|
InventoryUrl +
|
||||||
|
"RootFolders/",
|
||||||
|
m_lastCreatedUser);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void TestResponse(List<InventoryFolderBase> resp)
|
public void TestResponse(List<InventoryFolderBase> resp)
|
||||||
{
|
{
|
||||||
m_console.Notice("response got");
|
m_console.Notice("response got");
|
||||||
|
@ -264,11 +262,12 @@ namespace OpenSim.Grid.UserServer
|
||||||
}
|
}
|
||||||
|
|
||||||
public void NotifyMessageServersUserLoggedInToLocation(LLUUID agentID, LLUUID sessionID, LLUUID RegionID,
|
public void NotifyMessageServersUserLoggedInToLocation(LLUUID agentID, LLUUID sessionID, LLUUID RegionID,
|
||||||
ulong regionhandle, float positionX, float positionY,
|
ulong regionhandle, float positionX, float positionY,
|
||||||
float positionZ, string firstname, string lastname)
|
float positionZ, string firstname, string lastname)
|
||||||
{
|
{
|
||||||
m_messagesService.TellMessageServersAboutUser(agentID, sessionID, RegionID, regionhandle, positionX,
|
|
||||||
positionY, positionZ, firstname, lastname);
|
m_messagesService.TellMessageServersAboutUser( agentID, sessionID, RegionID, regionhandle, positionX,
|
||||||
|
positionY, positionZ, firstname, lastname);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,12 +41,12 @@ namespace OpenSim.Grid.UserServer
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
public Dictionary<string, MessageServerInfo> MessageServers;
|
public Dictionary<string, MessageServerInfo> MessageServers;
|
||||||
|
|
||||||
public MessageServersConnector()
|
public MessageServersConnector()
|
||||||
{
|
{
|
||||||
MessageServers = new Dictionary<string, MessageServerInfo>();
|
MessageServers = new Dictionary<string, MessageServerInfo>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RegisterMessageServer(string URI, MessageServerInfo serverData)
|
public void RegisterMessageServer(string URI, MessageServerInfo serverData)
|
||||||
{
|
{
|
||||||
lock (MessageServers)
|
lock (MessageServers)
|
||||||
|
@ -55,7 +55,7 @@ namespace OpenSim.Grid.UserServer
|
||||||
MessageServers.Add(URI, serverData);
|
MessageServers.Add(URI, serverData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DeRegisterMessageServer(string URI)
|
public void DeRegisterMessageServer(string URI)
|
||||||
{
|
{
|
||||||
lock (MessageServers)
|
lock (MessageServers)
|
||||||
|
@ -64,7 +64,7 @@ namespace OpenSim.Grid.UserServer
|
||||||
MessageServers.Remove(URI);
|
MessageServers.Remove(URI);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddResponsibleRegion(string URI, ulong regionhandle)
|
public void AddResponsibleRegion(string URI, ulong regionhandle)
|
||||||
{
|
{
|
||||||
if (!MessageServers.ContainsKey(URI))
|
if (!MessageServers.ContainsKey(URI))
|
||||||
|
@ -76,9 +76,8 @@ namespace OpenSim.Grid.UserServer
|
||||||
MessageServerInfo msginfo = MessageServers["URI"];
|
MessageServerInfo msginfo = MessageServers["URI"];
|
||||||
msginfo.responsibleForRegions.Add(regionhandle);
|
msginfo.responsibleForRegions.Add(regionhandle);
|
||||||
MessageServers["URI"] = msginfo;
|
MessageServers["URI"] = msginfo;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RemoveResponsibleRegion(string URI, ulong regionhandle)
|
public void RemoveResponsibleRegion(string URI, ulong regionhandle)
|
||||||
{
|
{
|
||||||
if (!MessageServers.ContainsKey(URI))
|
if (!MessageServers.ContainsKey(URI))
|
||||||
|
@ -93,20 +92,20 @@ namespace OpenSim.Grid.UserServer
|
||||||
msginfo.responsibleForRegions.Remove(regionhandle);
|
msginfo.responsibleForRegions.Remove(regionhandle);
|
||||||
MessageServers["URI"] = msginfo;
|
MessageServers["URI"] = msginfo;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
}
|
||||||
public XmlRpcResponse XmlRPCRegisterMessageServer(XmlRpcRequest request)
|
public XmlRpcResponse XmlRPCRegisterMessageServer(XmlRpcRequest request)
|
||||||
{
|
{
|
||||||
XmlRpcResponse response = new XmlRpcResponse();
|
XmlRpcResponse response = new XmlRpcResponse();
|
||||||
Hashtable requestData = (Hashtable) request.Params[0];
|
Hashtable requestData = (Hashtable)request.Params[0];
|
||||||
Hashtable responseData = new Hashtable();
|
Hashtable responseData = new Hashtable();
|
||||||
|
|
||||||
if (requestData.Contains("uri"))
|
if (requestData.Contains("uri"))
|
||||||
{
|
{
|
||||||
string URI = (string) requestData["uri"];
|
string URI = (string)requestData["uri"];
|
||||||
string sendkey = (string) requestData["sendkey"];
|
string sendkey=(string)requestData["sendkey"];
|
||||||
string recvkey = (string) requestData["recvkey"];
|
string recvkey=(string)requestData["recvkey"];
|
||||||
MessageServerInfo m = new MessageServerInfo();
|
MessageServerInfo m = new MessageServerInfo();
|
||||||
m.URI = URI;
|
m.URI = URI;
|
||||||
m.sendkey = sendkey;
|
m.sendkey = sendkey;
|
||||||
|
@ -117,16 +116,15 @@ namespace OpenSim.Grid.UserServer
|
||||||
}
|
}
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
public XmlRpcResponse XmlRPCDeRegisterMessageServer(XmlRpcRequest request)
|
public XmlRpcResponse XmlRPCDeRegisterMessageServer(XmlRpcRequest request)
|
||||||
{
|
{
|
||||||
XmlRpcResponse response = new XmlRpcResponse();
|
XmlRpcResponse response = new XmlRpcResponse();
|
||||||
Hashtable requestData = (Hashtable) request.Params[0];
|
Hashtable requestData = (Hashtable)request.Params[0];
|
||||||
Hashtable responseData = new Hashtable();
|
Hashtable responseData = new Hashtable();
|
||||||
|
|
||||||
if (requestData.Contains("uri"))
|
if (requestData.Contains("uri"))
|
||||||
{
|
{
|
||||||
string URI = (string) requestData["uri"];
|
string URI = (string)requestData["uri"];
|
||||||
|
|
||||||
DeRegisterMessageServer(URI);
|
DeRegisterMessageServer(URI);
|
||||||
responseData["responsestring"] = "TRUE";
|
responseData["responsestring"] = "TRUE";
|
||||||
|
@ -134,24 +132,23 @@ namespace OpenSim.Grid.UserServer
|
||||||
}
|
}
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
public XmlRpcResponse XmlRPCUserMovedtoRegion(XmlRpcRequest request)
|
public XmlRpcResponse XmlRPCUserMovedtoRegion(XmlRpcRequest request)
|
||||||
{
|
{
|
||||||
XmlRpcResponse response = new XmlRpcResponse();
|
XmlRpcResponse response = new XmlRpcResponse();
|
||||||
Hashtable requestData = (Hashtable) request.Params[0];
|
Hashtable requestData = (Hashtable)request.Params[0];
|
||||||
Hashtable responseData = new Hashtable();
|
Hashtable responseData = new Hashtable();
|
||||||
|
|
||||||
if (requestData.Contains("fromuri"))
|
if (requestData.Contains("fromuri"))
|
||||||
{
|
{
|
||||||
string sURI = (string) requestData["fromuri"];
|
string sURI = (string)requestData["fromuri"];
|
||||||
string sagentID = (string) requestData["agentid"];
|
string sagentID = (string)requestData["agentid"];
|
||||||
string ssessionID = (string) requestData["sessionid"];
|
string ssessionID = (string)requestData["sessionid"];
|
||||||
string scurrentRegionID = (string) requestData["regionid"];
|
string scurrentRegionID = (string)requestData["regionid"];
|
||||||
string sregionhandle = (string) requestData["regionhandle"];
|
string sregionhandle = (string)requestData["regionhandle"];
|
||||||
string scurrentpos = (string) requestData["currentpos"];
|
string scurrentpos = (string)requestData["currentpos"];
|
||||||
//LLVector3.TryParse((string)reader["currentPos"], out retval.currentPos);
|
//LLVector3.TryParse((string)reader["currentPos"], out retval.currentPos);
|
||||||
// TODO: Okay now raise event so the user server can pass this data to the Usermanager
|
// TODO: Okay now raise event so the user server can pass this data to the Usermanager
|
||||||
|
|
||||||
responseData["responsestring"] = "TRUE";
|
responseData["responsestring"] = "TRUE";
|
||||||
response.Value = responseData;
|
response.Value = responseData;
|
||||||
}
|
}
|
||||||
|
@ -159,7 +156,7 @@ namespace OpenSim.Grid.UserServer
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TellMessageServersAboutUser(LLUUID agentID, LLUUID sessionID, LLUUID RegionID,
|
public void TellMessageServersAboutUser(LLUUID agentID, LLUUID sessionID, LLUUID RegionID,
|
||||||
ulong regionhandle, float positionX, float positionY,
|
ulong regionhandle, float positionX, float positionY,
|
||||||
float positionZ, string firstname, string lastname)
|
float positionZ, string firstname, string lastname)
|
||||||
{
|
{
|
||||||
// Loop over registered Message Servers ( AND THERE WILL BE MORE THEN ONE :D )
|
// Loop over registered Message Servers ( AND THERE WILL BE MORE THEN ONE :D )
|
||||||
|
@ -176,8 +173,8 @@ namespace OpenSim.Grid.UserServer
|
||||||
foreach (MessageServerInfo serv in MessageServers.Values)
|
foreach (MessageServerInfo serv in MessageServers.Values)
|
||||||
{
|
{
|
||||||
NotifyMessageServerAboutUser(serv, agentID, sessionID, RegionID,
|
NotifyMessageServerAboutUser(serv, agentID, sessionID, RegionID,
|
||||||
regionhandle, positionX, positionY, positionZ,
|
regionhandle, positionX, positionY, positionZ,
|
||||||
firstname, lastname);
|
firstname, lastname);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -194,10 +191,10 @@ namespace OpenSim.Grid.UserServer
|
||||||
// {
|
// {
|
||||||
// m_log.Debug("[MSGCONNECTOR]: No Message Servers registered, ignoring");
|
// m_log.Debug("[MSGCONNECTOR]: No Message Servers registered, ignoring");
|
||||||
// }
|
// }
|
||||||
foreach (MessageServerInfo serv in MessageServers.Values)
|
foreach (MessageServerInfo serv in MessageServers.Values)
|
||||||
{
|
{
|
||||||
NotifyMessageServerAboutUserLogoff(serv, agentID);
|
NotifyMessageServerAboutUserLogoff(serv,agentID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -221,10 +218,10 @@ namespace OpenSim.Grid.UserServer
|
||||||
m_log.Info("[LOGOUT]: Notified : " + serv.URI + " about user logout");
|
m_log.Info("[LOGOUT]: Notified : " + serv.URI + " about user logout");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void NotifyMessageServerAboutUser(MessageServerInfo serv,
|
private void NotifyMessageServerAboutUser(MessageServerInfo serv,
|
||||||
LLUUID agentID, LLUUID sessionID, LLUUID RegionID,
|
LLUUID agentID, LLUUID sessionID, LLUUID RegionID,
|
||||||
ulong regionhandle, float positionX, float positionY, float positionZ,
|
ulong regionhandle, float positionX, float positionY, float positionZ,
|
||||||
string firstname, string lastname)
|
string firstname, string lastname)
|
||||||
{
|
{
|
||||||
Hashtable reqparams = new Hashtable();
|
Hashtable reqparams = new Hashtable();
|
||||||
reqparams["sendkey"] = serv.sendkey;
|
reqparams["sendkey"] = serv.sendkey;
|
||||||
|
@ -253,6 +250,7 @@ namespace OpenSim.Grid.UserServer
|
||||||
{
|
{
|
||||||
m_log.Warn("[MSGCONNECTOR]: Unable to notify Message Server about login. Presence might be borked for this user");
|
m_log.Warn("[MSGCONNECTOR]: Unable to notify Message Server about login. Presence might be borked for this user");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,4 +60,4 @@ using System.Runtime.InteropServices;
|
||||||
//
|
//
|
||||||
|
|
||||||
[assembly : AssemblyVersion("1.0.0.0")]
|
[assembly : AssemblyVersion("1.0.0.0")]
|
||||||
[assembly : AssemblyFileVersion("1.0.0.0")]
|
[assembly : AssemblyFileVersion("1.0.0.0")]
|
||||||
|
|
|
@ -41,26 +41,26 @@ using OpenSim.Framework.Servers;
|
||||||
namespace OpenSim.Grid.UserServer
|
namespace OpenSim.Grid.UserServer
|
||||||
{
|
{
|
||||||
public delegate void UserLoggedInAtLocation(LLUUID agentID, LLUUID sessionID, LLUUID RegionID,
|
public delegate void UserLoggedInAtLocation(LLUUID agentID, LLUUID sessionID, LLUUID RegionID,
|
||||||
ulong regionhandle, float positionX, float positionY, float positionZ, string firstname, string lastname);
|
ulong regionhandle, float positionX, float positionY, float positionZ, string firstname, string lastname);
|
||||||
|
|
||||||
public class UserLoginService : LoginService
|
public class UserLoginService : LoginService
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private UserLoggedInAtLocation handlerUserLoggedInAtLocation;
|
public event UserLoggedInAtLocation OnUserLoggedInAtLocation;
|
||||||
|
|
||||||
|
private UserLoggedInAtLocation handlerUserLoggedInAtLocation = null;
|
||||||
|
|
||||||
public UserConfig m_config;
|
public UserConfig m_config;
|
||||||
|
|
||||||
public UserLoginService(
|
public UserLoginService(
|
||||||
UserManagerBase userManager, LibraryRootFolder libraryRootFolder,
|
UserManagerBase userManager, LibraryRootFolder libraryRootFolder,
|
||||||
UserConfig config, string welcomeMess)
|
UserConfig config, string welcomeMess)
|
||||||
: base(userManager, libraryRootFolder, welcomeMess)
|
: base(userManager, libraryRootFolder, welcomeMess)
|
||||||
{
|
{
|
||||||
m_config = config;
|
m_config = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
public event UserLoggedInAtLocation OnUserLoggedInAtLocation;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Customises the login response and fills in missing values.
|
/// Customises the login response and fills in missing values.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -95,8 +95,7 @@ namespace OpenSim.Grid.UserServer
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
string[] startLocationRequestParsed = Util.ParseStartLocationRequest(startLocationRequest);
|
string[] startLocationRequestParsed = Util.ParseStartLocationRequest(startLocationRequest);
|
||||||
m_log.Info("[DEBUGLOGINPARSE]: 1:" + startLocationRequestParsed[0] + ", 2:" + startLocationRequestParsed[1] + ", 3:" +
|
m_log.Info("[DEBUGLOGINPARSE]: 1:" + startLocationRequestParsed[0] + ", 2:" + startLocationRequestParsed[1] + ", 3:" + startLocationRequestParsed[2] + ", 4:" + startLocationRequestParsed[3]);
|
||||||
startLocationRequestParsed[2] + ", 4:" + startLocationRequestParsed[3]);
|
|
||||||
if (startLocationRequestParsed[0] == "last")
|
if (startLocationRequestParsed[0] == "last")
|
||||||
{
|
{
|
||||||
// TODO: Parse out startlocationrequest string in the format; 'uri:RegionName&X&Y&Z'
|
// TODO: Parse out startlocationrequest string in the format; 'uri:RegionName&X&Y&Z'
|
||||||
|
@ -109,9 +108,9 @@ namespace OpenSim.Grid.UserServer
|
||||||
{
|
{
|
||||||
m_log.Info("[LOGIN]: Looking up Sim: " + startLocationRequestParsed[0]);
|
m_log.Info("[LOGIN]: Looking up Sim: " + startLocationRequestParsed[0]);
|
||||||
SimInfo =
|
SimInfo =
|
||||||
RegionProfileData.RequestSimProfileData(
|
RegionProfileData.RequestSimProfileData(
|
||||||
startLocationRequestParsed[0], m_config.GridServerURL,
|
startLocationRequestParsed[0], m_config.GridServerURL,
|
||||||
m_config.GridSendKey, m_config.GridRecvKey);
|
m_config.GridSendKey, m_config.GridRecvKey);
|
||||||
|
|
||||||
if (SimInfo == null)
|
if (SimInfo == null)
|
||||||
{
|
{
|
||||||
|
@ -120,9 +119,7 @@ namespace OpenSim.Grid.UserServer
|
||||||
RegionProfileData.RequestSimProfileData(
|
RegionProfileData.RequestSimProfileData(
|
||||||
theUser.HomeRegion, m_config.GridServerURL,
|
theUser.HomeRegion, m_config.GridServerURL,
|
||||||
m_config.GridSendKey, m_config.GridRecvKey);
|
m_config.GridSendKey, m_config.GridRecvKey);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
start_x = Convert.ToInt32(startLocationRequestParsed[1]);
|
start_x = Convert.ToInt32(startLocationRequestParsed[1]);
|
||||||
start_y = Convert.ToInt32(startLocationRequestParsed[2]);
|
start_y = Convert.ToInt32(startLocationRequestParsed[2]);
|
||||||
start_z = Convert.ToInt32(startLocationRequestParsed[3]);
|
start_z = Convert.ToInt32(startLocationRequestParsed[3]);
|
||||||
|
@ -133,30 +130,30 @@ namespace OpenSim.Grid.UserServer
|
||||||
// Customise the response
|
// Customise the response
|
||||||
//CFK: This is redundant and the next message should always appear.
|
//CFK: This is redundant and the next message should always appear.
|
||||||
//CFK: m_log.Info("[LOGIN]: Home Location");
|
//CFK: m_log.Info("[LOGIN]: Home Location");
|
||||||
response.Home = "{'region_handle':[r" + (SimInfo.regionLocX * Constants.RegionSize) + ",r" +
|
response.Home = "{'region_handle':[r" + (SimInfo.regionLocX * Constants.RegionSize).ToString() + ",r" +
|
||||||
(SimInfo.regionLocY * Constants.RegionSize) + "], " +
|
(SimInfo.regionLocY * Constants.RegionSize).ToString() + "], " +
|
||||||
"'position':[r" + theUser.HomeLocation.X + ",r" +
|
"'position':[r" + theUser.HomeLocation.X.ToString() + ",r" +
|
||||||
theUser.HomeLocation.Y + ",r" + theUser.HomeLocation.Z + "], " +
|
theUser.HomeLocation.Y.ToString() + ",r" + theUser.HomeLocation.Z.ToString() + "], " +
|
||||||
"'look_at':[r" + theUser.HomeLocation.X + ",r" +
|
"'look_at':[r" + theUser.HomeLocation.X.ToString() + ",r" +
|
||||||
theUser.HomeLocation.Y + ",r" + theUser.HomeLocation.Z + "]}";
|
theUser.HomeLocation.Y.ToString() + ",r" + theUser.HomeLocation.Z.ToString() + "]}";
|
||||||
|
|
||||||
// Destination
|
// Destination
|
||||||
//CFK: The "Notifying" message always seems to appear, so subsume the data from this message into
|
//CFK: The "Notifying" message always seems to appear, so subsume the data from this message into
|
||||||
//CFK: the next one for X & Y and comment this one.
|
//CFK: the next one for X & Y and comment this one.
|
||||||
//CFK: m_log.Info("[LOGIN]: CUSTOMISERESPONSE: Region X: " + SimInfo.regionLocX +
|
//CFK: m_log.Info("[LOGIN]: CUSTOMISERESPONSE: Region X: " + SimInfo.regionLocX +
|
||||||
//CFK: "; Region Y: " + SimInfo.regionLocY);
|
//CFK: "; Region Y: " + SimInfo.regionLocY);
|
||||||
response.SimAddress = Util.GetHostFromDNS(SimInfo.serverURI.Split(new[] {'/', ':'})[3]).ToString();
|
response.SimAddress = Util.GetHostFromDNS(SimInfo.serverURI.Split(new char[] { '/', ':' })[3]).ToString();
|
||||||
response.SimPort = uint.Parse(SimInfo.serverURI.Split(new[] {'/', ':'})[4]);
|
response.SimPort = uint.Parse(SimInfo.serverURI.Split(new char[] { '/', ':' })[4]);
|
||||||
response.RegionX = SimInfo.regionLocX;
|
response.RegionX = SimInfo.regionLocX;
|
||||||
response.RegionY = SimInfo.regionLocY;
|
response.RegionY = SimInfo.regionLocY;
|
||||||
|
|
||||||
//Not sure if the + "/CAPS/" should in fact be +"CAPS/" depending if there is already a / as part of httpServerURI
|
//Not sure if the + "/CAPS/" should in fact be +"CAPS/" depending if there is already a / as part of httpServerURI
|
||||||
string capsPath = Util.GetRandomCapsPath();
|
string capsPath = Util.GetRandomCapsPath();
|
||||||
response.SeedCapability = SimInfo.httpServerURI + "CAPS/" + capsPath + "0000/";
|
response.SeedCapability = SimInfo.httpServerURI + "CAPS/" + capsPath + "0000/";
|
||||||
|
|
||||||
m_log.DebugFormat(
|
m_log.DebugFormat(
|
||||||
"[LOGIN]: Sending new CAPS seed url {0} to client {1}",
|
"[LOGIN]: Sending new CAPS seed url {0} to client {1}",
|
||||||
response.SeedCapability, response.AgentID);
|
response.SeedCapability, response.AgentID);
|
||||||
|
|
||||||
// Notify the target of an incoming user
|
// Notify the target of an incoming user
|
||||||
//CFK: The "Notifying" message always seems to appear, so subsume the data from this message into
|
//CFK: The "Notifying" message always seems to appear, so subsume the data from this message into
|
||||||
|
@ -166,8 +163,7 @@ namespace OpenSim.Grid.UserServer
|
||||||
|
|
||||||
theUser.CurrentAgent.Region = SimInfo.UUID;
|
theUser.CurrentAgent.Region = SimInfo.UUID;
|
||||||
theUser.CurrentAgent.Handle = SimInfo.regionHandle;
|
theUser.CurrentAgent.Handle = SimInfo.regionHandle;
|
||||||
if (start_x >= 0 && start_y >= 0 && start_z >= 0)
|
if (start_x >= 0 && start_y >= 0 && start_z >= 0) {
|
||||||
{
|
|
||||||
LLVector3 tmp_v = new LLVector3(start_x, start_y, start_z);
|
LLVector3 tmp_v = new LLVector3(start_x, start_y, start_z);
|
||||||
theUser.CurrentAgent.Position = tmp_v;
|
theUser.CurrentAgent.Position = tmp_v;
|
||||||
}
|
}
|
||||||
|
@ -190,43 +186,42 @@ namespace OpenSim.Grid.UserServer
|
||||||
// Update agent with target sim
|
// Update agent with target sim
|
||||||
|
|
||||||
m_log.InfoFormat(
|
m_log.InfoFormat(
|
||||||
"[LOGIN]: Telling region {0} @ {1},{2} ({3}) to expect user connection",
|
"[LOGIN]: Telling region {0} @ {1},{2} ({3}) to expect user connection",
|
||||||
SimInfo.regionName, response.RegionX, response.RegionY, SimInfo.httpServerURI);
|
SimInfo.regionName, response.RegionX, response.RegionY, SimInfo.httpServerURI);
|
||||||
|
|
||||||
XmlRpcRequest GridReq = new XmlRpcRequest("expect_user", SendParams);
|
XmlRpcRequest GridReq = new XmlRpcRequest("expect_user", SendParams);
|
||||||
XmlRpcResponse GridResp = GridReq.Send(SimInfo.httpServerURI, 6000);
|
XmlRpcResponse GridResp = GridReq.Send(SimInfo.httpServerURI, 6000);
|
||||||
|
|
||||||
if (GridResp.IsFault)
|
if (GridResp.IsFault)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat(
|
m_log.ErrorFormat(
|
||||||
"[LOGIN]: XMLRPC request for {0} failed, fault code: {1}, reason: {2}",
|
"[LOGIN]: XMLRPC request for {0} failed, fault code: {1}, reason: {2}",
|
||||||
SimInfo.httpServerURI, GridResp.FaultCode, GridResp.FaultString);
|
SimInfo.httpServerURI, GridResp.FaultCode, GridResp.FaultString);
|
||||||
}
|
}
|
||||||
handlerUserLoggedInAtLocation = OnUserLoggedInAtLocation;
|
handlerUserLoggedInAtLocation = OnUserLoggedInAtLocation;
|
||||||
if (handlerUserLoggedInAtLocation != null)
|
if (handlerUserLoggedInAtLocation != null)
|
||||||
{
|
{
|
||||||
//m_log.Info("[LOGIN]: Letting other objects know about login");
|
//m_log.Info("[LOGIN]: Letting other objects know about login");
|
||||||
handlerUserLoggedInAtLocation(theUser.ID, theUser.CurrentAgent.SessionID, theUser.CurrentAgent.Region,
|
handlerUserLoggedInAtLocation(theUser.ID, theUser.CurrentAgent.SessionID, theUser.CurrentAgent.Region,
|
||||||
theUser.CurrentAgent.Handle, theUser.CurrentAgent.Position.X, theUser.CurrentAgent.Position.Y,
|
theUser.CurrentAgent.Handle, theUser.CurrentAgent.Position.X,theUser.CurrentAgent.Position.Y,theUser.CurrentAgent.Position.Z,
|
||||||
theUser.CurrentAgent.Position.Z,
|
theUser.FirstName,theUser.SurName);
|
||||||
theUser.FirstName, theUser.SurName);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
//catch (System.AccessViolationException)
|
//catch (System.AccessViolationException)
|
||||||
{
|
{
|
||||||
tryDefault = true;
|
tryDefault = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tryDefault)
|
if (tryDefault)
|
||||||
{
|
{
|
||||||
// Send him to default region instead
|
// Send him to default region instead
|
||||||
// Load information from the gridserver
|
// Load information from the gridserver
|
||||||
|
|
||||||
ulong defaultHandle = (((ulong) m_config.DefaultX * Constants.RegionSize) << 32) | ((ulong) m_config.DefaultY * Constants.RegionSize);
|
ulong defaultHandle = (((ulong)m_config.DefaultX * Constants.RegionSize) << 32) | ((ulong)m_config.DefaultY * Constants.RegionSize);
|
||||||
|
|
||||||
m_log.Warn(
|
m_log.Warn(
|
||||||
"[LOGIN]: Home region not available: sending to default " + defaultHandle);
|
"[LOGIN]: Home region not available: sending to default " + defaultHandle.ToString());
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -236,19 +231,19 @@ namespace OpenSim.Grid.UserServer
|
||||||
|
|
||||||
// Customise the response
|
// Customise the response
|
||||||
m_log.Info("[LOGIN]: Home Location");
|
m_log.Info("[LOGIN]: Home Location");
|
||||||
response.Home = "{'region_handle':[r" + (SimInfo.regionLocX * Constants.RegionSize) + ",r" +
|
response.Home = "{'region_handle':[r" + (SimInfo.regionLocX * Constants.RegionSize).ToString() + ",r" +
|
||||||
(SimInfo.regionLocY * Constants.RegionSize) + "], " +
|
(SimInfo.regionLocY * Constants.RegionSize).ToString() + "], " +
|
||||||
"'position':[r" + theUser.HomeLocation.X + ",r" +
|
"'position':[r" + theUser.HomeLocation.X.ToString() + ",r" +
|
||||||
theUser.HomeLocation.Y + ",r" + theUser.HomeLocation.Z + "], " +
|
theUser.HomeLocation.Y.ToString() + ",r" + theUser.HomeLocation.Z.ToString() + "], " +
|
||||||
"'look_at':[r" + theUser.HomeLocation.X + ",r" +
|
"'look_at':[r" + theUser.HomeLocation.X.ToString() + ",r" +
|
||||||
theUser.HomeLocation.Y + ",r" + theUser.HomeLocation.Z + "]}";
|
theUser.HomeLocation.Y.ToString() + ",r" + theUser.HomeLocation.Z.ToString() + "]}";
|
||||||
|
|
||||||
// Destination
|
// Destination
|
||||||
m_log.Info("[LOGIN]: " +
|
m_log.Info("[LOGIN]: " +
|
||||||
"CUSTOMISERESPONSE: Region X: " + SimInfo.regionLocX + "; Region Y: " +
|
"CUSTOMISERESPONSE: Region X: " + SimInfo.regionLocX + "; Region Y: " +
|
||||||
SimInfo.regionLocY);
|
SimInfo.regionLocY);
|
||||||
response.SimAddress = Util.GetHostFromDNS(SimInfo.serverURI.Split(new[] {'/', ':'})[3]).ToString();
|
response.SimAddress = Util.GetHostFromDNS(SimInfo.serverURI.Split(new char[] { '/', ':' })[3]).ToString();
|
||||||
response.SimPort = uint.Parse(SimInfo.serverURI.Split(new[] {'/', ':'})[4]);
|
response.SimPort = uint.Parse(SimInfo.serverURI.Split(new char[] { '/', ':' })[4]);
|
||||||
response.RegionX = SimInfo.regionLocX;
|
response.RegionX = SimInfo.regionLocX;
|
||||||
response.RegionY = SimInfo.regionLocY;
|
response.RegionY = SimInfo.regionLocY;
|
||||||
|
|
||||||
|
@ -288,16 +283,15 @@ namespace OpenSim.Grid.UserServer
|
||||||
{
|
{
|
||||||
m_log.Info("[LOGIN]: Letting other objects know about login");
|
m_log.Info("[LOGIN]: Letting other objects know about login");
|
||||||
handlerUserLoggedInAtLocation(theUser.ID, theUser.CurrentAgent.SessionID, theUser.CurrentAgent.Region,
|
handlerUserLoggedInAtLocation(theUser.ID, theUser.CurrentAgent.SessionID, theUser.CurrentAgent.Region,
|
||||||
theUser.CurrentAgent.Handle, theUser.CurrentAgent.Position.X, theUser.CurrentAgent.Position.Y,
|
theUser.CurrentAgent.Handle, theUser.CurrentAgent.Position.X, theUser.CurrentAgent.Position.Y, theUser.CurrentAgent.Position.Z,
|
||||||
theUser.CurrentAgent.Position.Z,
|
theUser.FirstName, theUser.SurName);
|
||||||
theUser.FirstName, theUser.SurName);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.Warn("[LOGIN]: Default region also not available");
|
m_log.Warn("[LOGIN]: Default region also not available");
|
||||||
m_log.Warn("[LOGIN]: " + e);
|
m_log.Warn("[LOGIN]: " + e.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -306,8 +300,8 @@ namespace OpenSim.Grid.UserServer
|
||||||
protected override InventoryData GetInventorySkeleton(LLUUID userID)
|
protected override InventoryData GetInventorySkeleton(LLUUID userID)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat(
|
m_log.DebugFormat(
|
||||||
"[LOGIN]: Contacting inventory service at {0} for inventory skeleton of user {1}",
|
"[LOGIN]: Contacting inventory service at {0} for inventory skeleton of user {1}",
|
||||||
m_config.InventoryUrl, userID);
|
m_config.InventoryUrl, userID);
|
||||||
|
|
||||||
List<InventoryFolderBase> folders
|
List<InventoryFolderBase> folders
|
||||||
= SynchronousRestObjectPoster.BeginPostObject<Guid, List<InventoryFolderBase>>(
|
= SynchronousRestObjectPoster.BeginPostObject<Guid, List<InventoryFolderBase>>(
|
||||||
|
@ -322,23 +316,23 @@ namespace OpenSim.Grid.UserServer
|
||||||
// tools are creating the user profile directly in the database without creating the inventory. At
|
// tools are creating the user profile directly in the database without creating the inventory. At
|
||||||
// this time we'll accomodate them by lazily creating the user inventory now if it doesn't already
|
// this time we'll accomodate them by lazily creating the user inventory now if it doesn't already
|
||||||
// exist.
|
// exist.
|
||||||
bool created =
|
bool created =
|
||||||
SynchronousRestObjectPoster.BeginPostObject<Guid, bool>(
|
SynchronousRestObjectPoster.BeginPostObject<Guid, bool>(
|
||||||
"POST", m_config.InventoryUrl + "CreateInventory/", userID.UUID);
|
"POST", m_config.InventoryUrl + "CreateInventory/", userID.UUID);
|
||||||
|
|
||||||
if (!created)
|
if (!created)
|
||||||
{
|
{
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
String.Format(
|
String.Format(
|
||||||
"The inventory creation request for user {0} did not succeed."
|
"The inventory creation request for user {0} did not succeed."
|
||||||
+ " Please contact your inventory service provider for more information.",
|
+ " Please contact your inventory service provider for more information.",
|
||||||
userID));
|
userID));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.InfoFormat("[LOGIN]: A new inventory skeleton was successfully created for user {0}", userID);
|
m_log.InfoFormat("[LOGIN]: A new inventory skeleton was successfully created for user {0}", userID);
|
||||||
}
|
}
|
||||||
|
|
||||||
folders = SynchronousRestObjectPoster.BeginPostObject<Guid, List<InventoryFolderBase>>(
|
folders = SynchronousRestObjectPoster.BeginPostObject<Guid, List<InventoryFolderBase>>(
|
||||||
"POST", m_config.InventoryUrl + "RootFolders/", userID.UUID);
|
"POST", m_config.InventoryUrl + "RootFolders/", userID.UUID);
|
||||||
}
|
}
|
||||||
|
@ -348,11 +342,11 @@ namespace OpenSim.Grid.UserServer
|
||||||
LLUUID rootID = LLUUID.Zero;
|
LLUUID rootID = LLUUID.Zero;
|
||||||
ArrayList AgentInventoryArray = new ArrayList();
|
ArrayList AgentInventoryArray = new ArrayList();
|
||||||
Hashtable TempHash;
|
Hashtable TempHash;
|
||||||
|
|
||||||
foreach (InventoryFolderBase InvFolder in folders)
|
foreach (InventoryFolderBase InvFolder in folders)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat("[LOGIN]: Received agent inventory folder {0}", InvFolder.name);
|
// m_log.DebugFormat("[LOGIN]: Received agent inventory folder {0}", InvFolder.name);
|
||||||
|
|
||||||
if (InvFolder.ParentID == LLUUID.Zero)
|
if (InvFolder.ParentID == LLUUID.Zero)
|
||||||
{
|
{
|
||||||
rootID = InvFolder.ID;
|
rootID = InvFolder.ID;
|
||||||
|
@ -365,16 +359,16 @@ namespace OpenSim.Grid.UserServer
|
||||||
TempHash["folder_id"] = InvFolder.ID.ToString();
|
TempHash["folder_id"] = InvFolder.ID.ToString();
|
||||||
AgentInventoryArray.Add(TempHash);
|
AgentInventoryArray.Add(TempHash);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new InventoryData(AgentInventoryArray, rootID);
|
return new InventoryData(AgentInventoryArray, rootID);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
String.Format(
|
String.Format(
|
||||||
"A root inventory folder for user {0} could not be retrieved from the inventory service",
|
"A root inventory folder for user {0} could not be retrieved from the inventory service",
|
||||||
userID));
|
userID));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,11 +41,11 @@ namespace OpenSim.Grid.UserServer
|
||||||
public delegate void logOffUser(LLUUID AgentID);
|
public delegate void logOffUser(LLUUID AgentID);
|
||||||
|
|
||||||
public class UserManager : UserManagerBase
|
public class UserManager : UserManagerBase
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private logOffUser handlerLogOffUser;
|
|
||||||
public event logOffUser OnLogOffUser;
|
public event logOffUser OnLogOffUser;
|
||||||
|
private logOffUser handlerLogOffUser = null;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Deletes an active agent session
|
/// Deletes an active agent session
|
||||||
|
@ -81,17 +81,17 @@ namespace OpenSim.Grid.UserServer
|
||||||
XmlRpcResponse response = new XmlRpcResponse();
|
XmlRpcResponse response = new XmlRpcResponse();
|
||||||
Hashtable responseData = new Hashtable();
|
Hashtable responseData = new Hashtable();
|
||||||
// Query Result Information
|
// Query Result Information
|
||||||
responseData["queryid"] = queryID.ToString();
|
responseData["queryid"] = (string) queryID.ToString();
|
||||||
responseData["avcount"] = returnUsers.Count.ToString();
|
responseData["avcount"] = (string) returnUsers.Count.ToString();
|
||||||
|
|
||||||
for (int i = 0; i < returnUsers.Count; i++)
|
for (int i = 0; i < returnUsers.Count; i++)
|
||||||
{
|
{
|
||||||
responseData["avatarid" + i] = returnUsers[i].AvatarID.ToString();
|
responseData["avatarid" + i.ToString()] = returnUsers[i].AvatarID.ToString();
|
||||||
responseData["firstname" + i] = returnUsers[i].firstName;
|
responseData["firstname" + i.ToString()] = returnUsers[i].firstName;
|
||||||
responseData["lastname" + i] = returnUsers[i].lastName;
|
responseData["lastname" + i.ToString()] = returnUsers[i].lastName;
|
||||||
}
|
}
|
||||||
response.Value = responseData;
|
response.Value = responseData;
|
||||||
|
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,14 +101,14 @@ namespace OpenSim.Grid.UserServer
|
||||||
Hashtable responseData = new Hashtable();
|
Hashtable responseData = new Hashtable();
|
||||||
// Query Result Information
|
// Query Result Information
|
||||||
|
|
||||||
responseData["avcount"] = returnUsers.Count.ToString();
|
responseData["avcount"] = (string)returnUsers.Count.ToString();
|
||||||
|
|
||||||
for (int i = 0; i < returnUsers.Count; i++)
|
for (int i = 0; i < returnUsers.Count; i++)
|
||||||
{
|
{
|
||||||
responseData["ownerID" + i] = returnUsers[i].FriendListOwner.UUID.ToString();
|
responseData["ownerID" + i.ToString()] = returnUsers[i].FriendListOwner.UUID.ToString();
|
||||||
responseData["friendID" + i] = returnUsers[i].Friend.UUID.ToString();
|
responseData["friendID" + i.ToString()] = returnUsers[i].Friend.UUID.ToString();
|
||||||
responseData["ownerPerms" + i] = returnUsers[i].FriendListOwnerPerms.ToString();
|
responseData["ownerPerms" + i.ToString()] = returnUsers[i].FriendListOwnerPerms.ToString();
|
||||||
responseData["friendPerms" + i] = returnUsers[i].FriendPerms.ToString();
|
responseData["friendPerms" + i.ToString()] = returnUsers[i].FriendPerms.ToString();
|
||||||
}
|
}
|
||||||
response.Value = responseData;
|
response.Value = responseData;
|
||||||
|
|
||||||
|
@ -156,21 +156,6 @@ namespace OpenSim.Grid.UserServer
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override UserProfileData SetupMasterUser(string firstName, string lastName)
|
|
||||||
{
|
|
||||||
throw new Exception("The method or operation is not implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public override UserProfileData SetupMasterUser(string firstName, string lastName, string password)
|
|
||||||
{
|
|
||||||
throw new Exception("The method or operation is not implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public override UserProfileData SetupMasterUser(LLUUID uuid)
|
|
||||||
{
|
|
||||||
throw new Exception("The method or operation is not implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
#region XMLRPC User Methods
|
#region XMLRPC User Methods
|
||||||
|
|
||||||
public XmlRpcResponse XmlRPCGetAvatarPickerAvatar(XmlRpcRequest request)
|
public XmlRpcResponse XmlRPCGetAvatarPickerAvatar(XmlRpcRequest request)
|
||||||
|
@ -193,16 +178,15 @@ namespace OpenSim.Grid.UserServer
|
||||||
public XmlRpcResponse XmlRpcResponseXmlRPCAddUserFriend(XmlRpcRequest request)
|
public XmlRpcResponse XmlRpcResponseXmlRPCAddUserFriend(XmlRpcRequest request)
|
||||||
{
|
{
|
||||||
XmlRpcResponse response = new XmlRpcResponse();
|
XmlRpcResponse response = new XmlRpcResponse();
|
||||||
Hashtable requestData = (Hashtable) request.Params[0];
|
Hashtable requestData = (Hashtable)request.Params[0];
|
||||||
Hashtable responseData = new Hashtable();
|
Hashtable responseData = new Hashtable();
|
||||||
string returnString = "FALSE";
|
string returnString = "FALSE";
|
||||||
// Query Result Information
|
// Query Result Information
|
||||||
|
|
||||||
if (requestData.Contains("ownerID") && requestData.Contains("friendID") && requestData.Contains("friendPerms"))
|
if (requestData.Contains("ownerID") && requestData.Contains("friendID") && requestData.Contains("friendPerms"))
|
||||||
{
|
{
|
||||||
// UserManagerBase.AddNewuserFriend
|
// UserManagerBase.AddNewuserFriend
|
||||||
AddNewUserFriend(new LLUUID((string) requestData["ownerID"]), new LLUUID((string) requestData["friendID"]),
|
AddNewUserFriend(new LLUUID((string)requestData["ownerID"]), new LLUUID((string)requestData["friendID"]), (uint)Convert.ToInt32((string)requestData["friendPerms"]));
|
||||||
(uint) Convert.ToInt32((string) requestData["friendPerms"]));
|
|
||||||
returnString = "TRUE";
|
returnString = "TRUE";
|
||||||
}
|
}
|
||||||
responseData["returnString"] = returnString;
|
responseData["returnString"] = returnString;
|
||||||
|
@ -213,15 +197,15 @@ namespace OpenSim.Grid.UserServer
|
||||||
public XmlRpcResponse XmlRpcResponseXmlRPCRemoveUserFriend(XmlRpcRequest request)
|
public XmlRpcResponse XmlRpcResponseXmlRPCRemoveUserFriend(XmlRpcRequest request)
|
||||||
{
|
{
|
||||||
XmlRpcResponse response = new XmlRpcResponse();
|
XmlRpcResponse response = new XmlRpcResponse();
|
||||||
Hashtable requestData = (Hashtable) request.Params[0];
|
Hashtable requestData = (Hashtable)request.Params[0];
|
||||||
Hashtable responseData = new Hashtable();
|
Hashtable responseData = new Hashtable();
|
||||||
string returnString = "FALSE";
|
string returnString = "FALSE";
|
||||||
// Query Result Information
|
// Query Result Information
|
||||||
|
|
||||||
if (requestData.Contains("ownerID") && requestData.Contains("friendID"))
|
if (requestData.Contains("ownerID") && requestData.Contains("friendID"))
|
||||||
{
|
{
|
||||||
// UserManagerBase.AddNewuserFriend
|
// UserManagerBase.AddNewuserFriend
|
||||||
RemoveUserFriend(new LLUUID((string) requestData["ownerID"]), new LLUUID((string) requestData["friendID"]));
|
RemoveUserFriend(new LLUUID((string)requestData["ownerID"]), new LLUUID((string)requestData["friendID"]));
|
||||||
returnString = "TRUE";
|
returnString = "TRUE";
|
||||||
}
|
}
|
||||||
responseData["returnString"] = returnString;
|
responseData["returnString"] = returnString;
|
||||||
|
@ -232,14 +216,13 @@ namespace OpenSim.Grid.UserServer
|
||||||
public XmlRpcResponse XmlRpcResponseXmlRPCUpdateUserFriendPerms(XmlRpcRequest request)
|
public XmlRpcResponse XmlRpcResponseXmlRPCUpdateUserFriendPerms(XmlRpcRequest request)
|
||||||
{
|
{
|
||||||
XmlRpcResponse response = new XmlRpcResponse();
|
XmlRpcResponse response = new XmlRpcResponse();
|
||||||
Hashtable requestData = (Hashtable) request.Params[0];
|
Hashtable requestData = (Hashtable)request.Params[0];
|
||||||
Hashtable responseData = new Hashtable();
|
Hashtable responseData = new Hashtable();
|
||||||
string returnString = "FALSE";
|
string returnString = "FALSE";
|
||||||
|
|
||||||
if (requestData.Contains("ownerID") && requestData.Contains("friendID") && requestData.Contains("friendPerms"))
|
if (requestData.Contains("ownerID") && requestData.Contains("friendID") && requestData.Contains("friendPerms"))
|
||||||
{
|
{
|
||||||
UpdateUserFriendPerms(new LLUUID((string) requestData["ownerID"]), new LLUUID((string) requestData["friendID"]),
|
UpdateUserFriendPerms(new LLUUID((string)requestData["ownerID"]), new LLUUID((string)requestData["friendID"]), (uint)Convert.ToInt32((string)requestData["friendPerms"]));
|
||||||
(uint) Convert.ToInt32((string) requestData["friendPerms"]));
|
|
||||||
// UserManagerBase.
|
// UserManagerBase.
|
||||||
returnString = "TRUE";
|
returnString = "TRUE";
|
||||||
}
|
}
|
||||||
|
@ -251,16 +234,16 @@ namespace OpenSim.Grid.UserServer
|
||||||
public XmlRpcResponse XmlRpcResponseXmlRPCGetUserFriendList(XmlRpcRequest request)
|
public XmlRpcResponse XmlRpcResponseXmlRPCGetUserFriendList(XmlRpcRequest request)
|
||||||
{
|
{
|
||||||
XmlRpcResponse response = new XmlRpcResponse();
|
XmlRpcResponse response = new XmlRpcResponse();
|
||||||
Hashtable requestData = (Hashtable) request.Params[0];
|
Hashtable requestData = (Hashtable)request.Params[0];
|
||||||
Hashtable responseData = new Hashtable();
|
Hashtable responseData = new Hashtable();
|
||||||
|
|
||||||
List<FriendListItem> returndata = new List<FriendListItem>();
|
List<FriendListItem> returndata = new List<FriendListItem>();
|
||||||
|
|
||||||
if (requestData.Contains("ownerID"))
|
if (requestData.Contains("ownerID"))
|
||||||
{
|
{
|
||||||
returndata = GetUserFriendList(new LLUUID((string) requestData["ownerID"]));
|
returndata = this.GetUserFriendList(new LLUUID((string)requestData["ownerID"]));
|
||||||
}
|
}
|
||||||
|
|
||||||
return FriendListItemListtoXmlRPCResponse(returndata);
|
return FriendListItemListtoXmlRPCResponse(returndata);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -338,7 +321,7 @@ namespace OpenSim.Grid.UserServer
|
||||||
{
|
{
|
||||||
m_log.Debug("[UserManager]: Got request to update user profile");
|
m_log.Debug("[UserManager]: Got request to update user profile");
|
||||||
XmlRpcResponse response = new XmlRpcResponse();
|
XmlRpcResponse response = new XmlRpcResponse();
|
||||||
Hashtable requestData = (Hashtable) request.Params[0];
|
Hashtable requestData = (Hashtable)request.Params[0];
|
||||||
Hashtable responseData = new Hashtable();
|
Hashtable responseData = new Hashtable();
|
||||||
|
|
||||||
UserProfileData userProfile;
|
UserProfileData userProfile;
|
||||||
|
@ -347,7 +330,7 @@ namespace OpenSim.Grid.UserServer
|
||||||
return CreateUnknownUserErrorResponse();
|
return CreateUnknownUserErrorResponse();
|
||||||
}
|
}
|
||||||
|
|
||||||
LLUUID UserUUID = new LLUUID((string) requestData["avatar_uuid"]);
|
LLUUID UserUUID = new LLUUID((string)requestData["avatar_uuid"]);
|
||||||
userProfile = GetUserProfile(UserUUID);
|
userProfile = GetUserProfile(UserUUID);
|
||||||
if (null == userProfile)
|
if (null == userProfile)
|
||||||
{
|
{
|
||||||
|
@ -359,33 +342,33 @@ namespace OpenSim.Grid.UserServer
|
||||||
}
|
}
|
||||||
if (requestData.Contains("FLImageID"))
|
if (requestData.Contains("FLImageID"))
|
||||||
{
|
{
|
||||||
userProfile.FirstLifeImage = new LLUUID((string) requestData["FLImageID"]);
|
userProfile.FirstLifeImage = new LLUUID((string)requestData["FLImageID"]);
|
||||||
}
|
}
|
||||||
if (requestData.Contains("ImageID"))
|
if (requestData.Contains("ImageID"))
|
||||||
{
|
{
|
||||||
userProfile.Image = new LLUUID((string) requestData["ImageID"]);
|
userProfile.Image = new LLUUID((string)requestData["ImageID"]);
|
||||||
}
|
}
|
||||||
// dont' know how yet
|
// dont' know how yet
|
||||||
if (requestData.Contains("MaturePublish"))
|
if (requestData.Contains("MaturePublish"))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
if (requestData.Contains("AboutText"))
|
if (requestData.Contains("AboutText"))
|
||||||
{
|
{
|
||||||
userProfile.AboutText = (string) requestData["AboutText"];
|
userProfile.AboutText = (string)requestData["AboutText"];
|
||||||
}
|
}
|
||||||
if (requestData.Contains("FLAboutText"))
|
if (requestData.Contains("FLAboutText"))
|
||||||
{
|
{
|
||||||
userProfile.FirstLifeAboutText = (string) requestData["FLAboutText"];
|
userProfile.FirstLifeAboutText = (string)requestData["FLAboutText"];
|
||||||
}
|
}
|
||||||
// not in DB yet.
|
// not in DB yet.
|
||||||
if (requestData.Contains("ProfileURL"))
|
if (requestData.Contains("ProfileURL"))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
if (requestData.Contains("home_region"))
|
if (requestData.Contains("home_region"))
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
userProfile.HomeRegion = Convert.ToUInt64((string) requestData["home_region"]);
|
userProfile.HomeRegion = Convert.ToUInt64((string)requestData["home_region"]);
|
||||||
}
|
}
|
||||||
catch (ArgumentException)
|
catch (ArgumentException)
|
||||||
{
|
{
|
||||||
|
@ -399,23 +382,25 @@ namespace OpenSim.Grid.UserServer
|
||||||
{
|
{
|
||||||
m_log.Error("[PROFILE]:Failed to set home region, Value was too large");
|
m_log.Error("[PROFILE]:Failed to set home region, Value was too large");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
if (requestData.Contains("home_pos_x"))
|
if (requestData.Contains("home_pos_x"))
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
userProfile.HomeLocationX = (float) Convert.ToDecimal((string) requestData["home_pos_x"]);
|
userProfile.HomeLocationX = (float)Convert.ToDecimal((string)requestData["home_pos_x"]);
|
||||||
}
|
}
|
||||||
catch (InvalidCastException)
|
catch (InvalidCastException)
|
||||||
{
|
{
|
||||||
m_log.Error("[PROFILE]:Failed to set home postion x");
|
m_log.Error("[PROFILE]:Failed to set home postion x");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
if (requestData.Contains("home_pos_y"))
|
if (requestData.Contains("home_pos_y"))
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
userProfile.HomeLocationY = (float) Convert.ToDecimal((string) requestData["home_pos_y"]);
|
userProfile.HomeLocationY = (float)Convert.ToDecimal((string)requestData["home_pos_y"]);
|
||||||
}
|
}
|
||||||
catch (InvalidCastException)
|
catch (InvalidCastException)
|
||||||
{
|
{
|
||||||
|
@ -426,7 +411,7 @@ namespace OpenSim.Grid.UserServer
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
userProfile.HomeLocationZ = (float) Convert.ToDecimal((string) requestData["home_pos_z"]);
|
userProfile.HomeLocationZ = (float)Convert.ToDecimal((string)requestData["home_pos_z"]);
|
||||||
}
|
}
|
||||||
catch (InvalidCastException)
|
catch (InvalidCastException)
|
||||||
{
|
{
|
||||||
|
@ -437,7 +422,7 @@ namespace OpenSim.Grid.UserServer
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
userProfile.HomeLookAtX = (float) Convert.ToDecimal((string) requestData["home_look_x"]);
|
userProfile.HomeLookAtX = (float)Convert.ToDecimal((string)requestData["home_look_x"]);
|
||||||
}
|
}
|
||||||
catch (InvalidCastException)
|
catch (InvalidCastException)
|
||||||
{
|
{
|
||||||
|
@ -448,7 +433,7 @@ namespace OpenSim.Grid.UserServer
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
userProfile.HomeLookAtY = (float) Convert.ToDecimal((string) requestData["home_look_y"]);
|
userProfile.HomeLookAtY = (float)Convert.ToDecimal((string)requestData["home_look_y"]);
|
||||||
}
|
}
|
||||||
catch (InvalidCastException)
|
catch (InvalidCastException)
|
||||||
{
|
{
|
||||||
|
@ -457,9 +442,9 @@ namespace OpenSim.Grid.UserServer
|
||||||
}
|
}
|
||||||
if (requestData.Contains("home_look_z"))
|
if (requestData.Contains("home_look_z"))
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
userProfile.HomeLookAtZ = (float) Convert.ToDecimal((string) requestData["home_look_z"]);
|
userProfile.HomeLookAtZ = (float)Convert.ToDecimal((string)requestData["home_look_z"]);
|
||||||
}
|
}
|
||||||
catch (InvalidCastException)
|
catch (InvalidCastException)
|
||||||
{
|
{
|
||||||
|
@ -476,18 +461,18 @@ namespace OpenSim.Grid.UserServer
|
||||||
public XmlRpcResponse XmlRPCLogOffUserMethodUUID(XmlRpcRequest request)
|
public XmlRpcResponse XmlRPCLogOffUserMethodUUID(XmlRpcRequest request)
|
||||||
{
|
{
|
||||||
XmlRpcResponse response = new XmlRpcResponse();
|
XmlRpcResponse response = new XmlRpcResponse();
|
||||||
Hashtable requestData = (Hashtable) request.Params[0];
|
Hashtable requestData = (Hashtable)request.Params[0];
|
||||||
|
|
||||||
if (requestData.Contains("avatar_uuid"))
|
if (requestData.Contains("avatar_uuid"))
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
LLUUID userUUID = new LLUUID((string) requestData["avatar_uuid"]);
|
LLUUID userUUID = new LLUUID((string)requestData["avatar_uuid"]);
|
||||||
LLUUID RegionID = new LLUUID((string) requestData["region_uuid"]);
|
LLUUID RegionID = new LLUUID((string)requestData["region_uuid"]);
|
||||||
ulong regionhandle = (ulong) Convert.ToInt64((string) requestData["region_handle"]);
|
ulong regionhandle = (ulong)Convert.ToInt64((string)requestData["region_handle"]);
|
||||||
float posx = (float) Convert.ToDecimal((string) requestData["region_pos_x"]);
|
float posx = (float)Convert.ToDecimal((string)requestData["region_pos_x"]);
|
||||||
float posy = (float) Convert.ToDecimal((string) requestData["region_pos_y"]);
|
float posy = (float)Convert.ToDecimal((string)requestData["region_pos_y"]);
|
||||||
float posz = (float) Convert.ToDecimal((string) requestData["region_pos_z"]);
|
float posz = (float)Convert.ToDecimal((string)requestData["region_pos_z"]);
|
||||||
|
|
||||||
handlerLogOffUser = OnLogOffUser;
|
handlerLogOffUser = OnLogOffUser;
|
||||||
if (handlerLogOffUser != null)
|
if (handlerLogOffUser != null)
|
||||||
|
@ -510,5 +495,20 @@ namespace OpenSim.Grid.UserServer
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
public override UserProfileData SetupMasterUser(string firstName, string lastName)
|
||||||
|
{
|
||||||
|
throw new Exception("The method or operation is not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public override UserProfileData SetupMasterUser(string firstName, string lastName, string password)
|
||||||
|
{
|
||||||
|
throw new Exception("The method or operation is not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public override UserProfileData SetupMasterUser(LLUUID uuid)
|
||||||
|
{
|
||||||
|
throw new Exception("The method or operation is not implemented.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,10 +32,13 @@ namespace OpenSim.Region.Environment
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Bit Vector for Which Modules to send an instant message to from the Scene or an Associated Module
|
/// Bit Vector for Which Modules to send an instant message to from the Scene or an Associated Module
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
||||||
// This prevents the Modules from sending Instant messages to other modules through the scene
|
// This prevents the Modules from sending Instant messages to other modules through the scene
|
||||||
// and then receiving the same messages
|
// and then receiving the same messages
|
||||||
|
|
||||||
// This is mostly here because on LLSL and the SecondLife Client, IMs,Groups and friends are linked
|
// This is mostly here because on LLSL and the SecondLife Client, IMs,Groups and friends are linked
|
||||||
// inseparably
|
// inseparably
|
||||||
|
|
||||||
[Flags]
|
[Flags]
|
||||||
public enum InstantMessageReceiver : uint
|
public enum InstantMessageReceiver : uint
|
||||||
{
|
{
|
||||||
|
@ -48,4 +51,4 @@ namespace OpenSim.Region.Environment
|
||||||
/// <summary>The Groups Module</summary>
|
/// <summary>The Groups Module</summary>
|
||||||
GroupsModule = 0x00000004
|
GroupsModule = 0x00000004
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,4 +41,4 @@ namespace OpenSim.Region.Environment.Interfaces
|
||||||
|
|
||||||
void RemoveAgentAssetTransactions(LLUUID userID);
|
void RemoveAgentAssetTransactions(LLUUID userID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,9 +30,9 @@ using OpenSim.Region.Environment.Scenes;
|
||||||
|
|
||||||
namespace OpenSim.Region.Environment.Interfaces
|
namespace OpenSim.Region.Environment.Interfaces
|
||||||
{
|
{
|
||||||
public interface IAvatarFactory
|
public interface IAvatarFactory
|
||||||
{
|
{
|
||||||
bool TryGetAvatarAppearance(LLUUID avatarId, out AvatarAppearance appearance);
|
bool TryGetAvatarAppearance(LLUUID avatarId, out AvatarAppearance appearance);
|
||||||
void UpdateDatabase(LLUUID userID, AvatarAppearance avatAppearance);
|
void UpdateDatabase(LLUUID userID, AvatarAppearance avatAppearance);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,4 +39,4 @@ namespace OpenSim.Region.Environment.Interfaces
|
||||||
HttpRequestClass GetNextCompletedRequest();
|
HttpRequestClass GetNextCompletedRequest();
|
||||||
void RemoveCompletedRequest(LLUUID id);
|
void RemoveCompletedRequest(LLUUID id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,8 +70,7 @@ namespace OpenSim.Region.Environment.Interfaces
|
||||||
void handleSignificantClientMovement(IClientAPI remote_client);
|
void handleSignificantClientMovement(IClientAPI remote_client);
|
||||||
void handleAnyClientMovement(ScenePresence avatar);
|
void handleAnyClientMovement(ScenePresence avatar);
|
||||||
void handleParcelAccessRequest(LLUUID agentID, LLUUID sessionID, uint flags, int sequenceID, int landLocalID, IClientAPI remote_client);
|
void handleParcelAccessRequest(LLUUID agentID, LLUUID sessionID, uint flags, int sequenceID, int landLocalID, IClientAPI remote_client);
|
||||||
|
void handleParcelAccessUpdateRequest(LLUUID agentID, LLUUID sessionID, uint flags, int landLocalID, List<ParcelManager.ParcelAccessEntry> entries, IClientAPI remote_client);
|
||||||
|
|
||||||
void handleParcelAccessUpdateRequest(LLUUID agentID, LLUUID sessionID, uint flags, int landLocalID, List<ParcelManager.ParcelAccessEntry> entries,
|
|
||||||
IClientAPI remote_client);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,7 +48,7 @@ namespace OpenSim.Region.Environment.Interfaces
|
||||||
/// <param name="obj"></param>
|
/// <param name="obj"></param>
|
||||||
/// <param name="regionUUID"></param>
|
/// <param name="regionUUID"></param>
|
||||||
void StoreObject(SceneObjectGroup obj, LLUUID regionUUID);
|
void StoreObject(SceneObjectGroup obj, LLUUID regionUUID);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Entirely removes the object, including inventory
|
/// Entirely removes the object, including inventory
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -56,7 +56,7 @@ namespace OpenSim.Region.Environment.Interfaces
|
||||||
/// <param name="regionUUID"></param>
|
/// <param name="regionUUID"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
void RemoveObject(LLUUID uuid, LLUUID regionUUID);
|
void RemoveObject(LLUUID uuid, LLUUID regionUUID);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Store a prim's inventory
|
/// Store a prim's inventory
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -74,4 +74,4 @@ namespace OpenSim.Region.Environment.Interfaces
|
||||||
|
|
||||||
void Shutdown();
|
void Shutdown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,10 +32,10 @@ namespace OpenSim.Region.Environment.Interfaces
|
||||||
{
|
{
|
||||||
public interface IRegionModule
|
public interface IRegionModule
|
||||||
{
|
{
|
||||||
string Name { get; }
|
|
||||||
bool IsSharedModule { get; }
|
|
||||||
void Initialise(Scene scene, IConfigSource source);
|
void Initialise(Scene scene, IConfigSource source);
|
||||||
void PostInitialise();
|
void PostInitialise();
|
||||||
void Close();
|
void Close();
|
||||||
|
string Name { get; }
|
||||||
|
bool IsSharedModule { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,4 +34,4 @@ namespace OpenSim.Region.Environment.Interfaces
|
||||||
{
|
{
|
||||||
void SimChat(Object sender, ChatFromViewerArgs e);
|
void SimChat(Object sender, ChatFromViewerArgs e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,4 +43,4 @@ namespace OpenSim.Region.Environment.Interfaces
|
||||||
uint PeekNextMessageLocalID();
|
uint PeekNextMessageLocalID();
|
||||||
LLUUID PeekNextMessageItemID();
|
LLUUID PeekNextMessageItemID();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,4 +45,4 @@ namespace OpenSim.Region.Environment.Interfaces
|
||||||
void RemoveCompletedSRDRequest(LLUUID id);
|
void RemoveCompletedSRDRequest(LLUUID id);
|
||||||
void CancelSRDRequests(LLUUID itemID);
|
void CancelSRDRequests(LLUUID itemID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,4 +31,4 @@ namespace OpenSim.Region.Environment.Interfaces
|
||||||
{
|
{
|
||||||
bool AddNewFile(string fileName, byte[] data);
|
bool AddNewFile(string fileName, byte[] data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,11 +47,12 @@ namespace OpenSim.Region.Environment
|
||||||
public class ModuleLoader
|
public class ModuleLoader
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
private readonly IConfigSource m_config;
|
|
||||||
|
public Dictionary<string, Assembly> LoadedAssemblys = new Dictionary<string, Assembly>();
|
||||||
|
|
||||||
private readonly List<IRegionModule> m_loadedModules = new List<IRegionModule>();
|
private readonly List<IRegionModule> m_loadedModules = new List<IRegionModule>();
|
||||||
private readonly Dictionary<string, IRegionModule> m_loadedSharedModules = new Dictionary<string, IRegionModule>();
|
private readonly Dictionary<string, IRegionModule> m_loadedSharedModules = new Dictionary<string, IRegionModule>();
|
||||||
public Dictionary<string, Assembly> LoadedAssemblys = new Dictionary<string, Assembly>();
|
private readonly IConfigSource m_config;
|
||||||
|
|
||||||
public ModuleLoader(IConfigSource config)
|
public ModuleLoader(IConfigSource config)
|
||||||
{
|
{
|
||||||
|
@ -85,8 +86,7 @@ namespace OpenSim.Region.Environment
|
||||||
DynamicTextureModule dynamicModule = new DynamicTextureModule();
|
DynamicTextureModule dynamicModule = new DynamicTextureModule();
|
||||||
if (m_loadedSharedModules.ContainsKey(dynamicModule.Name))
|
if (m_loadedSharedModules.ContainsKey(dynamicModule.Name))
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[MODULES]: Module name \"{0}\" already exists in module list. Module type {1} not added!", dynamicModule.Name,
|
m_log.ErrorFormat("[MODULES]: Module name \"{0}\" already exists in module list. Module type {1} not added!", dynamicModule.Name, "DynamicTextureModule");
|
||||||
"DynamicTextureModule");
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -123,15 +123,15 @@ namespace OpenSim.Region.Environment
|
||||||
m_loadedSharedModules.Add(loadMod.Name, loadMod);
|
m_loadedSharedModules.Add(loadMod.Name, loadMod);
|
||||||
}
|
}
|
||||||
|
|
||||||
// AvatarFactoryModule avatarFactory = new AvatarFactoryModule();
|
// AvatarFactoryModule avatarFactory = new AvatarFactoryModule();
|
||||||
// if (m_loadedSharedModules.ContainsKey(avatarFactory.Name))
|
// if (m_loadedSharedModules.ContainsKey(avatarFactory.Name))
|
||||||
// {
|
// {
|
||||||
// m_log.ErrorFormat("[MODULES]: Module name \"{0}\" already exists in module list. Module type {1} not added!", avatarFactory.Name, "AvarFactoryModule");
|
// m_log.ErrorFormat("[MODULES]: Module name \"{0}\" already exists in module list. Module type {1} not added!", avatarFactory.Name, "AvarFactoryModule");
|
||||||
// }
|
// }
|
||||||
// else
|
// else
|
||||||
// {
|
// {
|
||||||
// m_loadedSharedModules.Add(avatarFactory.Name, avatarFactory);
|
// m_loadedSharedModules.Add(avatarFactory.Name, avatarFactory);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
XMLRPCModule xmlRpcMod = new XMLRPCModule();
|
XMLRPCModule xmlRpcMod = new XMLRPCModule();
|
||||||
if (m_loadedSharedModules.ContainsKey(xmlRpcMod.Name))
|
if (m_loadedSharedModules.ContainsKey(xmlRpcMod.Name))
|
||||||
|
@ -149,13 +149,13 @@ namespace OpenSim.Region.Environment
|
||||||
AssetTransactionModule transactionsModule = new AssetTransactionModule();
|
AssetTransactionModule transactionsModule = new AssetTransactionModule();
|
||||||
if (m_loadedSharedModules.ContainsKey(transactionsModule.Name))
|
if (m_loadedSharedModules.ContainsKey(transactionsModule.Name))
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[MODULES]: Module name \"{0}\" already exists in module list. Module type {1} not added!", transactionsModule.Name,
|
m_log.ErrorFormat("[MODULES]: Module name \"{0}\" already exists in module list. Module type {1} not added!", transactionsModule.Name, "TransactionModule");
|
||||||
"TransactionModule");
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_loadedSharedModules.Add(transactionsModule.Name, transactionsModule);
|
m_loadedSharedModules.Add(transactionsModule.Name, transactionsModule);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void InitialiseSharedModules(Scene scene)
|
public void InitialiseSharedModules(Scene scene)
|
||||||
|
@ -284,7 +284,7 @@ namespace OpenSim.Region.Environment
|
||||||
{
|
{
|
||||||
if (pluginType.GetInterface("IRegionModule") != null)
|
if (pluginType.GetInterface("IRegionModule") != null)
|
||||||
{
|
{
|
||||||
modules.Add((IRegionModule) Activator.CreateInstance(pluginType));
|
modules.Add((IRegionModule)Activator.CreateInstance(pluginType));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -320,8 +320,8 @@ namespace OpenSim.Region.Environment
|
||||||
public void UnloadModule(IRegionModule rm)
|
public void UnloadModule(IRegionModule rm)
|
||||||
{
|
{
|
||||||
rm.Close();
|
rm.Close();
|
||||||
|
|
||||||
m_loadedModules.Remove(rm);
|
m_loadedModules.Remove(rm);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,16 +40,15 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetDownload
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Asset requests with data which are ready to be sent back to requesters. This includes textures.
|
/// Asset requests with data which are ready to be sent back to requesters. This includes textures.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private readonly List<AssetRequest> AssetRequests;
|
private List<AssetRequest> AssetRequests;
|
||||||
|
|
||||||
private readonly Dictionary<LLUUID, Scene> RegisteredScenes = new Dictionary<LLUUID, Scene>();
|
private Scene m_scene;
|
||||||
|
private Dictionary<LLUUID, Scene> RegisteredScenes = new Dictionary<LLUUID, Scene>();
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Assets requests (for each user) which are waiting for asset server data. This includes texture requests
|
/// Assets requests (for each user) which are waiting for asset server data. This includes texture requests
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private readonly Dictionary<LLUUID, Dictionary<LLUUID, AssetRequest>> RequestedAssets;
|
private Dictionary<LLUUID, Dictionary<LLUUID, AssetRequest>> RequestedAssets;
|
||||||
|
|
||||||
private Scene m_scene;
|
|
||||||
|
|
||||||
public AssetDownloadModule()
|
public AssetDownloadModule()
|
||||||
{
|
{
|
||||||
|
@ -206,18 +205,22 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetDownload
|
||||||
{
|
{
|
||||||
public AssetBase AssetInf;
|
public AssetBase AssetInf;
|
||||||
public byte AssetRequestSource = 2;
|
public byte AssetRequestSource = 2;
|
||||||
public long DataPointer;
|
public long DataPointer = 0;
|
||||||
public int DiscardLevel = -1;
|
public int DiscardLevel = -1;
|
||||||
public AssetBase ImageInfo;
|
public AssetBase ImageInfo;
|
||||||
public bool IsTextureRequest;
|
public bool IsTextureRequest;
|
||||||
public int NumPackets;
|
public int NumPackets = 0;
|
||||||
public int PacketCounter;
|
public int PacketCounter = 0;
|
||||||
public byte[] Params;
|
public byte[] Params = null;
|
||||||
public LLUUID RequestAssetID;
|
public LLUUID RequestAssetID;
|
||||||
public IClientAPI RequestUser;
|
public IClientAPI RequestUser;
|
||||||
public LLUUID TransferRequestID;
|
public LLUUID TransferRequestID;
|
||||||
//public bool AssetInCache;
|
//public bool AssetInCache;
|
||||||
//public int TimeRequested;
|
//public int TimeRequested;
|
||||||
|
|
||||||
|
public AssetRequest()
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
|
@ -44,7 +44,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
|
||||||
// = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
// = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
// Fields
|
// Fields
|
||||||
private readonly bool m_dumpAssetsToFile;
|
private bool m_dumpAssetsToFile;
|
||||||
public AgentAssetTransactionsManager Manager;
|
public AgentAssetTransactionsManager Manager;
|
||||||
public LLUUID UserID;
|
public LLUUID UserID;
|
||||||
public Dictionary<LLUUID, AssetXferUploader> XferUploaders = new Dictionary<LLUUID, AssetXferUploader>();
|
public Dictionary<LLUUID, AssetXferUploader> XferUploaders = new Dictionary<LLUUID, AssetXferUploader>();
|
||||||
|
@ -141,23 +141,23 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
|
||||||
public class AssetXferUploader
|
public class AssetXferUploader
|
||||||
{
|
{
|
||||||
// Fields
|
// Fields
|
||||||
private readonly bool m_dumpAssetToFile;
|
|
||||||
private readonly AgentAssetTransactions m_userTransactions;
|
|
||||||
public bool AddToInventory;
|
public bool AddToInventory;
|
||||||
public AssetBase Asset;
|
public AssetBase Asset;
|
||||||
public LLUUID InventFolder = LLUUID.Zero;
|
public LLUUID InventFolder = LLUUID.Zero;
|
||||||
private sbyte invType;
|
private sbyte invType = 0;
|
||||||
private bool m_createItem;
|
private bool m_createItem = false;
|
||||||
private string m_description = String.Empty;
|
private string m_description = String.Empty;
|
||||||
private bool m_finished;
|
private bool m_dumpAssetToFile;
|
||||||
|
private bool m_finished = false;
|
||||||
private string m_name = String.Empty;
|
private string m_name = String.Empty;
|
||||||
private bool m_storeLocal;
|
private bool m_storeLocal;
|
||||||
private uint nextPerm;
|
private AgentAssetTransactions m_userTransactions;
|
||||||
|
private uint nextPerm = 0;
|
||||||
private IClientAPI ourClient;
|
private IClientAPI ourClient;
|
||||||
public LLUUID TransactionID = LLUUID.Zero;
|
public LLUUID TransactionID = LLUUID.Zero;
|
||||||
private sbyte type;
|
private sbyte type = 0;
|
||||||
public bool UploadComplete;
|
public bool UploadComplete;
|
||||||
private byte wearableType;
|
private byte wearableType = 0;
|
||||||
public ulong XferID;
|
public ulong XferID;
|
||||||
|
|
||||||
public AssetXferUploader(AgentAssetTransactions transactions, bool dumpAssetToFile)
|
public AssetXferUploader(AgentAssetTransactions transactions, bool dumpAssetToFile)
|
||||||
|
@ -390,7 +390,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
|
||||||
item.BasePermissions = 2147483647;
|
item.BasePermissions = 2147483647;
|
||||||
item.CurrentPermissions = 2147483647;
|
item.CurrentPermissions = 2147483647;
|
||||||
item.NextPermissions = nextPerm;
|
item.NextPermissions = nextPerm;
|
||||||
item.Flags = wearableType;
|
item.Flags = (uint) wearableType;
|
||||||
|
|
||||||
userInfo.AddItem(ourClient.AgentId, item);
|
userInfo.AddItem(ourClient.AgentId, item);
|
||||||
ourClient.SendInventoryItemCreateUpdate(item);
|
ourClient.SendInventoryItemCreateUpdate(item);
|
||||||
|
|
|
@ -40,11 +40,16 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
|
||||||
public class AssetTransactionModule : IRegionModule, IAgentAssetTransactions
|
public class AssetTransactionModule : IRegionModule, IAgentAssetTransactions
|
||||||
{
|
{
|
||||||
private readonly Dictionary<LLUUID, Scene> RegisteredScenes = new Dictionary<LLUUID, Scene>();
|
private readonly Dictionary<LLUUID, Scene> RegisteredScenes = new Dictionary<LLUUID, Scene>();
|
||||||
private bool m_dumpAssetsToFile;
|
private bool m_dumpAssetsToFile = false;
|
||||||
private Scene m_scene;
|
private Scene m_scene = null;
|
||||||
|
|
||||||
private AgentAssetTransactionsManager m_transactionManager;
|
private AgentAssetTransactionsManager m_transactionManager;
|
||||||
|
|
||||||
|
public AssetTransactionModule()
|
||||||
|
{
|
||||||
|
// System.Console.WriteLine("creating AgentAssetTransactionModule");
|
||||||
|
}
|
||||||
|
|
||||||
#region IAgentAssetTransactions Members
|
#region IAgentAssetTransactions Members
|
||||||
|
|
||||||
public void HandleItemCreationFromTransaction(IClientAPI remoteClient, LLUUID transactionID, LLUUID folderID,
|
public void HandleItemCreationFromTransaction(IClientAPI remoteClient, LLUUID transactionID, LLUUID folderID,
|
||||||
|
@ -140,13 +145,13 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Each agent has its own singleton collection of transactions
|
/// Each agent has its own singleton collection of transactions
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private readonly Dictionary<LLUUID, AgentAssetTransactions> AgentTransactions =
|
private Dictionary<LLUUID, AgentAssetTransactions> AgentTransactions =
|
||||||
new Dictionary<LLUUID, AgentAssetTransactions>();
|
new Dictionary<LLUUID, AgentAssetTransactions>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Should we dump uploaded assets to the filesystem?
|
/// Should we dump uploaded assets to the filesystem?
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private readonly bool m_dumpAssetsToFile;
|
private bool m_dumpAssetsToFile;
|
||||||
|
|
||||||
public Scene MyScene;
|
public Scene MyScene;
|
||||||
|
|
||||||
|
|
|
@ -47,8 +47,6 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload
|
||||||
private readonly BlockingQueue<ITextureSender> m_queueSenders
|
private readonly BlockingQueue<ITextureSender> m_queueSenders
|
||||||
= new BlockingQueue<ITextureSender>();
|
= new BlockingQueue<ITextureSender>();
|
||||||
|
|
||||||
private readonly List<Scene> m_scenes = new List<Scene>();
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Each user has their own texture download service.
|
/// Each user has their own texture download service.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -56,9 +54,14 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload
|
||||||
new Dictionary<LLUUID, UserTextureDownloadService>();
|
new Dictionary<LLUUID, UserTextureDownloadService>();
|
||||||
|
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
|
private List<Scene> m_scenes = new List<Scene>();
|
||||||
|
|
||||||
private Thread m_thread;
|
private Thread m_thread;
|
||||||
|
|
||||||
|
public TextureDownloadModule()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
#region IRegionModule Members
|
#region IRegionModule Members
|
||||||
|
|
||||||
public void Initialise(Scene scene, IConfigSource config)
|
public void Initialise(Scene scene, IConfigSource config)
|
||||||
|
@ -66,7 +69,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload
|
||||||
if (m_scene == null)
|
if (m_scene == null)
|
||||||
{
|
{
|
||||||
//Console.WriteLine("Creating Texture download module");
|
//Console.WriteLine("Creating Texture download module");
|
||||||
m_thread = new Thread(ProcessTextureSenders);
|
m_thread = new Thread(new ThreadStart(ProcessTextureSenders));
|
||||||
m_thread.Name = "ProcessTextureSenderThread";
|
m_thread.Name = "ProcessTextureSenderThread";
|
||||||
m_thread.IsBackground = true;
|
m_thread.IsBackground = true;
|
||||||
m_thread.Start();
|
m_thread.Start();
|
||||||
|
|
|
@ -40,13 +40,13 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload
|
||||||
//private static readonly log4net.ILog m_log
|
//private static readonly log4net.ILog m_log
|
||||||
// = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
// = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private readonly LLUUID m_textureId;
|
private bool m_cancel = false;
|
||||||
private bool m_cancel;
|
|
||||||
private IClientAPI m_client;
|
private IClientAPI m_client;
|
||||||
|
|
||||||
// See ITextureSender
|
// See ITextureSender
|
||||||
|
|
||||||
private bool m_sending;
|
private bool m_sending = false;
|
||||||
|
private LLUUID m_textureId;
|
||||||
|
|
||||||
// See ITextureSender
|
// See ITextureSender
|
||||||
|
|
||||||
|
|
|
@ -43,14 +43,12 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureSender
|
||||||
private static readonly ILog m_log
|
private static readonly ILog m_log
|
||||||
= LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
= LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private readonly IClientAPI RequestUser;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Records the number of times texture send has been called.
|
/// Records the number of times texture send has been called.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int counter;
|
public int counter = 0;
|
||||||
|
|
||||||
public bool ImageLoaded;
|
public bool ImageLoaded = false;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Holds the texture asset to send.
|
/// Holds the texture asset to send.
|
||||||
|
@ -59,26 +57,27 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureSender
|
||||||
|
|
||||||
//public LLUUID assetID { get { return m_asset.FullID; } }
|
//public LLUUID assetID { get { return m_asset.FullID; } }
|
||||||
|
|
||||||
private bool m_cancel;
|
private bool m_cancel = false;
|
||||||
|
|
||||||
// See ITextureSender
|
// See ITextureSender
|
||||||
|
|
||||||
private bool m_sending;
|
private bool m_sending = false;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// This is actually the number of extra packets required to send the texture data! We always assume
|
/// This is actually the number of extra packets required to send the texture data! We always assume
|
||||||
/// at least one is required.
|
/// at least one is required.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private int NumPackets;
|
private int NumPackets = 0;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Holds the packet number to send next. In this case, each packet is 1000 bytes long and starts
|
/// Holds the packet number to send next. In this case, each packet is 1000 bytes long and starts
|
||||||
/// at the 600th byte (0th indexed).
|
/// at the 600th byte (0th indexed).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private int PacketCounter;
|
private int PacketCounter = 0;
|
||||||
|
|
||||||
private int RequestedDiscardLevel = -1;
|
private int RequestedDiscardLevel = -1;
|
||||||
private uint StartPacketNumber;
|
private IClientAPI RequestUser;
|
||||||
|
private uint StartPacketNumber = 0;
|
||||||
|
|
||||||
public TextureSender(IClientAPI client, int discardLevel, uint packetNumber)
|
public TextureSender(IClientAPI client, int discardLevel, uint packetNumber)
|
||||||
{
|
{
|
||||||
|
@ -191,7 +190,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureSender
|
||||||
catch (ArgumentOutOfRangeException)
|
catch (ArgumentOutOfRangeException)
|
||||||
{
|
{
|
||||||
m_log.Error("[TEXTURE SENDER]: Unable to separate texture into multiple packets: Array bounds failure on asset:" +
|
m_log.Error("[TEXTURE SENDER]: Unable to separate texture into multiple packets: Array bounds failure on asset:" +
|
||||||
m_asset.FullID);
|
m_asset.FullID.ToString());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
RequestUser.OutPacket(im, ThrottleOutPacketType.Texture);
|
RequestUser.OutPacket(im, ThrottleOutPacketType.Texture);
|
||||||
|
|
|
@ -41,6 +41,10 @@ namespace OpenSim.Region.Environment.Modules.Agent.Xfer
|
||||||
public Dictionary<string, byte[]> NewFiles = new Dictionary<string, byte[]>();
|
public Dictionary<string, byte[]> NewFiles = new Dictionary<string, byte[]>();
|
||||||
public Dictionary<ulong, XferDownLoad> Transfers = new Dictionary<ulong, XferDownLoad>();
|
public Dictionary<ulong, XferDownLoad> Transfers = new Dictionary<ulong, XferDownLoad>();
|
||||||
|
|
||||||
|
public XferModule()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
#region IRegionModule Members
|
#region IRegionModule Members
|
||||||
|
|
||||||
public void Initialise(Scene scene, IConfigSource config)
|
public void Initialise(Scene scene, IConfigSource config)
|
||||||
|
@ -145,11 +149,11 @@ namespace OpenSim.Region.Environment.Modules.Agent.Xfer
|
||||||
public IClientAPI Client;
|
public IClientAPI Client;
|
||||||
private bool complete;
|
private bool complete;
|
||||||
public byte[] Data = new byte[0];
|
public byte[] Data = new byte[0];
|
||||||
public int DataPointer;
|
public int DataPointer = 0;
|
||||||
public string FileName = String.Empty;
|
public string FileName = String.Empty;
|
||||||
public uint Packet;
|
public uint Packet = 0;
|
||||||
public uint Serial = 1;
|
public uint Serial = 1;
|
||||||
public ulong XferID;
|
public ulong XferID = 0;
|
||||||
|
|
||||||
public XferDownLoad(string fileName, byte[] data, ulong xferID, IClientAPI client)
|
public XferDownLoad(string fileName, byte[] data, ulong xferID, IClientAPI client)
|
||||||
{
|
{
|
||||||
|
@ -213,7 +217,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.Xfer
|
||||||
{
|
{
|
||||||
byte[] transferData = new byte[Data.Length - DataPointer];
|
byte[] transferData = new byte[Data.Length - DataPointer];
|
||||||
Array.Copy(Data, DataPointer, transferData, 0, Data.Length - DataPointer);
|
Array.Copy(Data, DataPointer, transferData, 0, Data.Length - DataPointer);
|
||||||
uint endPacket = Packet |= 0x80000000;
|
uint endPacket = Packet |= (uint) 0x80000000;
|
||||||
Client.SendXferPacket(XferID, endPacket, transferData);
|
Client.SendXferPacket(XferID, endPacket, transferData);
|
||||||
Packet++;
|
Packet++;
|
||||||
DataPointer += (Data.Length - DataPointer);
|
DataPointer += (Data.Length - DataPointer);
|
||||||
|
|
|
@ -44,15 +44,15 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat
|
||||||
public class ChatModule : IRegionModule, ISimChat
|
public class ChatModule : IRegionModule, ISimChat
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
private readonly List<Scene> m_scenes = new List<Scene>();
|
private string m_defaultzone = null;
|
||||||
private string m_defaultzone;
|
|
||||||
|
|
||||||
private IRCChatModule m_irc;
|
private IRCChatModule m_irc = null;
|
||||||
private Thread m_irc_connector;
|
private Thread m_irc_connector = null;
|
||||||
|
|
||||||
private string m_last_leaving_user;
|
private string m_last_leaving_user = null;
|
||||||
private string m_last_new_user;
|
private string m_last_new_user = null;
|
||||||
private int m_saydistance = 30;
|
private int m_saydistance = 30;
|
||||||
|
private List<Scene> m_scenes = new List<Scene>();
|
||||||
private int m_shoutdistance = 100;
|
private int m_shoutdistance = 100;
|
||||||
internal object m_syncInit = new object();
|
internal object m_syncInit = new object();
|
||||||
internal object m_syncLogout = new object();
|
internal object m_syncLogout = new object();
|
||||||
|
@ -257,7 +257,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
m_log.Error("[IRC]: NewClient exception trap:" + ex);
|
m_log.Error("[IRC]: NewClient exception trap:" + ex.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -284,7 +284,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
m_log.Error("[IRC]: ClientLoggedOut exception trap:" + ex);
|
m_log.Error("[IRC]: ClientLoggedOut exception trap:" + ex.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -372,24 +372,24 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private readonly string m_basenick;
|
|
||||||
private readonly string m_channel;
|
|
||||||
private readonly bool m_enabled;
|
|
||||||
private readonly uint m_port = 6668;
|
|
||||||
private readonly string m_privmsgformat = "PRIVMSG {0} :<{1} in {2}>: {3}";
|
|
||||||
private readonly string m_user = "USER OpenSimBot 8 * :I'm a OpenSim to irc bot";
|
|
||||||
private Thread listener;
|
private Thread listener;
|
||||||
private bool m_connected;
|
|
||||||
private List<Scene> m_last_scenes;
|
private string m_basenick = null;
|
||||||
private string m_nick;
|
private string m_channel = null;
|
||||||
|
private bool m_connected = false;
|
||||||
|
private bool m_enabled = false;
|
||||||
|
private List<Scene> m_last_scenes = null;
|
||||||
|
private string m_nick = null;
|
||||||
|
private uint m_port = 6668;
|
||||||
|
private string m_privmsgformat = "PRIVMSG {0} :<{1} in {2}>: {3}";
|
||||||
private StreamReader m_reader;
|
private StreamReader m_reader;
|
||||||
private List<Scene> m_scenes;
|
private List<Scene> m_scenes = null;
|
||||||
private string m_server;
|
private string m_server = null;
|
||||||
|
|
||||||
private NetworkStream m_stream;
|
private NetworkStream m_stream;
|
||||||
internal object m_syncConnect = new object();
|
internal object m_syncConnect = new object();
|
||||||
private TcpClient m_tcp;
|
private TcpClient m_tcp;
|
||||||
|
private string m_user = "USER OpenSimBot 8 * :I'm a OpenSim to irc bot";
|
||||||
private StreamWriter m_writer;
|
private StreamWriter m_writer;
|
||||||
|
|
||||||
private Thread pingSender;
|
private Thread pingSender;
|
||||||
|
@ -478,13 +478,13 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat
|
||||||
m_reader = new StreamReader(m_stream);
|
m_reader = new StreamReader(m_stream);
|
||||||
m_writer = new StreamWriter(m_stream);
|
m_writer = new StreamWriter(m_stream);
|
||||||
|
|
||||||
pingSender = new Thread(PingRun);
|
pingSender = new Thread(new ThreadStart(PingRun));
|
||||||
pingSender.Name = "PingSenderThread";
|
pingSender.Name = "PingSenderThread";
|
||||||
pingSender.IsBackground = true;
|
pingSender.IsBackground = true;
|
||||||
pingSender.Start();
|
pingSender.Start();
|
||||||
ThreadTracker.Add(pingSender);
|
ThreadTracker.Add(pingSender);
|
||||||
|
|
||||||
listener = new Thread(ListenerRun);
|
listener = new Thread(new ThreadStart(ListenerRun));
|
||||||
listener.Name = "IRCChatModuleListenerThread";
|
listener.Name = "IRCChatModuleListenerThread";
|
||||||
listener.IsBackground = true;
|
listener.IsBackground = true;
|
||||||
listener.Start();
|
listener.Start();
|
||||||
|
@ -545,7 +545,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
m_log.Error("[IRC]: PrivMsg exception trap:" + ex);
|
m_log.Error("[IRC]: PrivMsg exception trap:" + ex.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -588,7 +588,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (m_connected)
|
if (m_connected == true)
|
||||||
{
|
{
|
||||||
m_writer.WriteLine("PING :" + m_server);
|
m_writer.WriteLine("PING :" + m_server);
|
||||||
m_writer.Flush();
|
m_writer.Flush();
|
||||||
|
@ -602,7 +602,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
m_log.Error("[IRC]: PingRun exception trap:" + ex + "\n" + ex.StackTrace);
|
m_log.Error("[IRC]: PingRun exception trap:" + ex.ToString() + "\n" + ex.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -615,7 +615,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
while (m_connected && ((inputLine = m_reader.ReadLine()) != null))
|
while ((m_connected == true) && ((inputLine = m_reader.ReadLine()) != null))
|
||||||
{
|
{
|
||||||
// Console.WriteLine(inputLine);
|
// Console.WriteLine(inputLine);
|
||||||
if (inputLine.Contains(m_channel))
|
if (inputLine.Contains(m_channel))
|
||||||
|
@ -659,7 +659,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
m_log.Error("[IRC]: ListenerRun exception trap:" + ex + "\n" + ex.StackTrace);
|
m_log.Error("[IRC]: ListenerRun exception trap:" + ex.ToString() + "\n" + ex.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -685,7 +685,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat
|
||||||
}
|
}
|
||||||
catch (Exception ex) // IRC gate should not crash Sim
|
catch (Exception ex) // IRC gate should not crash Sim
|
||||||
{
|
{
|
||||||
m_log.Error("[IRC]: BroadcastSim Exception Trap:" + ex + "\n" + ex.StackTrace);
|
m_log.Error("[IRC]: BroadcastSim Exception Trap:" + ex.ToString() + "\n" + ex.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -65,55 +65,55 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
public class SampleMoneyModule : IMoneyModule
|
public class SampleMoneyModule : IMoneyModule
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
private readonly Dictionary<LLUUID, int> m_KnownClientFunds = new Dictionary<LLUUID, int>();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Region UUIDS indexed by AgentID
|
|
||||||
/// </summary>
|
|
||||||
private readonly Dictionary<LLUUID, LLUUID> m_rootAgents = new Dictionary<LLUUID, LLUUID>();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Scenes by Region Handle
|
|
||||||
/// </summary>
|
|
||||||
private readonly Dictionary<ulong, Scene> m_scenel = new Dictionary<ulong, Scene>();
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Where Stipends come from and Fees go to.
|
/// Where Stipends come from and Fees go to.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private LLUUID EconomyBaseAccount = LLUUID.Zero;
|
private LLUUID EconomyBaseAccount = LLUUID.Zero;
|
||||||
|
|
||||||
private float EnergyEfficiency;
|
private float EnergyEfficiency = 0f;
|
||||||
private bool gridmode;
|
private bool gridmode = false;
|
||||||
private ObjectPaid handerOnObjectPaid;
|
private ObjectPaid handerOnObjectPaid;
|
||||||
private bool m_enabled = true;
|
private bool m_enabled = true;
|
||||||
|
|
||||||
private IConfigSource m_gConfig;
|
private IConfigSource m_gConfig;
|
||||||
|
|
||||||
private bool m_keepMoneyAcrossLogins = true;
|
private bool m_keepMoneyAcrossLogins = true;
|
||||||
|
private Dictionary<LLUUID, int> m_KnownClientFunds = new Dictionary<LLUUID, int>();
|
||||||
private string m_LandAddress = String.Empty;
|
private string m_LandAddress = String.Empty;
|
||||||
|
|
||||||
private int m_minFundsBeforeRefresh = 100;
|
private int m_minFundsBeforeRefresh = 100;
|
||||||
private string m_MoneyAddress = String.Empty;
|
private string m_MoneyAddress = String.Empty;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Region UUIDS indexed by AgentID
|
||||||
|
/// </summary>
|
||||||
|
private Dictionary<LLUUID, LLUUID> m_rootAgents = new Dictionary<LLUUID, LLUUID>();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Scenes by Region Handle
|
||||||
|
/// </summary>
|
||||||
|
private Dictionary<ulong, Scene> m_scenel = new Dictionary<ulong, Scene>();
|
||||||
|
|
||||||
private int m_stipend = 1000;
|
private int m_stipend = 1000;
|
||||||
|
|
||||||
private int ObjectCapacity = 45000;
|
private int ObjectCapacity = 45000;
|
||||||
private int ObjectCount;
|
private int ObjectCount = 0;
|
||||||
private int PriceEnergyUnit;
|
private int PriceEnergyUnit = 0;
|
||||||
private int PriceGroupCreate;
|
private int PriceGroupCreate = 0;
|
||||||
private int PriceObjectClaim;
|
private int PriceObjectClaim = 0;
|
||||||
private float PriceObjectRent;
|
private float PriceObjectRent = 0f;
|
||||||
private float PriceObjectScaleFactor;
|
private float PriceObjectScaleFactor = 0f;
|
||||||
private int PriceParcelClaim;
|
private int PriceParcelClaim = 0;
|
||||||
private float PriceParcelClaimFactor;
|
private float PriceParcelClaimFactor = 0f;
|
||||||
private int PriceParcelRent;
|
private int PriceParcelRent = 0;
|
||||||
private int PricePublicObjectDecay;
|
private int PricePublicObjectDecay = 0;
|
||||||
private int PricePublicObjectDelete;
|
private int PricePublicObjectDelete = 0;
|
||||||
private int PriceRentLight;
|
private int PriceRentLight = 0;
|
||||||
private int PriceUpload;
|
private int PriceUpload = 0;
|
||||||
private int TeleportMinPrice;
|
private int TeleportMinPrice = 0;
|
||||||
|
|
||||||
private float TeleportPriceExponent;
|
private float TeleportPriceExponent = 0f;
|
||||||
private int UserLevelPaysFees = 2;
|
private int UserLevelPaysFees = 2;
|
||||||
private Scene XMLRPCHandler;
|
private Scene XMLRPCHandler;
|
||||||
|
|
||||||
|
@ -305,7 +305,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
Hashtable hbinfo =
|
Hashtable hbinfo =
|
||||||
GetBalanceForUserFromMoneyServer(client.AgentId, client.SecureSessionId, s.RegionInfo.originRegionID.ToString(),
|
GetBalanceForUserFromMoneyServer(client.AgentId, client.SecureSessionId, s.RegionInfo.originRegionID.ToString(),
|
||||||
s.RegionInfo.regionSecret);
|
s.RegionInfo.regionSecret);
|
||||||
if ((bool) hbinfo["success"])
|
if ((bool) hbinfo["success"] == true)
|
||||||
{
|
{
|
||||||
Helpers.TryParse((string) hbinfo["agentId"], out agentID);
|
Helpers.TryParse((string) hbinfo["agentId"], out agentID);
|
||||||
try
|
try
|
||||||
|
@ -333,7 +333,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.WarnFormat("[MONEY]: Getting Money for user {0} failed with the following message:{1}", agentID,
|
m_log.WarnFormat("[MONEY]: Getting Money for user {0} failed with the following message:{1}", agentID,
|
||||||
hbinfo["errorMessage"]);
|
(string) hbinfo["errorMessage"]);
|
||||||
client.SendAlertMessage((string) hbinfo["errorMessage"]);
|
client.SendAlertMessage((string) hbinfo["errorMessage"]);
|
||||||
}
|
}
|
||||||
SendMoneyBalance(client, agentID, client.SessionId, LLUUID.Zero);
|
SendMoneyBalance(client, agentID, client.SessionId, LLUUID.Zero);
|
||||||
|
@ -660,7 +660,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
|
|
||||||
Hashtable hresult = genericCurrencyXMLRPCRequest(ht, "regionMoveMoney");
|
Hashtable hresult = genericCurrencyXMLRPCRequest(ht, "regionMoveMoney");
|
||||||
|
|
||||||
if ((bool) hresult["success"])
|
if ((bool) hresult["success"] == true)
|
||||||
{
|
{
|
||||||
int funds1 = 0;
|
int funds1 = 0;
|
||||||
int funds2 = 0;
|
int funds2 = 0;
|
||||||
|
@ -718,7 +718,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
Hashtable hbinfo =
|
Hashtable hbinfo =
|
||||||
GetBalanceForUserFromMoneyServer(aClient.AgentId, aClient.SecureSessionId, s.RegionInfo.originRegionID.ToString(),
|
GetBalanceForUserFromMoneyServer(aClient.AgentId, aClient.SecureSessionId, s.RegionInfo.originRegionID.ToString(),
|
||||||
s.RegionInfo.regionSecret);
|
s.RegionInfo.regionSecret);
|
||||||
if ((bool) hbinfo["success"])
|
if ((bool) hbinfo["success"] == true)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -743,7 +743,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.WarnFormat("[MONEY]: Getting Money for user {0} failed with the following message:{1}", agentId,
|
m_log.WarnFormat("[MONEY]: Getting Money for user {0} failed with the following message:{1}", agentId,
|
||||||
hbinfo["errorMessage"]);
|
(string) hbinfo["errorMessage"]);
|
||||||
aClient.SendAlertMessage((string) hbinfo["errorMessage"]);
|
aClient.SendAlertMessage((string) hbinfo["errorMessage"]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -812,7 +812,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
string secret = (string) requestData["secret"];
|
string secret = (string) requestData["secret"];
|
||||||
|
|
||||||
Scene userScene = GetRandomScene();
|
Scene userScene = GetRandomScene();
|
||||||
if (userScene.RegionInfo.regionSecret == secret)
|
if (userScene.RegionInfo.regionSecret.ToString() == secret)
|
||||||
{
|
{
|
||||||
IClientAPI client = LocateClientObject(agentId);
|
IClientAPI client = LocateClientObject(agentId);
|
||||||
|
|
||||||
|
@ -1238,7 +1238,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
{
|
{
|
||||||
lock (e)
|
lock (e)
|
||||||
{
|
{
|
||||||
if (e.economyValidated && e.transactionID == 0)
|
if (e.economyValidated == true && e.transactionID == 0)
|
||||||
{
|
{
|
||||||
e.transactionID = Util.UnixTimeSinceEpoch();
|
e.transactionID = Util.UnixTimeSinceEpoch();
|
||||||
|
|
||||||
|
@ -1328,7 +1328,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.Warn("[MONEY]: Potential Fraud Warning, got money transfer request for avatar that isn't in this simulator - Details; Sender:" +
|
m_log.Warn("[MONEY]: Potential Fraud Warning, got money transfer request for avatar that isn't in this simulator - Details; Sender:" +
|
||||||
e.sender + " Receiver: " + e.receiver + " Amount: " + e.amount);
|
e.sender.ToString() + " Receiver: " + e.receiver.ToString() + " Amount: " + e.amount.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1400,7 +1400,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
{
|
{
|
||||||
Hashtable hresult =
|
Hashtable hresult =
|
||||||
claim_user(avatar.UUID, avatar.ControllingClient.SecureSessionId, regionID, RegionItem.RegionInfo.regionSecret);
|
claim_user(avatar.UUID, avatar.ControllingClient.SecureSessionId, regionID, RegionItem.RegionInfo.regionSecret);
|
||||||
if ((bool) hresult["success"])
|
if ((bool) hresult["success"] == true)
|
||||||
{
|
{
|
||||||
int funds = 0;
|
int funds = 0;
|
||||||
try
|
try
|
||||||
|
@ -1432,7 +1432,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
if (RegionItem != null)
|
if (RegionItem != null)
|
||||||
{
|
{
|
||||||
Hashtable hresult = claim_user(avatar.UUID, avatar.ControllingClient.SecureSessionId, regionID, RegionItem.RegionInfo.regionSecret);
|
Hashtable hresult = claim_user(avatar.UUID, avatar.ControllingClient.SecureSessionId, regionID, RegionItem.RegionInfo.regionSecret);
|
||||||
if ((bool) hresult["success"])
|
if ((bool) hresult["success"] == true)
|
||||||
{
|
{
|
||||||
int funds = 0;
|
int funds = 0;
|
||||||
try
|
try
|
||||||
|
@ -1460,7 +1460,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum TransactionType
|
public enum TransactionType : int
|
||||||
{
|
{
|
||||||
SystemGenerated = 0,
|
SystemGenerated = 0,
|
||||||
RegionMoneyRequest = 1,
|
RegionMoneyRequest = 1,
|
||||||
|
|
|
@ -42,10 +42,10 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private readonly Dictionary<LLUUID, List<FriendListItem>> FriendLists = new Dictionary<LLUUID, List<FriendListItem>>();
|
private Dictionary<LLUUID, List<FriendListItem>> FriendLists = new Dictionary<LLUUID, List<FriendListItem>>();
|
||||||
private readonly Dictionary<LLUUID, LLUUID> m_pendingFriendRequests = new Dictionary<LLUUID, LLUUID>();
|
private Dictionary<LLUUID, LLUUID> m_pendingFriendRequests = new Dictionary<LLUUID, LLUUID>();
|
||||||
private readonly Dictionary<LLUUID, ulong> m_rootAgents = new Dictionary<LLUUID, ulong>();
|
private Dictionary<LLUUID, ulong> m_rootAgents = new Dictionary<LLUUID, ulong>();
|
||||||
private readonly List<Scene> m_scene = new List<Scene>();
|
private List<Scene> m_scene = new List<Scene>();
|
||||||
|
|
||||||
#region IRegionModule Members
|
#region IRegionModule Members
|
||||||
|
|
||||||
|
@ -213,7 +213,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends
|
||||||
List<LLUUID> updateUsers = new List<LLUUID>();
|
List<LLUUID> updateUsers = new List<LLUUID>();
|
||||||
foreach (FriendListItem fli in lfli)
|
foreach (FriendListItem fli in lfli)
|
||||||
{
|
{
|
||||||
if (fli.onlinestatus)
|
if (fli.onlinestatus == true)
|
||||||
{
|
{
|
||||||
updateUsers.Add(fli.Friend);
|
updateUsers.Add(fli.Friend);
|
||||||
}
|
}
|
||||||
|
@ -357,20 +357,20 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends
|
||||||
// https://wiki.secondlife.com/wiki/ImprovedInstantMessage
|
// https://wiki.secondlife.com/wiki/ImprovedInstantMessage
|
||||||
|
|
||||||
// 38 == Offer friendship
|
// 38 == Offer friendship
|
||||||
if (dialog == 38)
|
if (dialog == (byte) 38)
|
||||||
{
|
{
|
||||||
LLUUID friendTransactionID = LLUUID.Random();
|
LLUUID friendTransactionID = LLUUID.Random();
|
||||||
|
|
||||||
m_pendingFriendRequests.Add(friendTransactionID, fromAgentID);
|
m_pendingFriendRequests.Add(friendTransactionID, fromAgentID);
|
||||||
|
|
||||||
m_log.Info("[FRIEND]: 38 - From:" + fromAgentID + " To: " + toAgentID + " Session:" + imSessionID + " Message:" +
|
m_log.Info("[FRIEND]: 38 - From:" + fromAgentID.ToString() + " To: " + toAgentID.ToString() + " Session:" + imSessionID.ToString() + " Message:" +
|
||||||
message);
|
message);
|
||||||
GridInstantMessage msg = new GridInstantMessage();
|
GridInstantMessage msg = new GridInstantMessage();
|
||||||
msg.fromAgentID = fromAgentID.UUID;
|
msg.fromAgentID = fromAgentID.UUID;
|
||||||
msg.fromAgentSession = fromAgentSession.UUID;
|
msg.fromAgentSession = fromAgentSession.UUID;
|
||||||
msg.toAgentID = toAgentID.UUID;
|
msg.toAgentID = toAgentID.UUID;
|
||||||
msg.imSessionID = friendTransactionID.UUID; // This is the item we're mucking with here
|
msg.imSessionID = friendTransactionID.UUID; // This is the item we're mucking with here
|
||||||
m_log.Info("[FRIEND]: Filling Session: " + msg.imSessionID);
|
m_log.Info("[FRIEND]: Filling Session: " + msg.imSessionID.ToString());
|
||||||
msg.timestamp = timestamp;
|
msg.timestamp = timestamp;
|
||||||
if (client != null)
|
if (client != null)
|
||||||
{
|
{
|
||||||
|
@ -393,16 +393,16 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends
|
||||||
}
|
}
|
||||||
|
|
||||||
// 39 == Accept Friendship
|
// 39 == Accept Friendship
|
||||||
if (dialog == 39)
|
if (dialog == (byte) 39)
|
||||||
{
|
{
|
||||||
m_log.Info("[FRIEND]: 39 - From:" + fromAgentID + " To: " + toAgentID + " Session:" + imSessionID + " Message:" +
|
m_log.Info("[FRIEND]: 39 - From:" + fromAgentID.ToString() + " To: " + toAgentID.ToString() + " Session:" + imSessionID.ToString() + " Message:" +
|
||||||
message);
|
message);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 40 == Decline Friendship
|
// 40 == Decline Friendship
|
||||||
if (dialog == 40)
|
if (dialog == (byte) 40)
|
||||||
{
|
{
|
||||||
m_log.Info("[FRIEND]: 40 - From:" + fromAgentID + " To: " + toAgentID + " Session:" + imSessionID + " Message:" +
|
m_log.Info("[FRIEND]: 40 - From:" + fromAgentID.ToString() + " To: " + toAgentID.ToString() + " Session:" + imSessionID.ToString() + " Message:" +
|
||||||
message);
|
message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -433,14 +433,14 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends
|
||||||
msg.ParentEstateID = 0;
|
msg.ParentEstateID = 0;
|
||||||
msg.timestamp = (uint) Util.UnixTimeSinceEpoch();
|
msg.timestamp = (uint) Util.UnixTimeSinceEpoch();
|
||||||
msg.RegionID = SceneAgentIn.RegionInfo.RegionID.UUID;
|
msg.RegionID = SceneAgentIn.RegionInfo.RegionID.UUID;
|
||||||
msg.dialog = 39; // Approved friend request
|
msg.dialog = (byte) 39; // Approved friend request
|
||||||
msg.Position = new sLLVector3();
|
msg.Position = new sLLVector3();
|
||||||
msg.offline = 0;
|
msg.offline = (byte) 0;
|
||||||
msg.binaryBucket = new byte[0];
|
msg.binaryBucket = new byte[0];
|
||||||
// We don't really care which scene we pipe it through, it goes to the shared IM Module and/or the database
|
// We don't really care which scene we pipe it through, it goes to the shared IM Module and/or the database
|
||||||
|
|
||||||
SceneAgentIn.TriggerGridInstantMessage(msg, InstantMessageReceiver.IMModule);
|
SceneAgentIn.TriggerGridInstantMessage(msg, InstantMessageReceiver.IMModule);
|
||||||
SceneAgentIn.StoreAddFriendship(m_pendingFriendRequests[transactionID], agentID, 1);
|
SceneAgentIn.StoreAddFriendship(m_pendingFriendRequests[transactionID], agentID, (uint) 1);
|
||||||
m_pendingFriendRequests.Remove(transactionID);
|
m_pendingFriendRequests.Remove(transactionID);
|
||||||
|
|
||||||
// TODO: Inform agent that the friend is online
|
// TODO: Inform agent that the friend is online
|
||||||
|
@ -471,9 +471,9 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends
|
||||||
msg.ParentEstateID = 0;
|
msg.ParentEstateID = 0;
|
||||||
msg.timestamp = (uint) Util.UnixTimeSinceEpoch();
|
msg.timestamp = (uint) Util.UnixTimeSinceEpoch();
|
||||||
msg.RegionID = SceneAgentIn.RegionInfo.RegionID.UUID;
|
msg.RegionID = SceneAgentIn.RegionInfo.RegionID.UUID;
|
||||||
msg.dialog = 40; // Deny friend request
|
msg.dialog = (byte) 40; // Deny friend request
|
||||||
msg.Position = new sLLVector3();
|
msg.Position = new sLLVector3();
|
||||||
msg.offline = 0;
|
msg.offline = (byte) 0;
|
||||||
msg.binaryBucket = new byte[0];
|
msg.binaryBucket = new byte[0];
|
||||||
SceneAgentIn.TriggerGridInstantMessage(msg, InstantMessageReceiver.IMModule);
|
SceneAgentIn.TriggerGridInstantMessage(msg, InstantMessageReceiver.IMModule);
|
||||||
m_pendingFriendRequests.Remove(transactionID);
|
m_pendingFriendRequests.Remove(transactionID);
|
||||||
|
|
|
@ -41,10 +41,10 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Groups
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private readonly Dictionary<LLUUID, GroupList> m_grouplistmap = new Dictionary<LLUUID, GroupList>();
|
private Dictionary<LLUUID, GroupList> m_grouplistmap = new Dictionary<LLUUID, GroupList>();
|
||||||
private readonly Dictionary<LLUUID, GroupData> m_groupmap = new Dictionary<LLUUID, GroupData>();
|
private Dictionary<LLUUID, GroupData> m_groupmap = new Dictionary<LLUUID, GroupData>();
|
||||||
private readonly Dictionary<LLUUID, IClientAPI> m_iclientmap = new Dictionary<LLUUID, IClientAPI>();
|
private Dictionary<LLUUID, IClientAPI> m_iclientmap = new Dictionary<LLUUID, IClientAPI>();
|
||||||
private readonly List<Scene> m_scene = new List<Scene>();
|
private List<Scene> m_scene = new List<Scene>();
|
||||||
|
|
||||||
#region IRegionModule Members
|
#region IRegionModule Members
|
||||||
|
|
||||||
|
@ -214,7 +214,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Groups
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.Info("[GROUP]: Removing all reference to groups for " + agentID);
|
m_log.Info("[GROUP]: Removing all reference to groups for " + agentID.ToString());
|
||||||
}
|
}
|
||||||
m_iclientmap.Remove(agentID);
|
m_iclientmap.Remove(agentID);
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,7 +46,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Inventory
|
||||||
/// occurs in the initial offer message, not the accept message. So this dictionary links
|
/// occurs in the initial offer message, not the accept message. So this dictionary links
|
||||||
/// IM Session Ids to ItemIds
|
/// IM Session Ids to ItemIds
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private readonly IDictionary<LLUUID, LLUUID> m_pendingOffers = new Dictionary<LLUUID, LLUUID>();
|
private IDictionary<LLUUID, LLUUID> m_pendingOffers = new Dictionary<LLUUID, LLUUID>();
|
||||||
|
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,10 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Profiles
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
|
|
||||||
|
public AvatarProfilesModule()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
#region IRegionModule Members
|
#region IRegionModule Members
|
||||||
|
|
||||||
public void Initialise(Scene scene, IConfigSource config)
|
public void Initialise(Scene scene, IConfigSource config)
|
||||||
|
@ -100,7 +104,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Profiles
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.Debug("[AvatarProfilesModule]: Got null for profile for " + avatarID);
|
m_log.Debug("[AvatarProfilesModule]: Got null for profile for " + avatarID.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,11 +42,11 @@ namespace OpenSim.Region.Environment.Modules.Framework
|
||||||
public class Command : ICommand
|
public class Command : ICommand
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
private readonly List<CommandArgument> m_args = new List<CommandArgument>();
|
private List<CommandArgument> m_args = new List<CommandArgument>();
|
||||||
|
|
||||||
private readonly Action<object[]> m_command;
|
private Action<object[]> m_command;
|
||||||
private readonly string m_help;
|
private string m_help;
|
||||||
private readonly string m_name;
|
private string m_name;
|
||||||
|
|
||||||
public Command(string name, Action<Object[]> command, string help)
|
public Command(string name, Action<Object[]> command, string help)
|
||||||
{
|
{
|
||||||
|
@ -164,9 +164,9 @@ namespace OpenSim.Region.Environment.Modules.Framework
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class CommandArgument
|
public class CommandArgument
|
||||||
{
|
{
|
||||||
private readonly string m_help;
|
private string m_help;
|
||||||
private readonly string m_name;
|
private string m_name;
|
||||||
private readonly string m_type;
|
private string m_type;
|
||||||
private Object m_val;
|
private Object m_val;
|
||||||
|
|
||||||
public CommandArgument(string name, string help, string type)
|
public CommandArgument(string name, string help, string type)
|
||||||
|
@ -204,8 +204,8 @@ namespace OpenSim.Region.Environment.Modules.Framework
|
||||||
public class Commander : ICommander
|
public class Commander : ICommander
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
private readonly Dictionary<string, ICommand> m_commands = new Dictionary<string, ICommand>();
|
private Dictionary<string, ICommand> m_commands = new Dictionary<string, ICommand>();
|
||||||
private readonly string m_name;
|
private string m_name;
|
||||||
|
|
||||||
public Commander(string name)
|
public Commander(string name)
|
||||||
{
|
{
|
||||||
|
@ -235,11 +235,11 @@ namespace OpenSim.Region.Environment.Modules.Framework
|
||||||
}
|
}
|
||||||
classSrc = classSrc.Remove(classSrc.Length - 1); // Delete the last comma
|
classSrc = classSrc.Remove(classSrc.Length - 1); // Delete the last comma
|
||||||
classSrc += " )\n\t{\n";
|
classSrc += " )\n\t{\n";
|
||||||
classSrc += "\t\tObject[] args = new Object[" + com.Arguments.Count + "];\n";
|
classSrc += "\t\tObject[] args = new Object[" + com.Arguments.Count.ToString() + "];\n";
|
||||||
int i = 0;
|
int i = 0;
|
||||||
foreach (KeyValuePair<string, string> arg in com.Arguments)
|
foreach (KeyValuePair<string, string> arg in com.Arguments)
|
||||||
{
|
{
|
||||||
classSrc += "\t\targs[" + i + "] = " + Util.Md5Hash(arg.Key) + " " + ";\n";
|
classSrc += "\t\targs[" + i.ToString() + "] = " + Util.Md5Hash(arg.Key) + " " + ";\n";
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
classSrc += "\t\tGetCommander(\"" + m_name + "\").Run(\"" + com.Name + "\", args);\n";
|
classSrc += "\t\tGetCommander(\"" + m_name + "\").Run(\"" + com.Name + "\", args);\n";
|
||||||
|
|
|
@ -34,7 +34,7 @@ namespace OpenSim.Region.Environment.Modules.Framework
|
||||||
{
|
{
|
||||||
public class CommanderTestModule : IRegionModule, ICommandableModule
|
public class CommanderTestModule : IRegionModule, ICommandableModule
|
||||||
{
|
{
|
||||||
private readonly Commander m_commander = new Commander("CommanderTest");
|
private Commander m_commander = new Commander("CommanderTest");
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
|
|
||||||
#region ICommandableModule Members
|
#region ICommandableModule Members
|
||||||
|
|
|
@ -29,14 +29,14 @@ namespace OpenSim.Region.Environment.Modules.Grid.Interregion
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private readonly Dictionary<Type, Object> m_interfaces = new Dictionary<Type, object>();
|
private readonly Dictionary<Type, Object> m_interfaces = new Dictionary<Type, object>();
|
||||||
private readonly Object m_lockObject = new object();
|
|
||||||
private readonly List<Location> m_myLocations = new List<Location>();
|
private readonly List<Location> m_myLocations = new List<Location>();
|
||||||
|
|
||||||
private readonly Dictionary<Location, string[]> m_neighbourInterfaces = new Dictionary<Location, string[]>();
|
private readonly Dictionary<Location, string[]> m_neighbourInterfaces = new Dictionary<Location, string[]>();
|
||||||
private readonly Dictionary<Location, RemotingObject> m_neighbourRemote = new Dictionary<Location, RemotingObject>();
|
private readonly Dictionary<Location, RemotingObject> m_neighbourRemote = new Dictionary<Location, RemotingObject>();
|
||||||
private IConfigSource m_config;
|
private IConfigSource m_config;
|
||||||
private bool m_enabled;
|
private bool m_enabled = false;
|
||||||
|
|
||||||
|
private Object m_lockObject = new object();
|
||||||
private RemotingObject m_myRemote;
|
private RemotingObject m_myRemote;
|
||||||
private TcpChannel m_tcpChannel;
|
private TcpChannel m_tcpChannel;
|
||||||
private int m_tcpPort = 10101;
|
private int m_tcpPort = 10101;
|
||||||
|
|
|
@ -40,12 +40,12 @@ namespace OpenSim.Region.Environment.Modules.Scripting.DynamicTexture
|
||||||
{
|
{
|
||||||
public class DynamicTextureModule : IRegionModule, IDynamicTextureManager
|
public class DynamicTextureModule : IRegionModule, IDynamicTextureManager
|
||||||
{
|
{
|
||||||
private readonly Dictionary<LLUUID, Scene> RegisteredScenes = new Dictionary<LLUUID, Scene>();
|
private Dictionary<LLUUID, Scene> RegisteredScenes = new Dictionary<LLUUID, Scene>();
|
||||||
|
|
||||||
private readonly Dictionary<string, IDynamicTextureRender> RenderPlugins =
|
private Dictionary<string, IDynamicTextureRender> RenderPlugins =
|
||||||
new Dictionary<string, IDynamicTextureRender>();
|
new Dictionary<string, IDynamicTextureRender>();
|
||||||
|
|
||||||
private readonly Dictionary<LLUUID, DynamicTextureUpdater> Updaters = new Dictionary<LLUUID, DynamicTextureUpdater>();
|
private Dictionary<LLUUID, DynamicTextureUpdater> Updaters = new Dictionary<LLUUID, DynamicTextureUpdater>();
|
||||||
|
|
||||||
#region IDynamicTextureManager Members
|
#region IDynamicTextureManager Members
|
||||||
|
|
||||||
|
@ -176,14 +176,14 @@ namespace OpenSim.Region.Environment.Modules.Scripting.DynamicTexture
|
||||||
|
|
||||||
public class DynamicTextureUpdater
|
public class DynamicTextureUpdater
|
||||||
{
|
{
|
||||||
public bool BlendWithOldTexture;
|
public bool BlendWithOldTexture = false;
|
||||||
public string BodyData;
|
public string BodyData;
|
||||||
public string ContentType;
|
public string ContentType;
|
||||||
public byte FrontAlpha = 255;
|
public byte FrontAlpha = 255;
|
||||||
public LLUUID LastAssetID;
|
public LLUUID LastAssetID;
|
||||||
public string Params;
|
public string Params;
|
||||||
public LLUUID PrimID;
|
public LLUUID PrimID;
|
||||||
public bool SetNewFrontAlpha;
|
public bool SetNewFrontAlpha = false;
|
||||||
public LLUUID SimUUID;
|
public LLUUID SimUUID;
|
||||||
public LLUUID UpdaterID;
|
public LLUUID UpdaterID;
|
||||||
public int UpdateTimer;
|
public int UpdateTimer;
|
||||||
|
|
|
@ -84,7 +84,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.HttpRequest
|
||||||
{
|
{
|
||||||
public class HttpRequestModule : IRegionModule, IHttpRequests
|
public class HttpRequestModule : IRegionModule, IHttpRequests
|
||||||
{
|
{
|
||||||
private readonly object HttpListLock = new object();
|
private object HttpListLock = new object();
|
||||||
private int httpTimeout = 30000;
|
private int httpTimeout = 30000;
|
||||||
private string m_name = "HttpScriptRequests";
|
private string m_name = "HttpScriptRequests";
|
||||||
|
|
||||||
|
@ -93,6 +93,10 @@ namespace OpenSim.Region.Environment.Modules.Scripting.HttpRequest
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
private Queue<HttpRequestClass> rpcQueue = new Queue<HttpRequestClass>();
|
private Queue<HttpRequestClass> rpcQueue = new Queue<HttpRequestClass>();
|
||||||
|
|
||||||
|
public HttpRequestModule()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
#region IHttpRequests Members
|
#region IHttpRequests Members
|
||||||
|
|
||||||
public LLUUID MakeHttpRequest(string url, string parameters, string body)
|
public LLUUID MakeHttpRequest(string url, string parameters, string body)
|
||||||
|
|
|
@ -120,9 +120,9 @@ namespace OpenSim.Region.Environment.Modules.Scripting.LoadImageURL
|
||||||
|
|
||||||
private void MakeHttpRequest(string url, LLUUID requestID)
|
private void MakeHttpRequest(string url, LLUUID requestID)
|
||||||
{
|
{
|
||||||
WebRequest request = WebRequest.Create(url);
|
WebRequest request = HttpWebRequest.Create(url);
|
||||||
RequestState state = new RequestState((HttpWebRequest) request, requestID);
|
RequestState state = new RequestState((HttpWebRequest) request, requestID);
|
||||||
IAsyncResult result = request.BeginGetResponse(HttpRequestReturn, state);
|
IAsyncResult result = request.BeginGetResponse(new AsyncCallback(HttpRequestReturn), state);
|
||||||
|
|
||||||
TimeSpan t = (DateTime.UtcNow - new DateTime(1970, 1, 1));
|
TimeSpan t = (DateTime.UtcNow - new DateTime(1970, 1, 1));
|
||||||
state.TimeOfRequest = (int) t.TotalSeconds;
|
state.TimeOfRequest = (int) t.TotalSeconds;
|
||||||
|
@ -131,7 +131,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.LoadImageURL
|
||||||
private void HttpRequestReturn(IAsyncResult result)
|
private void HttpRequestReturn(IAsyncResult result)
|
||||||
{
|
{
|
||||||
RequestState state = (RequestState) result.AsyncState;
|
RequestState state = (RequestState) result.AsyncState;
|
||||||
WebRequest request = state.Request;
|
WebRequest request = (WebRequest) state.Request;
|
||||||
HttpWebResponse response = (HttpWebResponse) request.EndGetResponse(result);
|
HttpWebResponse response = (HttpWebResponse) request.EndGetResponse(result);
|
||||||
if (response.StatusCode == HttpStatusCode.OK)
|
if (response.StatusCode == HttpStatusCode.OK)
|
||||||
{
|
{
|
||||||
|
@ -175,9 +175,9 @@ namespace OpenSim.Region.Environment.Modules.Scripting.LoadImageURL
|
||||||
|
|
||||||
public class RequestState
|
public class RequestState
|
||||||
{
|
{
|
||||||
public HttpWebRequest Request;
|
public HttpWebRequest Request = null;
|
||||||
public LLUUID RequestID = LLUUID.Zero;
|
public LLUUID RequestID = LLUUID.Zero;
|
||||||
public int TimeOfRequest;
|
public int TimeOfRequest = 0;
|
||||||
|
|
||||||
public RequestState(HttpWebRequest request, LLUUID requestID)
|
public RequestState(HttpWebRequest request, LLUUID requestID)
|
||||||
{
|
{
|
||||||
|
|
|
@ -48,6 +48,10 @@ namespace OpenSim.Region.Environment.Modules.Scripting.VectorRender
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
private IDynamicTextureManager m_textureManager;
|
private IDynamicTextureManager m_textureManager;
|
||||||
|
|
||||||
|
public VectorRenderModule()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
#region IDynamicTextureRender Members
|
#region IDynamicTextureRender Members
|
||||||
|
|
||||||
public string GetContentType()
|
public string GetContentType()
|
||||||
|
@ -134,7 +138,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.VectorRender
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
//Ckrinke: Add a WriteLine to remove the warning about 'e' defined but not used
|
//Ckrinke: Add a WriteLine to remove the warning about 'e' defined but not used
|
||||||
Console.WriteLine("Problem with Draw. Please verify parameters." + e);
|
Console.WriteLine("Problem with Draw. Please verify parameters." + e.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((size < 128) || (size > 1024))
|
if ((size < 128) || (size > 1024))
|
||||||
|
@ -256,7 +260,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.VectorRender
|
||||||
endPoint.X = (int) x;
|
endPoint.X = (int) x;
|
||||||
endPoint.Y = (int) y;
|
endPoint.Y = (int) y;
|
||||||
Image image = ImageHttpRequest(nextLine);
|
Image image = ImageHttpRequest(nextLine);
|
||||||
graph.DrawImage(image, startPoint.X, startPoint.Y, x, y);
|
graph.DrawImage(image, (float) startPoint.X, (float) startPoint.Y, x, y);
|
||||||
startPoint.X += endPoint.X;
|
startPoint.X += endPoint.X;
|
||||||
startPoint.Y += endPoint.Y;
|
startPoint.Y += endPoint.Y;
|
||||||
}
|
}
|
||||||
|
@ -349,7 +353,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.VectorRender
|
||||||
|
|
||||||
private Bitmap ImageHttpRequest(string url)
|
private Bitmap ImageHttpRequest(string url)
|
||||||
{
|
{
|
||||||
WebRequest request = WebRequest.Create(url);
|
WebRequest request = HttpWebRequest.Create(url);
|
||||||
//Ckrinke: Comment out for now as 'str' is unused. Bring it back into play later when it is used.
|
//Ckrinke: Comment out for now as 'str' is unused. Bring it back into play later when it is used.
|
||||||
//Ckrinke Stream str = null;
|
//Ckrinke Stream str = null;
|
||||||
HttpWebResponse response = (HttpWebResponse) (request).GetResponse();
|
HttpWebResponse response = (HttpWebResponse) (request).GetResponse();
|
||||||
|
|
|
@ -75,6 +75,10 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm
|
||||||
private Queue m_pendingQ;
|
private Queue m_pendingQ;
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
|
|
||||||
|
public WorldCommModule()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
#region IRegionModule Members
|
#region IRegionModule Members
|
||||||
|
|
||||||
public void Initialise(Scene scene, IConfigSource config)
|
public void Initialise(Scene scene, IConfigSource config)
|
||||||
|
@ -320,8 +324,8 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm
|
||||||
public class ListenerManager
|
public class ListenerManager
|
||||||
{
|
{
|
||||||
//private Dictionary<int, ListenerInfo> m_listeners;
|
//private Dictionary<int, ListenerInfo> m_listeners;
|
||||||
private readonly Hashtable m_listeners = Hashtable.Synchronized(new Hashtable());
|
|
||||||
private object ListenersLock = new object();
|
private object ListenersLock = new object();
|
||||||
|
private Hashtable m_listeners = Hashtable.Synchronized(new Hashtable());
|
||||||
private int m_MaxListeners = 100;
|
private int m_MaxListeners = 100;
|
||||||
|
|
||||||
public int AddListener(uint localID, LLUUID itemID, LLUUID hostID, int channel, string name, string id, string msg)
|
public int AddListener(uint localID, LLUUID itemID, LLUUID hostID, int channel, string name, string id, string msg)
|
||||||
|
@ -481,7 +485,6 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm
|
||||||
|
|
||||||
public class ListenerInfo
|
public class ListenerInfo
|
||||||
{
|
{
|
||||||
private readonly LLUUID m_sourceItemID; // ID of the scenePart or avatar source of the message
|
|
||||||
private bool m_active; // Listener is active or not
|
private bool m_active; // Listener is active or not
|
||||||
private int m_channel; // Channel
|
private int m_channel; // Channel
|
||||||
private int m_handle; // Assigned handle of this listener
|
private int m_handle; // Assigned handle of this listener
|
||||||
|
@ -491,6 +494,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm
|
||||||
private uint m_localID; // Local ID from script engine
|
private uint m_localID; // Local ID from script engine
|
||||||
private string m_message; // The message
|
private string m_message; // The message
|
||||||
private string m_name; // Object name to filter messages from
|
private string m_name; // Object name to filter messages from
|
||||||
|
private LLUUID m_sourceItemID; // ID of the scenePart or avatar source of the message
|
||||||
|
|
||||||
public ListenerInfo(uint localID, int handle, LLUUID ItemID, LLUUID hostID, int channel, string name, LLUUID id, string message)
|
public ListenerInfo(uint localID, int handle, LLUUID ItemID, LLUUID hostID, int channel, string name, LLUUID id, string message)
|
||||||
{
|
{
|
||||||
|
|
|
@ -78,20 +78,20 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC
|
||||||
public class XMLRPCModule : IRegionModule, IXMLRPC
|
public class XMLRPCModule : IRegionModule, IXMLRPC
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
private readonly List<Scene> m_scenes = new List<Scene>();
|
|
||||||
private readonly object XMLRPCListLock = new object();
|
|
||||||
|
|
||||||
private string m_name = "XMLRPCModule";
|
private string m_name = "XMLRPCModule";
|
||||||
|
|
||||||
// <channel id, RPCChannelInfo>
|
// <channel id, RPCChannelInfo>
|
||||||
private Dictionary<LLUUID, RPCChannelInfo> m_openChannels;
|
private Dictionary<LLUUID, RPCChannelInfo> m_openChannels;
|
||||||
private Dictionary<LLUUID, SendRemoteDataRequest> m_pendingSRDResponses;
|
private Dictionary<LLUUID, SendRemoteDataRequest> m_pendingSRDResponses;
|
||||||
private int m_remoteDataPort;
|
private int m_remoteDataPort = 0;
|
||||||
|
|
||||||
private Dictionary<LLUUID, RPCRequestInfo> m_rpcPending;
|
private Dictionary<LLUUID, RPCRequestInfo> m_rpcPending;
|
||||||
private Dictionary<LLUUID, RPCRequestInfo> m_rpcPendingResponses;
|
private Dictionary<LLUUID, RPCRequestInfo> m_rpcPendingResponses;
|
||||||
|
private List<Scene> m_scenes = new List<Scene>();
|
||||||
private int RemoteReplyScriptTimeout = 9000;
|
private int RemoteReplyScriptTimeout = 9000;
|
||||||
private int RemoteReplyScriptWait = 300;
|
private int RemoteReplyScriptWait = 300;
|
||||||
|
private object XMLRPCListLock = new object();
|
||||||
|
|
||||||
#region IRegionModule Members
|
#region IRegionModule Members
|
||||||
|
|
||||||
|
@ -428,15 +428,15 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC
|
||||||
|
|
||||||
public class RPCRequestInfo
|
public class RPCRequestInfo
|
||||||
{
|
{
|
||||||
private readonly LLUUID m_ChannelKey;
|
private LLUUID m_ChannelKey;
|
||||||
private readonly string m_IntVal;
|
private string m_IntVal;
|
||||||
private readonly LLUUID m_ItemID;
|
private LLUUID m_ItemID;
|
||||||
private readonly uint m_localID;
|
private uint m_localID;
|
||||||
private readonly LLUUID m_MessageID;
|
private LLUUID m_MessageID;
|
||||||
private readonly string m_StrVal;
|
|
||||||
private bool m_processed;
|
private bool m_processed;
|
||||||
private int m_respInt;
|
private int m_respInt;
|
||||||
private string m_respStr;
|
private string m_respStr;
|
||||||
|
private string m_StrVal;
|
||||||
|
|
||||||
public RPCRequestInfo(uint localID, LLUUID itemID, LLUUID channelKey, string strVal, string intVal)
|
public RPCRequestInfo(uint localID, LLUUID itemID, LLUUID channelKey, string strVal, string intVal)
|
||||||
{
|
{
|
||||||
|
@ -514,9 +514,9 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC
|
||||||
|
|
||||||
public class RPCChannelInfo
|
public class RPCChannelInfo
|
||||||
{
|
{
|
||||||
private readonly LLUUID m_ChannelKey;
|
private LLUUID m_ChannelKey;
|
||||||
private readonly LLUUID m_itemID;
|
private LLUUID m_itemID;
|
||||||
private readonly uint m_localID;
|
private uint m_localID;
|
||||||
|
|
||||||
public RPCChannelInfo(uint localID, LLUUID itemID, LLUUID channelID)
|
public RPCChannelInfo(uint localID, LLUUID itemID, LLUUID channelID)
|
||||||
{
|
{
|
||||||
|
|
|
@ -44,8 +44,8 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
//Land types set with flags in ParcelOverlay.
|
//Land types set with flags in ParcelOverlay.
|
||||||
//Only one of these can be used.
|
//Only one of these can be used.
|
||||||
public const float BAN_LINE_SAFETY_HIEGHT = 100;
|
public const float BAN_LINE_SAFETY_HIEGHT = 100;
|
||||||
public const byte LAND_FLAG_PROPERTY_BORDER_SOUTH = 128; //Equals 10000000
|
public const byte LAND_FLAG_PROPERTY_BORDER_SOUTH = (byte) 128; //Equals 10000000
|
||||||
public const byte LAND_FLAG_PROPERTY_BORDER_WEST = 64; //Equals 01000000
|
public const byte LAND_FLAG_PROPERTY_BORDER_WEST = (byte) 64; //Equals 01000000
|
||||||
|
|
||||||
//RequestResults (I think these are right, they seem to work):
|
//RequestResults (I think these are right, they seem to work):
|
||||||
public const int LAND_RESULT_MULTIPLE = 1; // The request they made contained more than a single peice of land
|
public const int LAND_RESULT_MULTIPLE = 1; // The request they made contained more than a single peice of land
|
||||||
|
@ -55,26 +55,26 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
public const int LAND_SELECT_OBJECTS_GROUP = 4;
|
public const int LAND_SELECT_OBJECTS_GROUP = 4;
|
||||||
public const int LAND_SELECT_OBJECTS_OTHER = 8;
|
public const int LAND_SELECT_OBJECTS_OTHER = 8;
|
||||||
public const int LAND_SELECT_OBJECTS_OWNER = 2;
|
public const int LAND_SELECT_OBJECTS_OWNER = 2;
|
||||||
public const byte LAND_TYPE_IS_BEING_AUCTIONED = 5; //Equals 00000101
|
public const byte LAND_TYPE_IS_BEING_AUCTIONED = (byte) 5; //Equals 00000101
|
||||||
public const byte LAND_TYPE_IS_FOR_SALE = 4; //Equals 00000100
|
public const byte LAND_TYPE_IS_FOR_SALE = (byte) 4; //Equals 00000100
|
||||||
public const byte LAND_TYPE_OWNED_BY_GROUP = 2; //Equals 00000010
|
public const byte LAND_TYPE_OWNED_BY_GROUP = (byte) 2; //Equals 00000010
|
||||||
public const byte LAND_TYPE_OWNED_BY_OTHER = 1; //Equals 00000001
|
public const byte LAND_TYPE_OWNED_BY_OTHER = (byte) 1; //Equals 00000001
|
||||||
public const byte LAND_TYPE_OWNED_BY_REQUESTER = 3; //Equals 00000011
|
public const byte LAND_TYPE_OWNED_BY_REQUESTER = (byte) 3; //Equals 00000011
|
||||||
public const byte LAND_TYPE_PUBLIC = 0; //Equals 00000000
|
public const byte LAND_TYPE_PUBLIC = (byte) 0; //Equals 00000000
|
||||||
|
|
||||||
//These are other constants. Yay!
|
//These are other constants. Yay!
|
||||||
public const int START_LAND_LOCAL_ID = 1;
|
public const int START_LAND_LOCAL_ID = 1;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private readonly int[,] landIDList = new int[64,64];
|
private int[,] landIDList = new int[64,64];
|
||||||
private readonly Dictionary<int, ILandObject> landList = new Dictionary<int, ILandObject>();
|
private Dictionary<int, ILandObject> landList = new Dictionary<int, ILandObject>();
|
||||||
private readonly Scene m_scene;
|
|
||||||
|
|
||||||
private bool landPrimCountTainted;
|
private bool landPrimCountTainted = false;
|
||||||
private int lastLandLocalID = START_LAND_LOCAL_ID - 1;
|
private int lastLandLocalID = START_LAND_LOCAL_ID - 1;
|
||||||
|
|
||||||
private bool m_allowedForcefulBans = true;
|
private bool m_allowedForcefulBans = true;
|
||||||
|
private Scene m_scene;
|
||||||
|
|
||||||
public LandChannel(Scene scene)
|
public LandChannel(Scene scene)
|
||||||
{
|
{
|
||||||
|
@ -192,7 +192,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
{
|
{
|
||||||
lastLandLocalID++;
|
lastLandLocalID++;
|
||||||
new_land.landData.localID = lastLandLocalID;
|
new_land.landData.localID = lastLandLocalID;
|
||||||
landList.Add(lastLandLocalID, new_land.Copy());
|
landList.Add(lastLandLocalID, (LandObject) new_land.Copy());
|
||||||
|
|
||||||
|
|
||||||
bool[,] landBitmap = new_land.getLandBitmap();
|
bool[,] landBitmap = new_land.getLandBitmap();
|
||||||
|
@ -532,7 +532,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
{
|
{
|
||||||
for (x = 0; x < 64; x++)
|
for (x = 0; x < 64; x++)
|
||||||
{
|
{
|
||||||
byte tempByte = 0; //This represents the byte for the current 4x4
|
byte tempByte = (byte) 0; //This represents the byte for the current 4x4
|
||||||
ILandObject currentParcelBlock = null;
|
ILandObject currentParcelBlock = null;
|
||||||
|
|
||||||
try
|
try
|
||||||
|
@ -611,7 +611,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
packet = (ParcelOverlayPacket) PacketPool.Instance.GetPacket(PacketType.ParcelOverlay);
|
packet = (ParcelOverlayPacket) PacketPool.Instance.GetPacket(PacketType.ParcelOverlay);
|
||||||
packet.ParcelData.Data = byteArray;
|
packet.ParcelData.Data = byteArray;
|
||||||
packet.ParcelData.SequenceID = sequenceID;
|
packet.ParcelData.SequenceID = sequenceID;
|
||||||
remote_client.OutPacket(packet, ThrottleOutPacketType.Task);
|
remote_client.OutPacket((Packet) packet, ThrottleOutPacketType.Task);
|
||||||
sequenceID++;
|
sequenceID++;
|
||||||
byteArray = new byte[LAND_BLOCKS_PER_PACKET];
|
byteArray = new byte[LAND_BLOCKS_PER_PACKET];
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,14 +45,14 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
|
|
||||||
m_scene.EventManager.OnParcelPrimCountAdd += landChannel.addPrimToLandPrimCounts;
|
m_scene.EventManager.OnParcelPrimCountAdd += landChannel.addPrimToLandPrimCounts;
|
||||||
m_scene.EventManager.OnParcelPrimCountUpdate += landChannel.updateLandPrimCounts;
|
m_scene.EventManager.OnParcelPrimCountUpdate += landChannel.updateLandPrimCounts;
|
||||||
m_scene.EventManager.OnAvatarEnteringNewParcel += landChannel.handleAvatarChangingParcel;
|
m_scene.EventManager.OnAvatarEnteringNewParcel += new EventManager.AvatarEnteringNewParcel(landChannel.handleAvatarChangingParcel);
|
||||||
m_scene.EventManager.OnClientMovement += landChannel.handleAnyClientMovement;
|
m_scene.EventManager.OnClientMovement += new EventManager.ClientMovement(landChannel.handleAnyClientMovement);
|
||||||
m_scene.EventManager.OnValidateLandBuy += landChannel.handleLandValidationRequest;
|
m_scene.EventManager.OnValidateLandBuy += landChannel.handleLandValidationRequest;
|
||||||
m_scene.EventManager.OnLandBuy += landChannel.handleLandBuyRequest;
|
m_scene.EventManager.OnLandBuy += landChannel.handleLandBuyRequest;
|
||||||
|
|
||||||
lock (m_scene)
|
lock (m_scene)
|
||||||
{
|
{
|
||||||
m_scene.LandChannel = landChannel;
|
m_scene.LandChannel = (ILandChannel) landChannel;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -73,8 +73,6 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
get { return m_scene.RegionInfo.RegionID; }
|
get { return m_scene.RegionInfo.RegionID; }
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public LandObject(LLUUID owner_id, bool is_group_owned, Scene scene)
|
public LandObject(LLUUID owner_id, bool is_group_owned, Scene scene)
|
||||||
|
@ -100,7 +98,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
{
|
{
|
||||||
if (x >= 0 && y >= 0 && x <= Constants.RegionSize && x <= Constants.RegionSize)
|
if (x >= 0 && y >= 0 && x <= Constants.RegionSize && x <= Constants.RegionSize)
|
||||||
{
|
{
|
||||||
return landBitmap[x / 4, y / 4];
|
return (landBitmap[x / 4, y / 4] == true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -150,7 +148,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
updatePacket.ParcelData.GroupID = landData.groupID;
|
updatePacket.ParcelData.GroupID = landData.groupID;
|
||||||
updatePacket.ParcelData.GroupPrims = landData.groupPrims;
|
updatePacket.ParcelData.GroupPrims = landData.groupPrims;
|
||||||
updatePacket.ParcelData.IsGroupOwned = landData.isGroupOwned;
|
updatePacket.ParcelData.IsGroupOwned = landData.isGroupOwned;
|
||||||
updatePacket.ParcelData.LandingType = landData.landingType;
|
updatePacket.ParcelData.LandingType = (byte) landData.landingType;
|
||||||
updatePacket.ParcelData.LocalID = landData.localID;
|
updatePacket.ParcelData.LocalID = landData.localID;
|
||||||
if (landData.area > 0)
|
if (landData.area > 0)
|
||||||
{
|
{
|
||||||
|
@ -214,7 +212,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
landData.selectedPrims;
|
landData.selectedPrims;
|
||||||
updatePacket.ParcelData.UserLocation = landData.userLocation;
|
updatePacket.ParcelData.UserLocation = landData.userLocation;
|
||||||
updatePacket.ParcelData.UserLookAt = landData.userLookAt;
|
updatePacket.ParcelData.UserLookAt = landData.userLookAt;
|
||||||
remote_client.OutPacket(updatePacket, ThrottleOutPacketType.Task);
|
remote_client.OutPacket((Packet) updatePacket, ThrottleOutPacketType.Task);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateLandProperties(ParcelPropertiesUpdatePacket packet, IClientAPI remote_client)
|
public void updateLandProperties(ParcelPropertiesUpdatePacket packet, IClientAPI remote_client)
|
||||||
|
@ -357,7 +355,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
{
|
{
|
||||||
ParcelAccessListReplyPacket.ListBlock listBlock = new ParcelAccessListReplyPacket.ListBlock();
|
ParcelAccessListReplyPacket.ListBlock listBlock = new ParcelAccessListReplyPacket.ListBlock();
|
||||||
|
|
||||||
listBlock.Flags = 0;
|
listBlock.Flags = (uint) 0;
|
||||||
listBlock.ID = entry.AgentID;
|
listBlock.ID = entry.AgentID;
|
||||||
listBlock.Time = 0;
|
listBlock.Time = 0;
|
||||||
|
|
||||||
|
@ -369,7 +367,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
{
|
{
|
||||||
ParcelAccessListReplyPacket.ListBlock listBlock = new ParcelAccessListReplyPacket.ListBlock();
|
ParcelAccessListReplyPacket.ListBlock listBlock = new ParcelAccessListReplyPacket.ListBlock();
|
||||||
|
|
||||||
listBlock.Flags = 0;
|
listBlock.Flags = (uint) 0;
|
||||||
listBlock.ID = LLUUID.Zero;
|
listBlock.ID = LLUUID.Zero;
|
||||||
listBlock.Time = 0;
|
listBlock.Time = 0;
|
||||||
|
|
||||||
|
@ -392,7 +390,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
replyPacket.Data.SequenceID = 0;
|
replyPacket.Data.SequenceID = 0;
|
||||||
|
|
||||||
replyPacket.List = createAccessListArrayByFlag(ParcelManager.AccessList.Access);
|
replyPacket.List = createAccessListArrayByFlag(ParcelManager.AccessList.Access);
|
||||||
remote_client.OutPacket(replyPacket, ThrottleOutPacketType.Task);
|
remote_client.OutPacket((Packet) replyPacket, ThrottleOutPacketType.Task);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flags == (uint) ParcelManager.AccessList.Ban || flags == (uint) ParcelManager.AccessList.Both)
|
if (flags == (uint) ParcelManager.AccessList.Ban || flags == (uint) ParcelManager.AccessList.Both)
|
||||||
|
@ -404,7 +402,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
replyPacket.Data.SequenceID = 0;
|
replyPacket.Data.SequenceID = 0;
|
||||||
|
|
||||||
replyPacket.List = createAccessListArrayByFlag(ParcelManager.AccessList.Ban);
|
replyPacket.List = createAccessListArrayByFlag(ParcelManager.AccessList.Ban);
|
||||||
remote_client.OutPacket(replyPacket, ThrottleOutPacketType.Task);
|
remote_client.OutPacket((Packet) replyPacket, ThrottleOutPacketType.Task);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -484,7 +482,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
{
|
{
|
||||||
for (y = 0; y < 64; y++)
|
for (y = 0; y < 64; y++)
|
||||||
{
|
{
|
||||||
if (landBitmap[x, y])
|
if (landBitmap[x, y] == true)
|
||||||
{
|
{
|
||||||
if (min_x > x) min_x = x;
|
if (min_x > x) min_x = x;
|
||||||
if (min_y > y) min_y = y;
|
if (min_y > y) min_y = y;
|
||||||
|
@ -501,7 +499,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
if (ty > 255)
|
if (ty > 255)
|
||||||
ty = 255;
|
ty = 255;
|
||||||
landData.AABBMin =
|
landData.AABBMin =
|
||||||
new LLVector3((min_x * 4), (min_y * 4),
|
new LLVector3((float) (min_x * 4), (float) (min_y * 4),
|
||||||
(float) m_scene.Heightmap[tx, ty]);
|
(float) m_scene.Heightmap[tx, ty]);
|
||||||
|
|
||||||
tx = max_x * 4;
|
tx = max_x * 4;
|
||||||
|
@ -511,7 +509,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
if (ty > 255)
|
if (ty > 255)
|
||||||
ty = 255;
|
ty = 255;
|
||||||
landData.AABBMax =
|
landData.AABBMax =
|
||||||
new LLVector3((max_x * 4), (max_y * 4),
|
new LLVector3((float) (max_x * 4), (float) (max_y * 4),
|
||||||
(float) m_scene.Heightmap[tx, ty]);
|
(float) m_scene.Heightmap[tx, ty]);
|
||||||
landData.area = tempArea;
|
landData.area = tempArea;
|
||||||
}
|
}
|
||||||
|
@ -659,7 +657,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
if (i % 8 == 0)
|
if (i % 8 == 0)
|
||||||
{
|
{
|
||||||
tempConvertArr[byteNum] = tempByte;
|
tempConvertArr[byteNum] = tempByte;
|
||||||
tempByte = 0;
|
tempByte = (byte) 0;
|
||||||
i = 0;
|
i = 0;
|
||||||
byteNum++;
|
byteNum++;
|
||||||
}
|
}
|
||||||
|
@ -679,7 +677,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
tempByte = landData.landBitmapByteArray[i];
|
tempByte = landData.landBitmapByteArray[i];
|
||||||
for (bitNum = 0; bitNum < 8; bitNum++)
|
for (bitNum = 0; bitNum < 8; bitNum++)
|
||||||
{
|
{
|
||||||
bool bit = Convert.ToBoolean(Convert.ToByte(tempByte >> bitNum) & 1);
|
bool bit = Convert.ToBoolean(Convert.ToByte(tempByte >> bitNum) & (byte) 1);
|
||||||
tempConvertMap[x, y] = bit;
|
tempConvertMap[x, y] = bit;
|
||||||
x++;
|
x++;
|
||||||
if (x > 63)
|
if (x > 63)
|
||||||
|
@ -753,7 +751,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
resultLocalIDs.RemoveAt(0);
|
resultLocalIDs.RemoveAt(0);
|
||||||
}
|
}
|
||||||
pack.Data = data;
|
pack.Data = data;
|
||||||
remote_client.OutPacket(pack, ThrottleOutPacketType.Task);
|
remote_client.OutPacket((Packet) pack, ThrottleOutPacketType.Task);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -924,5 +922,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -37,10 +37,10 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser
|
||||||
{
|
{
|
||||||
public class SerialiserModule : IRegionModule, IRegionSerialiser
|
public class SerialiserModule : IRegionModule, IRegionSerialiser
|
||||||
{
|
{
|
||||||
private readonly Commander m_commander = new Commander("Export");
|
private Commander m_commander = new Commander("Export");
|
||||||
private readonly List<Scene> m_regions = new List<Scene>();
|
private List<Scene> m_regions = new List<Scene>();
|
||||||
private readonly List<IFileSerialiser> m_serialisers = new List<IFileSerialiser>();
|
|
||||||
private string m_savedir = "exports" + "/";
|
private string m_savedir = "exports" + "/";
|
||||||
|
private List<IFileSerialiser> m_serialisers = new List<IFileSerialiser>();
|
||||||
|
|
||||||
#region IRegionModule Members
|
#region IRegionModule Members
|
||||||
|
|
||||||
|
@ -105,8 +105,8 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser
|
||||||
|
|
||||||
TextWriter regionInfoWriter = new StreamWriter(saveDir + "README.TXT");
|
TextWriter regionInfoWriter = new StreamWriter(saveDir + "README.TXT");
|
||||||
regionInfoWriter.WriteLine("Region Name: " + scene.RegionInfo.RegionName);
|
regionInfoWriter.WriteLine("Region Name: " + scene.RegionInfo.RegionName);
|
||||||
regionInfoWriter.WriteLine("Region ID: " + scene.RegionInfo.RegionID);
|
regionInfoWriter.WriteLine("Region ID: " + scene.RegionInfo.RegionID.ToString());
|
||||||
regionInfoWriter.WriteLine("Backup Time: UTC " + DateTime.UtcNow);
|
regionInfoWriter.WriteLine("Backup Time: UTC " + DateTime.UtcNow.ToString());
|
||||||
regionInfoWriter.WriteLine("Serialise Version: 0.1");
|
regionInfoWriter.WriteLine("Serialise Version: 0.1");
|
||||||
regionInfoWriter.Close();
|
regionInfoWriter.Close();
|
||||||
|
|
||||||
|
@ -141,7 +141,7 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser
|
||||||
{
|
{
|
||||||
if (region.RegionInfo.RegionName == (string) args[0])
|
if (region.RegionInfo.RegionName == (string) args[0])
|
||||||
{
|
{
|
||||||
List<string> results = SerialiseRegion(region, m_savedir + region.RegionInfo.RegionID + "/");
|
List<string> results = SerialiseRegion(region, m_savedir + region.RegionInfo.RegionID.ToString() + "/");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -150,7 +150,7 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser
|
||||||
{
|
{
|
||||||
foreach (Scene region in m_regions)
|
foreach (Scene region in m_regions)
|
||||||
{
|
{
|
||||||
List<string> results = SerialiseRegion(region, m_savedir + region.RegionInfo.RegionID + "/");
|
List<string> results = SerialiseRegion(region, m_savedir + region.RegionInfo.RegionID.ToString() + "/");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -127,7 +127,7 @@ namespace OpenSim.Region.Environment.Modules.World.Sun
|
||||||
{
|
{
|
||||||
long m_addticks = (DateTime.Now.Ticks - m_start) * m_dilation;
|
long m_addticks = (DateTime.Now.Ticks - m_start) * m_dilation;
|
||||||
DateTime dt = new DateTime(m_start + m_addticks);
|
DateTime dt = new DateTime(m_start + m_addticks);
|
||||||
return dt.Hour + (dt.Minute / 60.0);
|
return (double) dt.Hour + ((double) dt.Minute / 60.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
private LLVector3 SunPos(double hour)
|
private LLVector3 SunPos(double hour)
|
||||||
|
|
|
@ -78,7 +78,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.Effects
|
||||||
{
|
{
|
||||||
for (y = 0; y < map.Height; y++)
|
for (y = 0; y < map.Height; y++)
|
||||||
{
|
{
|
||||||
if (cliffMask[x, y])
|
if (cliffMask[x, y] == true)
|
||||||
eroder.PaintEffect(map, x, y, 4, 0.1);
|
eroder.PaintEffect(map, x, y, 4, 0.1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,7 +47,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.FileLoaders
|
||||||
{
|
{
|
||||||
for (x = 0; x < retval.Width; x++)
|
for (x = 0; x < retval.Width; x++)
|
||||||
{
|
{
|
||||||
retval[x, y] = bs.ReadByte() * (bs.ReadByte() / 127.0);
|
retval[x, y] = (double) bs.ReadByte() * ((double) bs.ReadByte() / 127.0);
|
||||||
bs.ReadBytes(11); // Advance the stream to next bytes.
|
bs.ReadBytes(11); // Advance the stream to next bytes.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -76,7 +76,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.FileLoaders
|
||||||
{
|
{
|
||||||
for (j = 0; j < 256; j++)
|
for (j = 0; j < 256; j++)
|
||||||
{
|
{
|
||||||
lookupHeightTable[i + (j * 256)] = (i * (j / 127.0));
|
lookupHeightTable[i + (j * 256)] = ((double) i * ((double) j / 127.0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,14 +50,14 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.FileLoaders
|
||||||
BinaryReader bs = new BinaryReader(s);
|
BinaryReader bs = new BinaryReader(s);
|
||||||
|
|
||||||
bool eof = false;
|
bool eof = false;
|
||||||
if (Encoding.ASCII.GetString(bs.ReadBytes(16)) == "TERRAGENTERRAIN ")
|
if (ASCIIEncoding.ASCII.GetString(bs.ReadBytes(16)) == "TERRAGENTERRAIN ")
|
||||||
{
|
{
|
||||||
// Terragen file
|
// Terragen file
|
||||||
while (eof == false)
|
while (eof == false)
|
||||||
{
|
{
|
||||||
int w = 256;
|
int w = 256;
|
||||||
int h = 256;
|
int h = 256;
|
||||||
string tmp = Encoding.ASCII.GetString(bs.ReadBytes(4));
|
string tmp = ASCIIEncoding.ASCII.GetString(bs.ReadBytes(4));
|
||||||
switch (tmp)
|
switch (tmp)
|
||||||
{
|
{
|
||||||
case "SIZE":
|
case "SIZE":
|
||||||
|
@ -84,7 +84,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.FileLoaders
|
||||||
{
|
{
|
||||||
for (y = 0; y < h; y++)
|
for (y = 0; y < h; y++)
|
||||||
{
|
{
|
||||||
retval[x, y] = baseHeight + bs.ReadInt16() * (double) heightScale / 65536.0;
|
retval[x, y] = (double) baseHeight + (double) bs.ReadInt16() * (double) heightScale / 65536.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -31,6 +31,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.PaintBrushes
|
||||||
{
|
{
|
||||||
public class FlattenSphere : ITerrainPaintableEffect
|
public class FlattenSphere : ITerrainPaintableEffect
|
||||||
{
|
{
|
||||||
|
|
||||||
#region ITerrainPaintableEffect Members
|
#region ITerrainPaintableEffect Members
|
||||||
|
|
||||||
public void PaintEffect(ITerrainChannel map, double rx, double ry, double strength, double duration)
|
public void PaintEffect(ITerrainChannel map, double rx, double ry, double strength, double duration)
|
||||||
|
|
|
@ -57,7 +57,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.PaintBrushes
|
||||||
z *= z;
|
z *= z;
|
||||||
z -= ((x - rx) * (x - rx)) + ((y - ry) * (y - ry));
|
z -= ((x - rx) * (x - rx)) + ((y - ry) * (y - ry));
|
||||||
|
|
||||||
double noise = TerrainUtil.PerlinNoise2D(x / (double) Constants.RegionSize, y / (double) Constants.RegionSize, 8, 1.0);
|
double noise = TerrainUtil.PerlinNoise2D((double) x / (double) Constants.RegionSize, (double) y / (double) Constants.RegionSize, 8, 1.0);
|
||||||
|
|
||||||
if (z > 0.0)
|
if (z > 0.0)
|
||||||
map[x, y] += noise * z * duration;
|
map[x, y] += noise * z * duration;
|
||||||
|
|
|
@ -32,7 +32,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.PaintBrushes
|
||||||
{
|
{
|
||||||
public class RevertSphere : ITerrainPaintableEffect
|
public class RevertSphere : ITerrainPaintableEffect
|
||||||
{
|
{
|
||||||
private readonly ITerrainChannel m_revertmap;
|
private ITerrainChannel m_revertmap;
|
||||||
|
|
||||||
public RevertSphere(ITerrainChannel revertmap)
|
public RevertSphere(ITerrainChannel revertmap)
|
||||||
{
|
{
|
||||||
|
|
|
@ -31,7 +31,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain
|
||||||
{
|
{
|
||||||
public class TerrainException : Exception
|
public class TerrainException : Exception
|
||||||
{
|
{
|
||||||
public TerrainException()
|
public TerrainException() : base()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -83,7 +83,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain
|
||||||
private Dictionary<string, ITerrainEffect> m_plugineffects;
|
private Dictionary<string, ITerrainEffect> m_plugineffects;
|
||||||
private ITerrainChannel m_revert;
|
private ITerrainChannel m_revert;
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
private bool m_tainted;
|
private bool m_tainted = false;
|
||||||
|
|
||||||
#region ICommandableModule Members
|
#region ICommandableModule Members
|
||||||
|
|
||||||
|
@ -223,8 +223,6 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Plugin Loading Methods
|
#region Plugin Loading Methods
|
||||||
|
|
||||||
private void LoadPlugins()
|
private void LoadPlugins()
|
||||||
|
@ -278,6 +276,8 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Installs into terrain module the standard suite of brushes
|
/// Installs into terrain module the standard suite of brushes
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -66,10 +66,10 @@ namespace OpenSim.Region.Environment.Modules.World.TreePopulator
|
||||||
m_trees = new List<LLUUID>();
|
m_trees = new List<LLUUID>();
|
||||||
m_scene = scene;
|
m_scene = scene;
|
||||||
|
|
||||||
m_scene.EventManager.OnPluginConsole += EventManager_OnPluginConsole;
|
m_scene.EventManager.OnPluginConsole += new EventManager.OnPluginConsoleDelegate(EventManager_OnPluginConsole);
|
||||||
|
|
||||||
Timer CalculateTrees = new Timer(m_tree_updates);
|
Timer CalculateTrees = new Timer(m_tree_updates);
|
||||||
CalculateTrees.Elapsed += CalculateTrees_Elapsed;
|
CalculateTrees.Elapsed += new ElapsedEventHandler(CalculateTrees_Elapsed);
|
||||||
CalculateTrees.Start();
|
CalculateTrees.Start();
|
||||||
m_log.Debug("[TREES]: Initialised tree module");
|
m_log.Debug("[TREES]: Initialised tree module");
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,21 +33,27 @@ namespace OpenSim.Region.Environment
|
||||||
{
|
{
|
||||||
public class PermissionManager
|
public class PermissionManager
|
||||||
{
|
{
|
||||||
|
protected Scene m_scene;
|
||||||
|
|
||||||
|
// These are here for testing. They will be taken out
|
||||||
|
|
||||||
|
//private uint PERM_ALL = (uint)2147483647;
|
||||||
|
private uint PERM_COPY = (uint)32768;
|
||||||
|
//private uint PERM_MODIFY = (uint)16384;
|
||||||
|
private uint PERM_MOVE = (uint)524288;
|
||||||
|
//private uint PERM_TRANS = (uint)8192;
|
||||||
|
private uint PERM_LOCKED = (uint)540672;
|
||||||
// Bypasses the permissions engine (always returns OK)
|
// Bypasses the permissions engine (always returns OK)
|
||||||
// disable in any production environment
|
// disable in any production environment
|
||||||
// TODO: Change this to false when permissions are a desired default
|
// TODO: Change this to false when permissions are a desired default
|
||||||
// TODO: Move to configuration option.
|
// TODO: Move to configuration option.
|
||||||
private bool m_bypassPermissions = true;
|
private bool m_bypassPermissions = true;
|
||||||
protected Scene m_scene;
|
|
||||||
|
|
||||||
// These are here for testing. They will be taken out
|
|
||||||
//private uint PERM_ALL = (uint)2147483647;
|
|
||||||
private uint PERM_COPY = 32768;
|
|
||||||
//private uint PERM_MODIFY = (uint)16384;
|
|
||||||
//private uint PERM_TRANS = (uint)8192;
|
|
||||||
private uint PERM_LOCKED = 540672;
|
|
||||||
private uint PERM_MOVE = 524288;
|
|
||||||
|
|
||||||
|
public bool BypassPermissions
|
||||||
|
{
|
||||||
|
get { return m_bypassPermissions; }
|
||||||
|
set { m_bypassPermissions = value; }
|
||||||
|
}
|
||||||
|
|
||||||
public PermissionManager()
|
public PermissionManager()
|
||||||
{
|
{
|
||||||
|
@ -58,12 +64,6 @@ namespace OpenSim.Region.Environment
|
||||||
m_scene = scene;
|
m_scene = scene;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool BypassPermissions
|
|
||||||
{
|
|
||||||
get { return m_bypassPermissions; }
|
|
||||||
set { m_bypassPermissions = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Initialise(Scene scene)
|
public void Initialise(Scene scene)
|
||||||
{
|
{
|
||||||
m_scene = scene;
|
m_scene = scene;
|
||||||
|
@ -129,8 +129,8 @@ namespace OpenSim.Region.Environment
|
||||||
ILandObject land = m_scene.LandChannel.getLandObject(position.X, position.Y);
|
ILandObject land = m_scene.LandChannel.getLandObject(position.X, position.Y);
|
||||||
if (land == null) return false;
|
if (land == null) return false;
|
||||||
|
|
||||||
if ((land.landData.landFlags & ((int) Parcel.ParcelFlags.CreateObjects)) ==
|
if ((land.landData.landFlags & ((int)Parcel.ParcelFlags.CreateObjects)) ==
|
||||||
(int) Parcel.ParcelFlags.CreateObjects)
|
(int)Parcel.ParcelFlags.CreateObjects)
|
||||||
permission = true;
|
permission = true;
|
||||||
|
|
||||||
//TODO: check for group rights
|
//TODO: check for group rights
|
||||||
|
@ -168,6 +168,8 @@ namespace OpenSim.Region.Environment
|
||||||
/// <returns>Has permission?</returns>
|
/// <returns>Has permission?</returns>
|
||||||
public virtual bool CanObjectEntry(LLUUID user, LLVector3 oldPos, LLVector3 newPos)
|
public virtual bool CanObjectEntry(LLUUID user, LLVector3 oldPos, LLVector3 newPos)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
if ((newPos.X > 257f || newPos.X < -1f || newPos.Y > 257f || newPos.Y < -1f))
|
if ((newPos.X > 257f || newPos.X < -1f || newPos.Y > 257f || newPos.Y < -1f))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
@ -191,7 +193,7 @@ namespace OpenSim.Region.Environment
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((land2.landData.landFlags & ((int) Parcel.ParcelFlags.AllowAllObjectEntry)) != 0)
|
if ((land2.landData.landFlags & ((int)Parcel.ParcelFlags.AllowAllObjectEntry)) != 0)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -208,6 +210,355 @@ namespace OpenSim.Region.Environment
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region Object Permissions
|
||||||
|
|
||||||
|
public virtual uint GenerateClientFlags(LLUUID user, LLUUID objID)
|
||||||
|
{
|
||||||
|
|
||||||
|
// Here's the way this works,
|
||||||
|
// ObjectFlags and Permission flags are two different enumerations
|
||||||
|
// ObjectFlags, however, tells the client to change what it will allow the user to do.
|
||||||
|
// So, that means that all of the permissions type ObjectFlags are /temporary/ and only
|
||||||
|
// supposed to be set when customizing the objectflags for the client.
|
||||||
|
|
||||||
|
// These temporary objectflags get computed and added in this function based on the
|
||||||
|
// Permission mask that's appropriate!
|
||||||
|
// Outside of this method, they should never be added to objectflags!
|
||||||
|
// -teravus
|
||||||
|
|
||||||
|
SceneObjectPart task=m_scene.GetSceneObjectPart(objID);
|
||||||
|
|
||||||
|
// this shouldn't ever happen.. return no permissions/objectflags.
|
||||||
|
if (task == null)
|
||||||
|
return (uint)0;
|
||||||
|
|
||||||
|
uint objflags = task.GetEffectiveObjectFlags();
|
||||||
|
LLUUID objectOwner = task.OwnerID;
|
||||||
|
|
||||||
|
|
||||||
|
// Remove any of the objectFlags that are temporary. These will get added back if appropriate
|
||||||
|
// in the next bit of code
|
||||||
|
|
||||||
|
objflags &= (uint)
|
||||||
|
~(LLObject.ObjectFlags.ObjectCopy | // Tells client you can copy the object
|
||||||
|
LLObject.ObjectFlags.ObjectModify | // tells client you can modify the object
|
||||||
|
LLObject.ObjectFlags.ObjectMove | // tells client that you can move the object (only, no mod)
|
||||||
|
LLObject.ObjectFlags.ObjectTransfer | // tells the client that you can /take/ the object if you don't own it
|
||||||
|
LLObject.ObjectFlags.ObjectYouOwner | // Tells client that you're the owner of the object
|
||||||
|
LLObject.ObjectFlags.ObjectYouOfficer // Tells client that you've got group object editing permission. Used when ObjectGroupOwned is set
|
||||||
|
);
|
||||||
|
|
||||||
|
// Creating the three ObjectFlags options for this method to choose from.
|
||||||
|
// Customize the OwnerMask
|
||||||
|
uint objectOwnerMask = ApplyObjectModifyMasks(task.OwnerMask, objflags);
|
||||||
|
objectOwnerMask |= (uint)LLObject.ObjectFlags.ObjectYouOwner;
|
||||||
|
|
||||||
|
// Customize the GroupMask
|
||||||
|
uint objectGroupMask = ApplyObjectModifyMasks(task.GroupMask, objflags);
|
||||||
|
|
||||||
|
// Customize the EveryoneMask
|
||||||
|
uint objectEveryoneMask = ApplyObjectModifyMasks(task.EveryoneMask, objflags);
|
||||||
|
|
||||||
|
|
||||||
|
// Hack to allow collaboration until Groups and Group Permissions are implemented
|
||||||
|
if ((objectEveryoneMask & (uint)LLObject.ObjectFlags.ObjectMove) != 0)
|
||||||
|
objectEveryoneMask |= (uint)LLObject.ObjectFlags.ObjectModify;
|
||||||
|
|
||||||
|
if (m_bypassPermissions)
|
||||||
|
return objectOwnerMask;
|
||||||
|
|
||||||
|
// Object owners should be able to edit their own content
|
||||||
|
if (user == objectOwner)
|
||||||
|
{
|
||||||
|
return objectOwnerMask;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Users should be able to edit what is over their land.
|
||||||
|
ILandObject parcel = m_scene.LandChannel.getLandObject(task.AbsolutePosition.X, task.AbsolutePosition.Y);
|
||||||
|
if (parcel != null && parcel.landData.ownerID == user)
|
||||||
|
return objectOwnerMask;
|
||||||
|
|
||||||
|
// Admin objects should not be editable by the above
|
||||||
|
if (IsAdministrator(objectOwner))
|
||||||
|
return objectEveryoneMask;
|
||||||
|
|
||||||
|
// Estate users should be able to edit anything in the sim
|
||||||
|
if (IsEstateManager(user))
|
||||||
|
return objectOwnerMask;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Admin should be able to edit anything in the sim (including admin objects)
|
||||||
|
if (IsAdministrator(user))
|
||||||
|
return objectOwnerMask;
|
||||||
|
|
||||||
|
|
||||||
|
return objectEveryoneMask;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private uint ApplyObjectModifyMasks(uint setPermissionMask, uint objectFlagsMask)
|
||||||
|
{
|
||||||
|
// We are adding the temporary objectflags to the object's objectflags based on the
|
||||||
|
// permission flag given. These change the F flags on the client.
|
||||||
|
|
||||||
|
if ((setPermissionMask & (uint)PermissionMask.Copy) != 0)
|
||||||
|
{
|
||||||
|
objectFlagsMask |= (uint)LLObject.ObjectFlags.ObjectCopy;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((setPermissionMask & (uint)PermissionMask.Move) != 0)
|
||||||
|
{
|
||||||
|
objectFlagsMask |= (uint)LLObject.ObjectFlags.ObjectMove;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((setPermissionMask & (uint)PermissionMask.Modify) != 0)
|
||||||
|
{
|
||||||
|
objectFlagsMask |= (uint)LLObject.ObjectFlags.ObjectModify;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((setPermissionMask & (uint)PermissionMask.Transfer) != 0)
|
||||||
|
{
|
||||||
|
objectFlagsMask |= (uint)LLObject.ObjectFlags.ObjectTransfer;
|
||||||
|
}
|
||||||
|
|
||||||
|
return objectFlagsMask;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual bool GenericObjectPermission(LLUUID currentUser, LLUUID objId)
|
||||||
|
{
|
||||||
|
// Default: deny
|
||||||
|
bool permission = false;
|
||||||
|
bool locked = false;
|
||||||
|
|
||||||
|
if (!m_scene.Entities.ContainsKey(objId))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If it's not an object, we cant edit it.
|
||||||
|
if ((!(m_scene.Entities[objId] is SceneObjectGroup)))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SceneObjectGroup group = (SceneObjectGroup)m_scene.Entities[objId];
|
||||||
|
|
||||||
|
LLUUID objectOwner = group.OwnerID;
|
||||||
|
locked = ((group.RootPart.OwnerMask & PERM_LOCKED) == 0);
|
||||||
|
|
||||||
|
// People shouldn't be able to do anything with locked objects, except the Administrator
|
||||||
|
// The 'set permissions' runs through a different permission check, so when an object owner
|
||||||
|
// sets an object locked, the only thing that they can do is unlock it.
|
||||||
|
//
|
||||||
|
// Nobody but the object owner can set permissions on an object
|
||||||
|
//
|
||||||
|
|
||||||
|
if (locked && (!IsAdministrator(currentUser)))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Object owners should be able to edit their own content
|
||||||
|
if (currentUser == objectOwner)
|
||||||
|
{
|
||||||
|
permission = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Users should be able to edit what is over their land.
|
||||||
|
ILandObject parcel = m_scene.LandChannel.getLandObject(group.AbsolutePosition.X, group.AbsolutePosition.Y);
|
||||||
|
if ((parcel != null) && (parcel.landData.ownerID == currentUser))
|
||||||
|
{
|
||||||
|
permission = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Estate users should be able to edit anything in the sim
|
||||||
|
if (IsEstateManager(currentUser))
|
||||||
|
{
|
||||||
|
permission = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Admin objects should not be editable by the above
|
||||||
|
if (IsAdministrator(objectOwner))
|
||||||
|
{
|
||||||
|
permission = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Admin should be able to edit anything in the sim (including admin objects)
|
||||||
|
if (IsAdministrator(currentUser))
|
||||||
|
{
|
||||||
|
permission = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return permission;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Permissions check - can user delete an object?
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="user">User attempting the delete</param>
|
||||||
|
/// <param name="obj">Target object</param>
|
||||||
|
/// <returns>Has permission?</returns>
|
||||||
|
public virtual bool CanDeRezObject(LLUUID user, LLUUID obj)
|
||||||
|
{
|
||||||
|
return GenericObjectPermission(user, obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual bool CanEditObject(LLUUID user, LLUUID obj)
|
||||||
|
{
|
||||||
|
return GenericObjectPermission(user, obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual bool CanEditObjectPosition(LLUUID user, LLUUID obj)
|
||||||
|
{
|
||||||
|
bool permission = GenericObjectPermission(user, obj);
|
||||||
|
if (!permission)
|
||||||
|
{
|
||||||
|
if (!m_scene.Entities.ContainsKey(obj))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The client
|
||||||
|
// may request to edit linked parts, and therefore, it needs
|
||||||
|
// to also check for SceneObjectPart
|
||||||
|
|
||||||
|
// If it's not an object, we cant edit it.
|
||||||
|
if ((!(m_scene.Entities[obj] is SceneObjectGroup)))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SceneObjectGroup task = (SceneObjectGroup)m_scene.Entities[obj];
|
||||||
|
|
||||||
|
|
||||||
|
LLUUID taskOwner = null;
|
||||||
|
// Added this because at this point in time it wouldn't be wise for
|
||||||
|
// the administrator object permissions to take effect.
|
||||||
|
LLUUID objectOwner = task.OwnerID;
|
||||||
|
|
||||||
|
// Anyone can move
|
||||||
|
if ((task.RootPart.EveryoneMask & PERM_MOVE) != 0)
|
||||||
|
permission = true;
|
||||||
|
|
||||||
|
// Locked
|
||||||
|
if ((task.RootPart.OwnerMask & PERM_LOCKED) == 0)
|
||||||
|
permission = false;
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bool locked = false;
|
||||||
|
if (!m_scene.Entities.ContainsKey(obj))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If it's not an object, we cant edit it.
|
||||||
|
if ((!(m_scene.Entities[obj] is SceneObjectGroup)))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SceneObjectGroup group = (SceneObjectGroup)m_scene.Entities[obj];
|
||||||
|
|
||||||
|
LLUUID objectOwner = group.OwnerID;
|
||||||
|
locked = ((group.RootPart.OwnerMask & PERM_LOCKED) == 0);
|
||||||
|
|
||||||
|
|
||||||
|
// This is an exception to the generic object permission.
|
||||||
|
// Administrators who lock their objects should not be able to move them,
|
||||||
|
// however generic object permission should return true.
|
||||||
|
// This keeps locked objects from being affected by random click + drag actions by accident
|
||||||
|
// and allows the administrator to grab or delete a locked object.
|
||||||
|
|
||||||
|
// Administrators and estate managers are still able to click+grab locked objects not
|
||||||
|
// owned by them in the scene
|
||||||
|
// This is by design.
|
||||||
|
|
||||||
|
if (locked && (user == objectOwner))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return permission;
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual bool CanCopyObject(LLUUID user, LLUUID obj)
|
||||||
|
{
|
||||||
|
bool permission = GenericObjectPermission(user, obj);
|
||||||
|
if (!permission)
|
||||||
|
{
|
||||||
|
if (!m_scene.Entities.ContainsKey(obj))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If it's not an object, we cant edit it.
|
||||||
|
if (!(m_scene.Entities[obj] is SceneObjectGroup))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
SceneObjectGroup task = (SceneObjectGroup)m_scene.Entities[obj];
|
||||||
|
LLUUID taskOwner = null;
|
||||||
|
// Added this because at this point in time it wouldn't be wise for
|
||||||
|
// the administrator object permissions to take effect.
|
||||||
|
LLUUID objectOwner = task.OwnerID;
|
||||||
|
if ((task.RootPart.EveryoneMask & PERM_COPY) != 0)
|
||||||
|
permission = true;
|
||||||
|
}
|
||||||
|
return permission;
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual bool CanReturnObject(LLUUID user, LLUUID obj)
|
||||||
|
{
|
||||||
|
return GenericObjectPermission(user, obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Communication Permissions
|
||||||
|
|
||||||
|
public virtual bool GenericCommunicationPermission(LLUUID user, LLUUID target)
|
||||||
|
{
|
||||||
|
bool permission = false;
|
||||||
|
string reason = "Only registered users may communicate with another account.";
|
||||||
|
|
||||||
|
if (IsGridUser(user))
|
||||||
|
permission = true;
|
||||||
|
|
||||||
|
if (!IsGridUser(user))
|
||||||
|
{
|
||||||
|
permission = false;
|
||||||
|
reason = "The person that you are messaging is not a registered user.";
|
||||||
|
}
|
||||||
|
if (IsAdministrator(user))
|
||||||
|
permission = true;
|
||||||
|
|
||||||
|
if (IsEstateManager(user))
|
||||||
|
permission = true;
|
||||||
|
|
||||||
|
if (!permission)
|
||||||
|
SendPermissionError(user, reason);
|
||||||
|
|
||||||
|
return permission;
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual bool CanInstantMessage(LLUUID user, LLUUID target)
|
||||||
|
{
|
||||||
|
return GenericCommunicationPermission(user, target);
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual bool CanInventoryTransfer(LLUUID user, LLUUID target)
|
||||||
|
{
|
||||||
|
return GenericCommunicationPermission(user, target);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
public virtual bool CanEditScript(LLUUID user, LLUUID script)
|
public virtual bool CanEditScript(LLUUID user, LLUUID script)
|
||||||
{
|
{
|
||||||
return IsAdministrator(user);
|
return IsAdministrator(user);
|
||||||
|
@ -339,351 +690,5 @@ namespace OpenSim.Region.Environment
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Object Permissions
|
|
||||||
|
|
||||||
public virtual uint GenerateClientFlags(LLUUID user, LLUUID objID)
|
|
||||||
{
|
|
||||||
// Here's the way this works,
|
|
||||||
// ObjectFlags and Permission flags are two different enumerations
|
|
||||||
// ObjectFlags, however, tells the client to change what it will allow the user to do.
|
|
||||||
// So, that means that all of the permissions type ObjectFlags are /temporary/ and only
|
|
||||||
// supposed to be set when customizing the objectflags for the client.
|
|
||||||
|
|
||||||
// These temporary objectflags get computed and added in this function based on the
|
|
||||||
// Permission mask that's appropriate!
|
|
||||||
// Outside of this method, they should never be added to objectflags!
|
|
||||||
// -teravus
|
|
||||||
|
|
||||||
SceneObjectPart task = m_scene.GetSceneObjectPart(objID);
|
|
||||||
|
|
||||||
// this shouldn't ever happen.. return no permissions/objectflags.
|
|
||||||
if (task == null)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
uint objflags = task.GetEffectiveObjectFlags();
|
|
||||||
LLUUID objectOwner = task.OwnerID;
|
|
||||||
|
|
||||||
|
|
||||||
// Remove any of the objectFlags that are temporary. These will get added back if appropriate
|
|
||||||
// in the next bit of code
|
|
||||||
|
|
||||||
objflags &= (uint)
|
|
||||||
~(LLObject.ObjectFlags.ObjectCopy | // Tells client you can copy the object
|
|
||||||
LLObject.ObjectFlags.ObjectModify | // tells client you can modify the object
|
|
||||||
LLObject.ObjectFlags.ObjectMove | // tells client that you can move the object (only, no mod)
|
|
||||||
LLObject.ObjectFlags.ObjectTransfer | // tells the client that you can /take/ the object if you don't own it
|
|
||||||
LLObject.ObjectFlags.ObjectYouOwner | // Tells client that you're the owner of the object
|
|
||||||
LLObject.ObjectFlags.ObjectYouOfficer
|
|
||||||
// Tells client that you've got group object editing permission. Used when ObjectGroupOwned is set
|
|
||||||
);
|
|
||||||
|
|
||||||
// Creating the three ObjectFlags options for this method to choose from.
|
|
||||||
// Customize the OwnerMask
|
|
||||||
uint objectOwnerMask = ApplyObjectModifyMasks(task.OwnerMask, objflags);
|
|
||||||
objectOwnerMask |= (uint) LLObject.ObjectFlags.ObjectYouOwner;
|
|
||||||
|
|
||||||
// Customize the GroupMask
|
|
||||||
uint objectGroupMask = ApplyObjectModifyMasks(task.GroupMask, objflags);
|
|
||||||
|
|
||||||
// Customize the EveryoneMask
|
|
||||||
uint objectEveryoneMask = ApplyObjectModifyMasks(task.EveryoneMask, objflags);
|
|
||||||
|
|
||||||
|
|
||||||
// Hack to allow collaboration until Groups and Group Permissions are implemented
|
|
||||||
if ((objectEveryoneMask & (uint) LLObject.ObjectFlags.ObjectMove) != 0)
|
|
||||||
objectEveryoneMask |= (uint) LLObject.ObjectFlags.ObjectModify;
|
|
||||||
|
|
||||||
if (m_bypassPermissions)
|
|
||||||
return objectOwnerMask;
|
|
||||||
|
|
||||||
// Object owners should be able to edit their own content
|
|
||||||
if (user == objectOwner)
|
|
||||||
{
|
|
||||||
return objectOwnerMask;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Users should be able to edit what is over their land.
|
|
||||||
ILandObject parcel = m_scene.LandChannel.getLandObject(task.AbsolutePosition.X, task.AbsolutePosition.Y);
|
|
||||||
if (parcel != null && parcel.landData.ownerID == user)
|
|
||||||
return objectOwnerMask;
|
|
||||||
|
|
||||||
// Admin objects should not be editable by the above
|
|
||||||
if (IsAdministrator(objectOwner))
|
|
||||||
return objectEveryoneMask;
|
|
||||||
|
|
||||||
// Estate users should be able to edit anything in the sim
|
|
||||||
if (IsEstateManager(user))
|
|
||||||
return objectOwnerMask;
|
|
||||||
|
|
||||||
|
|
||||||
// Admin should be able to edit anything in the sim (including admin objects)
|
|
||||||
if (IsAdministrator(user))
|
|
||||||
return objectOwnerMask;
|
|
||||||
|
|
||||||
|
|
||||||
return objectEveryoneMask;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private uint ApplyObjectModifyMasks(uint setPermissionMask, uint objectFlagsMask)
|
|
||||||
{
|
|
||||||
// We are adding the temporary objectflags to the object's objectflags based on the
|
|
||||||
// permission flag given. These change the F flags on the client.
|
|
||||||
|
|
||||||
if ((setPermissionMask & (uint) PermissionMask.Copy) != 0)
|
|
||||||
{
|
|
||||||
objectFlagsMask |= (uint) LLObject.ObjectFlags.ObjectCopy;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((setPermissionMask & (uint) PermissionMask.Move) != 0)
|
|
||||||
{
|
|
||||||
objectFlagsMask |= (uint) LLObject.ObjectFlags.ObjectMove;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((setPermissionMask & (uint) PermissionMask.Modify) != 0)
|
|
||||||
{
|
|
||||||
objectFlagsMask |= (uint) LLObject.ObjectFlags.ObjectModify;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((setPermissionMask & (uint) PermissionMask.Transfer) != 0)
|
|
||||||
{
|
|
||||||
objectFlagsMask |= (uint) LLObject.ObjectFlags.ObjectTransfer;
|
|
||||||
}
|
|
||||||
|
|
||||||
return objectFlagsMask;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected virtual bool GenericObjectPermission(LLUUID currentUser, LLUUID objId)
|
|
||||||
{
|
|
||||||
// Default: deny
|
|
||||||
bool permission = false;
|
|
||||||
bool locked = false;
|
|
||||||
|
|
||||||
if (!m_scene.Entities.ContainsKey(objId))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If it's not an object, we cant edit it.
|
|
||||||
if ((!(m_scene.Entities[objId] is SceneObjectGroup)))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
SceneObjectGroup group = (SceneObjectGroup) m_scene.Entities[objId];
|
|
||||||
|
|
||||||
LLUUID objectOwner = group.OwnerID;
|
|
||||||
locked = ((group.RootPart.OwnerMask & PERM_LOCKED) == 0);
|
|
||||||
|
|
||||||
// People shouldn't be able to do anything with locked objects, except the Administrator
|
|
||||||
// The 'set permissions' runs through a different permission check, so when an object owner
|
|
||||||
// sets an object locked, the only thing that they can do is unlock it.
|
|
||||||
//
|
|
||||||
// Nobody but the object owner can set permissions on an object
|
|
||||||
//
|
|
||||||
|
|
||||||
if (locked && (!IsAdministrator(currentUser)))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Object owners should be able to edit their own content
|
|
||||||
if (currentUser == objectOwner)
|
|
||||||
{
|
|
||||||
permission = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Users should be able to edit what is over their land.
|
|
||||||
ILandObject parcel = m_scene.LandChannel.getLandObject(group.AbsolutePosition.X, group.AbsolutePosition.Y);
|
|
||||||
if ((parcel != null) && (parcel.landData.ownerID == currentUser))
|
|
||||||
{
|
|
||||||
permission = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Estate users should be able to edit anything in the sim
|
|
||||||
if (IsEstateManager(currentUser))
|
|
||||||
{
|
|
||||||
permission = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Admin objects should not be editable by the above
|
|
||||||
if (IsAdministrator(objectOwner))
|
|
||||||
{
|
|
||||||
permission = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Admin should be able to edit anything in the sim (including admin objects)
|
|
||||||
if (IsAdministrator(currentUser))
|
|
||||||
{
|
|
||||||
permission = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return permission;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Permissions check - can user delete an object?
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="user">User attempting the delete</param>
|
|
||||||
/// <param name="obj">Target object</param>
|
|
||||||
/// <returns>Has permission?</returns>
|
|
||||||
public virtual bool CanDeRezObject(LLUUID user, LLUUID obj)
|
|
||||||
{
|
|
||||||
return GenericObjectPermission(user, obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual bool CanEditObject(LLUUID user, LLUUID obj)
|
|
||||||
{
|
|
||||||
return GenericObjectPermission(user, obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual bool CanEditObjectPosition(LLUUID user, LLUUID obj)
|
|
||||||
{
|
|
||||||
bool permission = GenericObjectPermission(user, obj);
|
|
||||||
if (!permission)
|
|
||||||
{
|
|
||||||
if (!m_scene.Entities.ContainsKey(obj))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The client
|
|
||||||
// may request to edit linked parts, and therefore, it needs
|
|
||||||
// to also check for SceneObjectPart
|
|
||||||
|
|
||||||
// If it's not an object, we cant edit it.
|
|
||||||
if ((!(m_scene.Entities[obj] is SceneObjectGroup)))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
SceneObjectGroup task = (SceneObjectGroup) m_scene.Entities[obj];
|
|
||||||
|
|
||||||
|
|
||||||
LLUUID taskOwner = null;
|
|
||||||
// Added this because at this point in time it wouldn't be wise for
|
|
||||||
// the administrator object permissions to take effect.
|
|
||||||
LLUUID objectOwner = task.OwnerID;
|
|
||||||
|
|
||||||
// Anyone can move
|
|
||||||
if ((task.RootPart.EveryoneMask & PERM_MOVE) != 0)
|
|
||||||
permission = true;
|
|
||||||
|
|
||||||
// Locked
|
|
||||||
if ((task.RootPart.OwnerMask & PERM_LOCKED) == 0)
|
|
||||||
permission = false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
bool locked = false;
|
|
||||||
if (!m_scene.Entities.ContainsKey(obj))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If it's not an object, we cant edit it.
|
|
||||||
if ((!(m_scene.Entities[obj] is SceneObjectGroup)))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
SceneObjectGroup group = (SceneObjectGroup) m_scene.Entities[obj];
|
|
||||||
|
|
||||||
LLUUID objectOwner = group.OwnerID;
|
|
||||||
locked = ((group.RootPart.OwnerMask & PERM_LOCKED) == 0);
|
|
||||||
|
|
||||||
|
|
||||||
// This is an exception to the generic object permission.
|
|
||||||
// Administrators who lock their objects should not be able to move them,
|
|
||||||
// however generic object permission should return true.
|
|
||||||
// This keeps locked objects from being affected by random click + drag actions by accident
|
|
||||||
// and allows the administrator to grab or delete a locked object.
|
|
||||||
|
|
||||||
// Administrators and estate managers are still able to click+grab locked objects not
|
|
||||||
// owned by them in the scene
|
|
||||||
// This is by design.
|
|
||||||
|
|
||||||
if (locked && (user == objectOwner))
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return permission;
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual bool CanCopyObject(LLUUID user, LLUUID obj)
|
|
||||||
{
|
|
||||||
bool permission = GenericObjectPermission(user, obj);
|
|
||||||
if (!permission)
|
|
||||||
{
|
|
||||||
if (!m_scene.Entities.ContainsKey(obj))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If it's not an object, we cant edit it.
|
|
||||||
if (!(m_scene.Entities[obj] is SceneObjectGroup))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
SceneObjectGroup task = (SceneObjectGroup) m_scene.Entities[obj];
|
|
||||||
LLUUID taskOwner = null;
|
|
||||||
// Added this because at this point in time it wouldn't be wise for
|
|
||||||
// the administrator object permissions to take effect.
|
|
||||||
LLUUID objectOwner = task.OwnerID;
|
|
||||||
if ((task.RootPart.EveryoneMask & PERM_COPY) != 0)
|
|
||||||
permission = true;
|
|
||||||
}
|
|
||||||
return permission;
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual bool CanReturnObject(LLUUID user, LLUUID obj)
|
|
||||||
{
|
|
||||||
return GenericObjectPermission(user, obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Communication Permissions
|
|
||||||
|
|
||||||
public virtual bool GenericCommunicationPermission(LLUUID user, LLUUID target)
|
|
||||||
{
|
|
||||||
bool permission = false;
|
|
||||||
string reason = "Only registered users may communicate with another account.";
|
|
||||||
|
|
||||||
if (IsGridUser(user))
|
|
||||||
permission = true;
|
|
||||||
|
|
||||||
if (!IsGridUser(user))
|
|
||||||
{
|
|
||||||
permission = false;
|
|
||||||
reason = "The person that you are messaging is not a registered user.";
|
|
||||||
}
|
|
||||||
if (IsAdministrator(user))
|
|
||||||
permission = true;
|
|
||||||
|
|
||||||
if (IsEstateManager(user))
|
|
||||||
permission = true;
|
|
||||||
|
|
||||||
if (!permission)
|
|
||||||
SendPermissionError(user, reason);
|
|
||||||
|
|
||||||
return permission;
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual bool CanInstantMessage(LLUUID user, LLUUID target)
|
|
||||||
{
|
|
||||||
return GenericCommunicationPermission(user, target);
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual bool CanInventoryTransfer(LLUUID user, LLUUID target)
|
|
||||||
{
|
|
||||||
return GenericCommunicationPermission(user, target);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,8 +46,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (nod.Attributes["name"] != null)
|
if (nod.Attributes["name"] != null)
|
||||||
{
|
{
|
||||||
string name = nod.Attributes["name"].Value;
|
string name = (string)nod.Attributes["name"].Value;
|
||||||
LLUUID id = (LLUUID) nod.InnerText;
|
LLUUID id = (LLUUID)nod.InnerText;
|
||||||
|
|
||||||
AnimsLLUUID.Add(name, id);
|
AnimsLLUUID.Add(name, id);
|
||||||
AnimsNames.Add(id, name);
|
AnimsNames.Add(id, name);
|
||||||
|
@ -56,4 +56,4 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,13 +37,52 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public class AvatarAppearance : ISerializable
|
public class AvatarAppearance : ISerializable
|
||||||
{
|
{
|
||||||
protected float m_avatarHeight;
|
|
||||||
protected LLUUID m_scenePresenceID;
|
protected LLUUID m_scenePresenceID;
|
||||||
protected LLObject.TextureEntry m_textureEntry;
|
|
||||||
|
public LLUUID ScenePresenceID
|
||||||
|
{
|
||||||
|
get { return m_scenePresenceID; }
|
||||||
|
set { m_scenePresenceID = value; }
|
||||||
|
}
|
||||||
|
protected int m_wearablesSerial = 1;
|
||||||
|
|
||||||
|
public int WearablesSerial
|
||||||
|
{
|
||||||
|
get { return m_wearablesSerial; }
|
||||||
|
set { m_wearablesSerial = value; }
|
||||||
|
}
|
||||||
|
|
||||||
protected byte[] m_visualParams;
|
protected byte[] m_visualParams;
|
||||||
|
|
||||||
|
public byte[] VisualParams
|
||||||
|
{
|
||||||
|
get { return m_visualParams; }
|
||||||
|
set { m_visualParams = value; }
|
||||||
|
}
|
||||||
|
|
||||||
protected AvatarWearable[] m_wearables;
|
protected AvatarWearable[] m_wearables;
|
||||||
|
|
||||||
protected int m_wearablesSerial = 1;
|
public AvatarWearable[] Wearables
|
||||||
|
{
|
||||||
|
get { return m_wearables; }
|
||||||
|
set { m_wearables = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
protected LLObject.TextureEntry m_textureEntry;
|
||||||
|
|
||||||
|
public LLObject.TextureEntry TextureEntry
|
||||||
|
{
|
||||||
|
get { return m_textureEntry; }
|
||||||
|
set { m_textureEntry = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
protected float m_avatarHeight = 0;
|
||||||
|
|
||||||
|
public float AvatarHeight
|
||||||
|
{
|
||||||
|
get { return m_avatarHeight; }
|
||||||
|
set { m_avatarHeight = value; }
|
||||||
|
}
|
||||||
|
|
||||||
public AvatarAppearance()
|
public AvatarAppearance()
|
||||||
{
|
{
|
||||||
|
@ -58,86 +97,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
m_textureEntry = GetDefaultTextureEntry();
|
m_textureEntry = GetDefaultTextureEntry();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected AvatarAppearance(SerializationInfo info, StreamingContext context)
|
|
||||||
{
|
|
||||||
//System.Console.WriteLine("AvatarAppearance Deserialize BGN");
|
|
||||||
|
|
||||||
if (info == null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException("info");
|
|
||||||
}
|
|
||||||
|
|
||||||
m_scenePresenceID = new LLUUID((Guid) info.GetValue("m_scenePresenceID", typeof (Guid)));
|
|
||||||
m_wearablesSerial = (int) info.GetValue("m_wearablesSerial", typeof (int));
|
|
||||||
m_visualParams = (byte[]) info.GetValue("m_visualParams", typeof (byte[]));
|
|
||||||
m_wearables = (AvatarWearable[]) info.GetValue("m_wearables", typeof (AvatarWearable[]));
|
|
||||||
|
|
||||||
byte[] m_textureEntry_work = (byte[]) info.GetValue("m_textureEntry", typeof (byte[]));
|
|
||||||
m_textureEntry = new LLObject.TextureEntry(m_textureEntry_work, 0, m_textureEntry_work.Length);
|
|
||||||
|
|
||||||
m_avatarHeight = (float) info.GetValue("m_avatarHeight", typeof (float));
|
|
||||||
|
|
||||||
//System.Console.WriteLine("AvatarAppearance Deserialize END");
|
|
||||||
}
|
|
||||||
|
|
||||||
public LLUUID ScenePresenceID
|
|
||||||
{
|
|
||||||
get { return m_scenePresenceID; }
|
|
||||||
set { m_scenePresenceID = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public int WearablesSerial
|
|
||||||
{
|
|
||||||
get { return m_wearablesSerial; }
|
|
||||||
set { m_wearablesSerial = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte[] VisualParams
|
|
||||||
{
|
|
||||||
get { return m_visualParams; }
|
|
||||||
set { m_visualParams = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public AvatarWearable[] Wearables
|
|
||||||
{
|
|
||||||
get { return m_wearables; }
|
|
||||||
set { m_wearables = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public LLObject.TextureEntry TextureEntry
|
|
||||||
{
|
|
||||||
get { return m_textureEntry; }
|
|
||||||
set { m_textureEntry = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public float AvatarHeight
|
|
||||||
{
|
|
||||||
get { return m_avatarHeight; }
|
|
||||||
set { m_avatarHeight = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#region ISerializable Members
|
|
||||||
|
|
||||||
[SecurityPermission(SecurityAction.LinkDemand,
|
|
||||||
Flags = SecurityPermissionFlag.SerializationFormatter)]
|
|
||||||
public virtual void GetObjectData(
|
|
||||||
SerializationInfo info, StreamingContext context)
|
|
||||||
{
|
|
||||||
if (info == null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException("info");
|
|
||||||
}
|
|
||||||
|
|
||||||
info.AddValue("m_scenePresenceID", m_scenePresenceID.UUID);
|
|
||||||
info.AddValue("m_wearablesSerial", m_wearablesSerial);
|
|
||||||
info.AddValue("m_visualParams", m_visualParams);
|
|
||||||
info.AddValue("m_wearables", m_wearables);
|
|
||||||
info.AddValue("m_textureEntry", m_textureEntry.ToBytes());
|
|
||||||
info.AddValue("m_avatarHeight", m_avatarHeight);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -156,8 +115,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
// Teravus : Nifty AV Height Getting Maaaaagical formula. Oh how we love turning 0-255 into meters.
|
// Teravus : Nifty AV Height Getting Maaaaagical formula. Oh how we love turning 0-255 into meters.
|
||||||
// (float)m_visualParams[25] = Height
|
// (float)m_visualParams[25] = Height
|
||||||
// (float)m_visualParams[125] = LegLength
|
// (float)m_visualParams[125] = LegLength
|
||||||
m_avatarHeight = (1.50856f + ((m_visualParams[25] / 255.0f) * (2.525506f - 1.50856f)))
|
m_avatarHeight = (1.50856f + (((float) m_visualParams[25]/255.0f)*(2.525506f - 1.50856f)))
|
||||||
+ ((m_visualParams[125] / 255.0f) / 1.5f);
|
+ (((float) m_visualParams[125]/255.0f)/1.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -193,5 +152,45 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
textu.CreateFace(6).TextureID = new LLUUID("00000000-0000-1111-9999-000000000011");
|
textu.CreateFace(6).TextureID = new LLUUID("00000000-0000-1111-9999-000000000011");
|
||||||
return textu;
|
return textu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected AvatarAppearance(SerializationInfo info, StreamingContext context)
|
||||||
|
{
|
||||||
|
//System.Console.WriteLine("AvatarAppearance Deserialize BGN");
|
||||||
|
|
||||||
|
if (info == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("info");
|
||||||
|
}
|
||||||
|
|
||||||
|
m_scenePresenceID = new LLUUID((Guid)info.GetValue("m_scenePresenceID", typeof(Guid)));
|
||||||
|
m_wearablesSerial = (int)info.GetValue("m_wearablesSerial", typeof(int));
|
||||||
|
m_visualParams = (byte[])info.GetValue("m_visualParams", typeof(byte[]));
|
||||||
|
m_wearables = (AvatarWearable[])info.GetValue("m_wearables", typeof(AvatarWearable[]));
|
||||||
|
|
||||||
|
byte[] m_textureEntry_work = (byte[])info.GetValue("m_textureEntry", typeof(byte[]));
|
||||||
|
m_textureEntry = new LLObject.TextureEntry(m_textureEntry_work, 0, m_textureEntry_work.Length);
|
||||||
|
|
||||||
|
m_avatarHeight = (float)info.GetValue("m_avatarHeight", typeof(float));
|
||||||
|
|
||||||
|
//System.Console.WriteLine("AvatarAppearance Deserialize END");
|
||||||
|
}
|
||||||
|
|
||||||
|
[SecurityPermission(SecurityAction.LinkDemand,
|
||||||
|
Flags = SecurityPermissionFlag.SerializationFormatter)]
|
||||||
|
public virtual void GetObjectData(
|
||||||
|
SerializationInfo info, StreamingContext context)
|
||||||
|
{
|
||||||
|
if (info == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("info");
|
||||||
|
}
|
||||||
|
|
||||||
|
info.AddValue("m_scenePresenceID", m_scenePresenceID.UUID);
|
||||||
|
info.AddValue("m_wearablesSerial", m_wearablesSerial);
|
||||||
|
info.AddValue("m_visualParams", m_visualParams);
|
||||||
|
info.AddValue("m_wearables", m_wearables);
|
||||||
|
info.AddValue("m_textureEntry", m_textureEntry.ToBytes());
|
||||||
|
info.AddValue("m_avatarHeight", m_avatarHeight);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,15 +36,70 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public abstract class EntityBase : ISerializable
|
public abstract class EntityBase : ISerializable
|
||||||
{
|
{
|
||||||
protected uint m_localId;
|
|
||||||
protected string m_name;
|
|
||||||
protected LLVector3 m_pos;
|
|
||||||
protected Quaternion m_rotation = new Quaternion(0, 0, 1, 0);
|
|
||||||
protected LLVector3 m_rotationalvelocity;
|
|
||||||
protected Scene m_scene;
|
protected Scene m_scene;
|
||||||
|
|
||||||
|
public Scene Scene
|
||||||
|
{
|
||||||
|
get { return m_scene; }
|
||||||
|
}
|
||||||
|
|
||||||
protected LLUUID m_uuid;
|
protected LLUUID m_uuid;
|
||||||
|
|
||||||
|
public virtual LLUUID UUID
|
||||||
|
{
|
||||||
|
get { return m_uuid; }
|
||||||
|
set { m_uuid = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
protected string m_name;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public virtual string Name
|
||||||
|
{
|
||||||
|
get { return m_name; }
|
||||||
|
set { m_name = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
protected LLVector3 m_pos;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public virtual LLVector3 AbsolutePosition
|
||||||
|
{
|
||||||
|
get { return m_pos; }
|
||||||
|
set { m_pos = value; }
|
||||||
|
}
|
||||||
|
|
||||||
protected LLVector3 m_velocity;
|
protected LLVector3 m_velocity;
|
||||||
|
protected LLVector3 m_rotationalvelocity;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public virtual LLVector3 Velocity
|
||||||
|
{
|
||||||
|
get { return m_velocity; }
|
||||||
|
set { m_velocity = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Quaternion m_rotation = new Quaternion(0, 0, 1, 0);
|
||||||
|
|
||||||
|
public virtual Quaternion Rotation
|
||||||
|
{
|
||||||
|
get { return m_rotation; }
|
||||||
|
set { m_rotation = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
protected uint m_localId;
|
||||||
|
|
||||||
|
public virtual uint LocalId
|
||||||
|
{
|
||||||
|
get { return m_localId; }
|
||||||
|
set { m_localId = value; }
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a new Entity (should not occur on it's own)
|
/// Creates a new Entity (should not occur on it's own)
|
||||||
|
@ -60,6 +115,28 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
m_rotationalvelocity = new LLVector3(0, 0, 0);
|
m_rotationalvelocity = new LLVector3(0, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public abstract void UpdateMovement();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Performs any updates that need to be done at each frame.
|
||||||
|
/// </summary>
|
||||||
|
public abstract void Update();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Copies the entity
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public virtual EntityBase Copy()
|
||||||
|
{
|
||||||
|
return (EntityBase) MemberwiseClone();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public abstract void SetText(string text, Vector3 color, double alpha);
|
||||||
|
|
||||||
protected EntityBase(SerializationInfo info, StreamingContext context)
|
protected EntityBase(SerializationInfo info, StreamingContext context)
|
||||||
{
|
{
|
||||||
//System.Console.WriteLine("EntityBase Deserialize BGN");
|
//System.Console.WriteLine("EntityBase Deserialize BGN");
|
||||||
|
@ -69,95 +146,43 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
throw new ArgumentNullException("info");
|
throw new ArgumentNullException("info");
|
||||||
}
|
}
|
||||||
|
|
||||||
m_uuid = new LLUUID((Guid) info.GetValue("m_uuid", typeof (Guid)));
|
m_uuid = new LLUUID((Guid)info.GetValue("m_uuid", typeof(Guid)));
|
||||||
m_name = (string) info.GetValue("m_name", typeof (string));
|
m_name = (string)info.GetValue("m_name", typeof(string));
|
||||||
|
|
||||||
m_pos
|
m_pos
|
||||||
= new LLVector3(
|
= new LLVector3(
|
||||||
(float) info.GetValue("m_pos.X", typeof (float)),
|
(float)info.GetValue("m_pos.X", typeof(float)),
|
||||||
(float) info.GetValue("m_pos.Y", typeof (float)),
|
(float)info.GetValue("m_pos.Y", typeof(float)),
|
||||||
(float) info.GetValue("m_pos.Z", typeof (float)));
|
(float)info.GetValue("m_pos.Z", typeof(float)));
|
||||||
|
|
||||||
m_velocity
|
m_velocity
|
||||||
= new LLVector3(
|
= new LLVector3(
|
||||||
(float) info.GetValue("m_velocity.X", typeof (float)),
|
(float)info.GetValue("m_velocity.X", typeof(float)),
|
||||||
(float) info.GetValue("m_velocity.Y", typeof (float)),
|
(float)info.GetValue("m_velocity.Y", typeof(float)),
|
||||||
(float) info.GetValue("m_velocity.Z", typeof (float)));
|
(float)info.GetValue("m_velocity.Z", typeof(float)));
|
||||||
|
|
||||||
m_rotationalvelocity
|
m_rotationalvelocity
|
||||||
= new LLVector3(
|
= new LLVector3(
|
||||||
(float) info.GetValue("m_rotationalvelocity.X", typeof (float)),
|
(float)info.GetValue("m_rotationalvelocity.X", typeof(float)),
|
||||||
(float) info.GetValue("m_rotationalvelocity.Y", typeof (float)),
|
(float)info.GetValue("m_rotationalvelocity.Y", typeof(float)),
|
||||||
(float) info.GetValue("m_rotationalvelocity.Z", typeof (float)));
|
(float)info.GetValue("m_rotationalvelocity.Z", typeof(float)));
|
||||||
|
|
||||||
m_rotation
|
m_rotation
|
||||||
= new Quaternion(
|
= new Quaternion(
|
||||||
(float) info.GetValue("m_rotation.w", typeof (float)),
|
(float)info.GetValue("m_rotation.w", typeof(float)),
|
||||||
(float) info.GetValue("m_rotation.x", typeof (float)),
|
(float)info.GetValue("m_rotation.x", typeof(float)),
|
||||||
(float) info.GetValue("m_rotation.y", typeof (float)),
|
(float)info.GetValue("m_rotation.y", typeof(float)),
|
||||||
(float) info.GetValue("m_rotation.z", typeof (float)));
|
(float)info.GetValue("m_rotation.z", typeof(float)));
|
||||||
|
|
||||||
m_localId = (uint) info.GetValue("m_localId", typeof (uint));
|
m_localId = (uint)info.GetValue("m_localId", typeof(uint));
|
||||||
|
|
||||||
//System.Console.WriteLine("EntityBase Deserialize END");
|
//System.Console.WriteLine("EntityBase Deserialize END");
|
||||||
}
|
}
|
||||||
|
|
||||||
public Scene Scene
|
|
||||||
{
|
|
||||||
get { return m_scene; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual LLUUID UUID
|
|
||||||
{
|
|
||||||
get { return m_uuid; }
|
|
||||||
set { m_uuid = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
public virtual string Name
|
|
||||||
{
|
|
||||||
get { return m_name; }
|
|
||||||
set { m_name = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
public virtual LLVector3 AbsolutePosition
|
|
||||||
{
|
|
||||||
get { return m_pos; }
|
|
||||||
set { m_pos = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
public virtual LLVector3 Velocity
|
|
||||||
{
|
|
||||||
get { return m_velocity; }
|
|
||||||
set { m_velocity = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual Quaternion Rotation
|
|
||||||
{
|
|
||||||
get { return m_rotation; }
|
|
||||||
set { m_rotation = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual uint LocalId
|
|
||||||
{
|
|
||||||
get { return m_localId; }
|
|
||||||
set { m_localId = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#region ISerializable Members
|
|
||||||
|
|
||||||
[SecurityPermission(SecurityAction.LinkDemand,
|
[SecurityPermission(SecurityAction.LinkDemand,
|
||||||
Flags = SecurityPermissionFlag.SerializationFormatter)]
|
Flags = SecurityPermissionFlag.SerializationFormatter)]
|
||||||
public virtual void GetObjectData(
|
public virtual void GetObjectData(
|
||||||
SerializationInfo info, StreamingContext context)
|
SerializationInfo info, StreamingContext context)
|
||||||
{
|
{
|
||||||
if (info == null)
|
if (info == null)
|
||||||
{
|
{
|
||||||
|
@ -190,42 +215,18 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
info.AddValue("m_localId", m_localId);
|
info.AddValue("m_localId", m_localId);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
public abstract void UpdateMovement();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Performs any updates that need to be done at each frame.
|
|
||||||
/// </summary>
|
|
||||||
public abstract void Update();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Copies the entity
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
public virtual EntityBase Copy()
|
|
||||||
{
|
|
||||||
return (EntityBase) MemberwiseClone();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public abstract void SetText(string text, Vector3 color, double alpha);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Nested Classes
|
//Nested Classes
|
||||||
public class EntityIntersection
|
public class EntityIntersection
|
||||||
{
|
{
|
||||||
public Vector3 AAfaceNormal = new Vector3(0, 0, 0);
|
|
||||||
public float distance;
|
|
||||||
public int face = -1;
|
|
||||||
public bool HitTF;
|
|
||||||
public Vector3 ipoint = new Vector3(0, 0, 0);
|
public Vector3 ipoint = new Vector3(0, 0, 0);
|
||||||
public Vector3 normal = new Vector3(0, 0, 0);
|
public Vector3 normal = new Vector3(0, 0, 0);
|
||||||
|
public Vector3 AAfaceNormal = new Vector3(0, 0, 0);
|
||||||
|
public int face = -1;
|
||||||
|
public bool HitTF = false;
|
||||||
public SceneObjectPart obj;
|
public SceneObjectPart obj;
|
||||||
|
public float distance = 0;
|
||||||
|
|
||||||
public EntityIntersection()
|
public EntityIntersection()
|
||||||
{
|
{
|
||||||
|
@ -238,4 +239,4 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
HitTF = _HitTF;
|
HitTF = _HitTF;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,4 +34,4 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
void processMovement(IClientAPI remoteClient, uint flags, LLQuaternion bodyRotation);
|
void processMovement(IClientAPI remoteClient, uint flags, LLQuaternion bodyRotation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,33 +46,36 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
#region Events
|
#region Events
|
||||||
|
|
||||||
private PhysicsCrash handlerPhysicsCrash;
|
|
||||||
public event PhysicsCrash UnRecoverableError;
|
public event PhysicsCrash UnRecoverableError;
|
||||||
|
private PhysicsCrash handlerPhysicsCrash = null;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Fields
|
#region Fields
|
||||||
|
|
||||||
|
public Dictionary<LLUUID, ScenePresence> ScenePresences;
|
||||||
// SceneObjects is not currently populated or used.
|
// SceneObjects is not currently populated or used.
|
||||||
//public Dictionary<LLUUID, SceneObjectGroup> SceneObjects;
|
//public Dictionary<LLUUID, SceneObjectGroup> SceneObjects;
|
||||||
public PhysicsScene _PhyScene;
|
|
||||||
public Dictionary<LLUUID, EntityBase> Entities;
|
public Dictionary<LLUUID, EntityBase> Entities;
|
||||||
protected int m_activeScripts;
|
public Dictionary<LLUUID, ScenePresence> RestorePresences;
|
||||||
protected int m_numChildAgents;
|
|
||||||
protected int m_numPrim;
|
|
||||||
protected int m_numRootAgents;
|
|
||||||
protected Scene m_parentScene;
|
|
||||||
protected int m_physicalPrim;
|
|
||||||
protected RegionInfo m_regInfo;
|
|
||||||
|
|
||||||
protected int m_scriptLPS;
|
public BasicQuadTreeNode QuadTree;
|
||||||
|
|
||||||
|
protected RegionInfo m_regInfo;
|
||||||
|
protected Scene m_parentScene;
|
||||||
|
protected PermissionManager PermissionsMngr;
|
||||||
|
protected List<EntityBase> m_updateList = new List<EntityBase>();
|
||||||
|
protected int m_numRootAgents = 0;
|
||||||
|
protected int m_numPrim = 0;
|
||||||
|
protected int m_numChildAgents = 0;
|
||||||
|
protected int m_physicalPrim = 0;
|
||||||
|
|
||||||
|
protected int m_activeScripts = 0;
|
||||||
|
protected int m_scriptLPS = 0;
|
||||||
|
|
||||||
internal object m_syncRoot = new object();
|
internal object m_syncRoot = new object();
|
||||||
protected List<EntityBase> m_updateList = new List<EntityBase>();
|
|
||||||
protected PermissionManager PermissionsMngr;
|
public PhysicsScene _PhyScene;
|
||||||
public BasicQuadTreeNode QuadTree;
|
|
||||||
public Dictionary<LLUUID, ScenePresence> RestorePresences;
|
|
||||||
public Dictionary<LLUUID, ScenePresence> ScenePresences;
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -81,7 +84,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
m_parentScene = parent;
|
m_parentScene = parent;
|
||||||
m_regInfo = regInfo;
|
m_regInfo = regInfo;
|
||||||
PermissionsMngr = permissionsMngr;
|
PermissionsMngr = permissionsMngr;
|
||||||
QuadTree = new BasicQuadTreeNode(null, "/0/", 0, 0, (short) Constants.RegionSize, (short) Constants.RegionSize);
|
QuadTree = new BasicQuadTreeNode(null, "/0/", 0, 0, (short)Constants.RegionSize, (short)Constants.RegionSize);
|
||||||
QuadTree.Subdivide();
|
QuadTree.Subdivide();
|
||||||
QuadTree.Subdivide();
|
QuadTree.Subdivide();
|
||||||
}
|
}
|
||||||
|
@ -159,7 +162,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
lock (m_syncRoot)
|
lock (m_syncRoot)
|
||||||
{
|
{
|
||||||
return _PhyScene.Simulate((float) elapsed);
|
return _PhyScene.Simulate((float)elapsed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -184,6 +187,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
foreach (SceneObjectPart part in sceneObject.Children.Values)
|
foreach (SceneObjectPart part in sceneObject.Children.Values)
|
||||||
{
|
{
|
||||||
part.LocalId = m_parentScene.PrimIDAllocate();
|
part.LocalId = m_parentScene.PrimIDAllocate();
|
||||||
|
|
||||||
}
|
}
|
||||||
sceneObject.UpdateParentIDs();
|
sceneObject.UpdateParentIDs();
|
||||||
AddEntity(sceneObject);
|
AddEntity(sceneObject);
|
||||||
|
@ -229,7 +233,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
for (int i = 0; i < m_updateList.Count; i++)
|
for (int i = 0; i < m_updateList.Count; i++)
|
||||||
{
|
{
|
||||||
EntityBase entity = m_updateList[i];
|
EntityBase entity = m_updateList[i];
|
||||||
|
|
||||||
// Don't abort the whole update if one entity happens to give us an exception.
|
// Don't abort the whole update if one entity happens to give us an exception.
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -245,7 +249,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[INNER SCENE]: Failed to update {0}, - {1}", entity.Name, e); //entity.m_uuid
|
m_log.ErrorFormat("[INNER SCENE]: Failed to update {0}, - {1}", entity.Name, e);//entity.m_uuid
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_updateList.Clear();
|
m_updateList.Clear();
|
||||||
|
@ -280,16 +284,15 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (obj is SceneObjectGroup)
|
if (obj is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
if ((obj).LocalId == localID)
|
if (((SceneObjectGroup)obj).LocalId == localID)
|
||||||
{
|
{
|
||||||
m_parentScene.RemoveEntity((SceneObjectGroup) obj);
|
m_parentScene.RemoveEntity((SceneObjectGroup)obj);
|
||||||
m_numPrim--;
|
m_numPrim--;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DetachObject(uint objectLocalID, IClientAPI remoteClient)
|
public void DetachObject(uint objectLocalID, IClientAPI remoteClient)
|
||||||
{
|
{
|
||||||
List<EntityBase> EntityList = GetEntities();
|
List<EntityBase> EntityList = GetEntities();
|
||||||
|
@ -298,25 +301,29 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (obj is SceneObjectGroup)
|
if (obj is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
if ((obj).LocalId == objectLocalID)
|
if (((SceneObjectGroup)obj).LocalId == objectLocalID)
|
||||||
{
|
{
|
||||||
SceneObjectGroup group = (SceneObjectGroup) obj;
|
SceneObjectGroup group = (SceneObjectGroup)obj;
|
||||||
|
|
||||||
//group.DetachToGround();
|
//group.DetachToGround();
|
||||||
DetachSingleAttachmentToInv(group.GetFromAssetID(), remoteClient);
|
DetachSingleAttachmentToInv(group.GetFromAssetID(),remoteClient);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void HandleUndo(IClientAPI remoteClient, LLUUID primId)
|
public void HandleUndo(IClientAPI remoteClient, LLUUID primId)
|
||||||
{
|
{
|
||||||
if (primId != LLUUID.Zero)
|
if (primId != LLUUID.Zero)
|
||||||
{
|
{
|
||||||
SceneObjectPart part = m_parentScene.GetSceneObjectPart(primId);
|
SceneObjectPart part = m_parentScene.GetSceneObjectPart(primId);
|
||||||
if (part != null)
|
if (part != null)
|
||||||
part.Undo();
|
part.Undo();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -331,29 +338,27 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
// Calls attach with a Zero position
|
// Calls attach with a Zero position
|
||||||
AttachObject(remoteClient, objectLocalID, AttachmentPt, rot, LLVector3.Zero);
|
AttachObject(remoteClient, objectLocalID, AttachmentPt, rot, LLVector3.Zero);
|
||||||
}
|
}
|
||||||
|
public void RezSingleAttachment(IClientAPI remoteClient, LLUUID itemID, uint AttachmentPt,uint ItemFlags, uint NextOwnerMask)
|
||||||
public void RezSingleAttachment(IClientAPI remoteClient, LLUUID itemID, uint AttachmentPt, uint ItemFlags, uint NextOwnerMask)
|
|
||||||
{
|
{
|
||||||
SceneObjectGroup objatt = m_parentScene.RezObject(remoteClient, itemID, LLVector3.Zero, LLVector3.Zero, LLUUID.Zero, 1, true,
|
SceneObjectGroup objatt = m_parentScene.RezObject(remoteClient, itemID, LLVector3.Zero, LLVector3.Zero, LLUUID.Zero, (byte)1, true,
|
||||||
(uint)
|
(uint)(PermissionMask.Copy | PermissionMask.Move | PermissionMask.Modify | PermissionMask.Transfer),
|
||||||
(PermissionMask.Copy | PermissionMask.Move | PermissionMask.Modify | PermissionMask.Transfer),
|
(uint)(PermissionMask.Copy | PermissionMask.Move | PermissionMask.Modify | PermissionMask.Transfer),
|
||||||
(uint)
|
(uint)(PermissionMask.Copy | PermissionMask.Move | PermissionMask.Modify | PermissionMask.Transfer),
|
||||||
(PermissionMask.Copy | PermissionMask.Move | PermissionMask.Modify | PermissionMask.Transfer),
|
ItemFlags, false, false, remoteClient.AgentId, true);
|
||||||
(uint)
|
|
||||||
(PermissionMask.Copy | PermissionMask.Move | PermissionMask.Modify | PermissionMask.Transfer),
|
|
||||||
ItemFlags, false, false, remoteClient.AgentId, true);
|
|
||||||
|
|
||||||
if (objatt != null)
|
if (objatt != null)
|
||||||
{
|
{
|
||||||
AttachObject(remoteClient, objatt.LocalId, AttachmentPt, new LLQuaternion(0, 0, 0, 1), objatt.AbsolutePosition);
|
AttachObject(remoteClient,objatt.LocalId,AttachmentPt,new LLQuaternion(0,0,0,1),objatt.AbsolutePosition);
|
||||||
objatt.ScheduleGroupForFullUpdate();
|
objatt.ScheduleGroupForFullUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// What makes this method odd and unique is it tries to detach using an LLUUID.... Yay for standards.
|
// What makes this method odd and unique is it tries to detach using an LLUUID.... Yay for standards.
|
||||||
// To LocalId or LLUUID, *THAT* is the question. How now Brown LLUUID??
|
// To LocalId or LLUUID, *THAT* is the question. How now Brown LLUUID??
|
||||||
public void DetachSingleAttachmentToInv(LLUUID itemID, IClientAPI remoteClient)
|
public void DetachSingleAttachmentToInv(LLUUID itemID, IClientAPI remoteClient)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (itemID == LLUUID.Zero) // If this happened, someone made a mistake....
|
if (itemID == LLUUID.Zero) // If this happened, someone made a mistake....
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -363,16 +368,17 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (obj is SceneObjectGroup)
|
if (obj is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
if (((SceneObjectGroup) obj).GetFromAssetID() == itemID)
|
if (((SceneObjectGroup)obj).GetFromAssetID() == itemID)
|
||||||
{
|
{
|
||||||
SceneObjectGroup group = (SceneObjectGroup) obj;
|
SceneObjectGroup group = (SceneObjectGroup)obj;
|
||||||
group.DetachToInventoryPrep();
|
group.DetachToInventoryPrep();
|
||||||
m_log.Debug("[DETACH]: Saving attachpoint: " + ((uint) group.GetAttachmentPoint()));
|
m_log.Debug("[DETACH]: Saving attachpoint: " + ((uint)group.GetAttachmentPoint()).ToString());
|
||||||
m_parentScene.updateKnownAsset(remoteClient, group, group.GetFromAssetID(), group.OwnerID);
|
m_parentScene.updateKnownAsset(remoteClient, group, group.GetFromAssetID(),group.OwnerID);
|
||||||
m_parentScene.DeleteSceneObjectGroup(group);
|
m_parentScene.DeleteSceneObjectGroup(group);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AttachObject(IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, LLQuaternion rot, LLVector3 attachPos)
|
public void AttachObject(IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, LLQuaternion rot, LLVector3 attachPos)
|
||||||
|
@ -382,34 +388,39 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (obj is SceneObjectGroup)
|
if (obj is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
if ((obj).LocalId == objectLocalID)
|
if (((SceneObjectGroup)obj).LocalId == objectLocalID)
|
||||||
{
|
{
|
||||||
SceneObjectGroup group = (SceneObjectGroup) obj;
|
SceneObjectGroup group = (SceneObjectGroup)obj;
|
||||||
|
|
||||||
// If the attachment point isn't the same as the one previously used
|
// If the attachment point isn't the same as the one previously used
|
||||||
// set it's offset position = 0 so that it appears on the attachment point
|
// set it's offset position = 0 so that it appears on the attachment point
|
||||||
// and not in a weird location somewhere unknown.
|
// and not in a weird location somewhere unknown.
|
||||||
if (AttachmentPt != 0 && AttachmentPt != group.GetAttachmentPoint())
|
if (AttachmentPt != 0 && AttachmentPt != (uint)group.GetAttachmentPoint())
|
||||||
{
|
{
|
||||||
|
|
||||||
attachPos = LLVector3.Zero;
|
attachPos = LLVector3.Zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
// AttachmentPt 0 means the client chose to 'wear' the attachment.
|
// AttachmentPt 0 means the client chose to 'wear' the attachment.
|
||||||
if (AttachmentPt == 0)
|
if (AttachmentPt == 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
// Check object for stored attachment point
|
// Check object for stored attachment point
|
||||||
AttachmentPt = group.GetAttachmentPoint();
|
AttachmentPt = (uint)group.GetAttachmentPoint();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// if we still didn't find a suitable attachment point.......
|
// if we still didn't find a suitable attachment point.......
|
||||||
if (AttachmentPt == 0)
|
if (AttachmentPt == 0)
|
||||||
{
|
{
|
||||||
// Stick it on left hand with Zero Offset from the attachment point.
|
// Stick it on left hand with Zero Offset from the attachment point.
|
||||||
AttachmentPt = (uint) AttachmentPoint.LeftHand;
|
AttachmentPt = (uint)AttachmentPoint.LeftHand;
|
||||||
attachPos = LLVector3.Zero;
|
attachPos = LLVector3.Zero;
|
||||||
}
|
}
|
||||||
m_log.Debug("[ATTACH]: Using attachpoint: " + AttachmentPt);
|
m_log.Debug("[ATTACH]: Using attachpoint: " + AttachmentPt.ToString());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Saves and gets assetID
|
// Saves and gets assetID
|
||||||
if (group.GetFromAssetID() == LLUUID.Zero)
|
if (group.GetFromAssetID() == LLUUID.Zero)
|
||||||
|
@ -420,14 +431,16 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
group.SetFromAssetID(newAssetID);
|
group.SetFromAssetID(newAssetID);
|
||||||
}
|
}
|
||||||
group.AttachToAgent(remoteClient.AgentId, AttachmentPt, attachPos);
|
group.AttachToAgent(remoteClient.AgentId, AttachmentPt, attachPos);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
}
|
||||||
// Use the above method.
|
// Use the above method.
|
||||||
public void AttachObject(IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, LLQuaternion rot,
|
public void AttachObject(IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, LLQuaternion rot,
|
||||||
bool deadMethod)
|
bool deadMethod)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Attaching object " + objectLocalID + " to " + AttachmentPt);
|
Console.WriteLine("Attaching object " + objectLocalID + " to " + AttachmentPt);
|
||||||
SceneObjectPart p = GetSceneObjectPart(objectLocalID);
|
SceneObjectPart p = GetSceneObjectPart(objectLocalID);
|
||||||
|
@ -476,14 +489,14 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
objupdate.ObjectData[0].ParentID = 0;
|
objupdate.ObjectData[0].ParentID = 0;
|
||||||
objupdate.ObjectData[0].OwnerID = LLUUID.Zero;
|
objupdate.ObjectData[0].OwnerID = LLUUID.Zero;
|
||||||
objupdate.ObjectData[0].Scale = new LLVector3(1, 1, 1);
|
objupdate.ObjectData[0].Scale = new LLVector3(1, 1, 1);
|
||||||
objupdate.ObjectData[0].PCode = (byte) PCode.Avatar;
|
objupdate.ObjectData[0].PCode = (byte)PCode.Avatar;
|
||||||
objupdate.ObjectData[0].TextureEntry = ScenePresence.DefaultTexture;
|
objupdate.ObjectData[0].TextureEntry = ScenePresence.DefaultTexture;
|
||||||
|
|
||||||
objupdate.ObjectData[0].ID = av.LocalId;
|
objupdate.ObjectData[0].ID = av.LocalId;
|
||||||
objupdate.ObjectData[0].FullID = remoteClient.AgentId;
|
objupdate.ObjectData[0].FullID = remoteClient.AgentId;
|
||||||
objupdate.ObjectData[0].ParentID = 0;
|
objupdate.ObjectData[0].ParentID = 0;
|
||||||
objupdate.ObjectData[0].NameValue =
|
objupdate.ObjectData[0].NameValue =
|
||||||
Helpers.StringToField("FirstName STRING RW SV " + av.Firstname + "\nLastName STRING RW SV " + av.Lastname);
|
Helpers.StringToField("FirstName STRING RW SV " + av.Firstname + "\nLastName STRING RW SV " + av.Lastname);
|
||||||
LLVector3 pos2 = av.AbsolutePosition;
|
LLVector3 pos2 = av.AbsolutePosition;
|
||||||
// new LLVector3((float) Pos.X, (float) Pos.Y, (float) Pos.Z);
|
// new LLVector3((float) Pos.X, (float) Pos.Y, (float) Pos.Z);
|
||||||
byte[] pb = pos2.GetBytes();
|
byte[] pb = pos2.GetBytes();
|
||||||
|
@ -516,7 +529,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
objupdate.ObjectData[1].TextureEntry = primData.TextureEntry;
|
objupdate.ObjectData[1].TextureEntry = primData.TextureEntry;
|
||||||
objupdate.ObjectData[1].PCode = primData.PCode;
|
objupdate.ObjectData[1].PCode = primData.PCode;
|
||||||
objupdate.ObjectData[1].State = (byte) (((byte) AttachmentPt) << 4);
|
objupdate.ObjectData[1].State = (byte)(((byte)AttachmentPt) << 4);
|
||||||
objupdate.ObjectData[1].PathBegin = primData.PathBegin;
|
objupdate.ObjectData[1].PathBegin = primData.PathBegin;
|
||||||
objupdate.ObjectData[1].PathEnd = primData.PathEnd;
|
objupdate.ObjectData[1].PathEnd = primData.PathEnd;
|
||||||
objupdate.ObjectData[1].PathScaleX = primData.PathScaleX;
|
objupdate.ObjectData[1].PathScaleX = primData.PathScaleX;
|
||||||
|
@ -553,8 +566,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
//objupdate.ObjectData[1].ClickAction = clickAction;
|
//objupdate.ObjectData[1].ClickAction = clickAction;
|
||||||
objupdate.ObjectData[1].Radius = 20;
|
objupdate.ObjectData[1].Radius = 20;
|
||||||
objupdate.ObjectData[1].NameValue =
|
objupdate.ObjectData[1].NameValue =
|
||||||
Helpers.StringToField("AttachItemID STRING RW SV " + p.UUID);
|
Helpers.StringToField("AttachItemID STRING RW SV " + p.UUID);
|
||||||
LLVector3 pos = new LLVector3((float) 0.0, (float) 0.0, (float) 0.0);
|
LLVector3 pos = new LLVector3((float)0.0, (float)0.0, (float)0.0);
|
||||||
|
|
||||||
pb = pos.GetBytes();
|
pb = pos.GetBytes();
|
||||||
Array.Copy(pb, 0, objupdate.ObjectData[1].ObjectData, 0, pb.Length);
|
Array.Copy(pb, 0, objupdate.ObjectData[1].ObjectData, 0, pb.Length);
|
||||||
|
@ -725,7 +738,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
m_scriptLPS = 0;
|
m_scriptLPS = 0;
|
||||||
return returnval;
|
return returnval;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Get Methods
|
#region Get Methods
|
||||||
|
@ -753,7 +765,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get the controlling client for the given avatar, if there is one.
|
/// Get the controlling client for the given avatar, if there is one.
|
||||||
///
|
///
|
||||||
|
@ -767,12 +779,12 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
public IClientAPI GetControllingClient(LLUUID agentId)
|
public IClientAPI GetControllingClient(LLUUID agentId)
|
||||||
{
|
{
|
||||||
ScenePresence presence = GetScenePresence(agentId);
|
ScenePresence presence = GetScenePresence(agentId);
|
||||||
|
|
||||||
if (presence != null)
|
if (presence != null)
|
||||||
{
|
{
|
||||||
return presence.ControllingClient;
|
return presence.ControllingClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -807,7 +819,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
return ScenePresences[agentID];
|
return ScenePresences[agentID];
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -819,8 +831,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (ent is SceneObjectGroup)
|
if (ent is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
if (((SceneObjectGroup) ent).HasChildPrim(localID))
|
if (((SceneObjectGroup)ent).HasChildPrim(localID))
|
||||||
return (SceneObjectGroup) ent;
|
return (SceneObjectGroup)ent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
@ -834,8 +846,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (ent is SceneObjectGroup)
|
if (ent is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
if (((SceneObjectGroup) ent).HasChildPrim(fullID))
|
if (((SceneObjectGroup)ent).HasChildPrim(fullID))
|
||||||
return (SceneObjectGroup) ent;
|
return (SceneObjectGroup)ent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
@ -850,7 +862,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (ent is SceneObjectGroup)
|
if (ent is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
SceneObjectGroup reportingG = (SceneObjectGroup) ent;
|
SceneObjectGroup reportingG = (SceneObjectGroup)ent;
|
||||||
EntityIntersection result = reportingG.TestIntersection(hray, frontFacesOnly, faceCenters);
|
EntityIntersection result = reportingG.TestIntersection(hray, frontFacesOnly, faceCenters);
|
||||||
if (result.HitTF)
|
if (result.HitTF)
|
||||||
{
|
{
|
||||||
|
@ -890,13 +902,13 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (!presence.IsChildAgent)
|
if (!presence.IsChildAgent)
|
||||||
{
|
{
|
||||||
avatar = presence;
|
avatar = presence;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.WarnFormat(
|
m_log.WarnFormat(
|
||||||
"[INNER SCENE]: Requested avatar {0} could not be found in scene {1} since it is only registered as a child agent!",
|
"[INNER SCENE]: Requested avatar {0} could not be found in scene {1} since it is only registered as a child agent!",
|
||||||
avatarId, m_parentScene.RegionInfo.RegionName);
|
avatarId, m_parentScene.RegionInfo.RegionName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -975,8 +987,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
if (presence.IsChildAgent && m_parentScene.m_seeIntoRegionFromNeighbor)
|
if (presence.IsChildAgent && m_parentScene.m_seeIntoRegionFromNeighbor)
|
||||||
{
|
{
|
||||||
LLVector3 oLoc = (ent).AbsolutePosition;
|
LLVector3 oLoc = ((SceneObjectGroup)ent).AbsolutePosition;
|
||||||
float distResult = (float) Util.GetDistanceTo(presence.AbsolutePosition, oLoc);
|
float distResult = (float)Util.GetDistanceTo(presence.AbsolutePosition, oLoc);
|
||||||
|
|
||||||
//m_log.Info("[DISTANCE]: " + distResult.ToString());
|
//m_log.Info("[DISTANCE]: " + distResult.ToString());
|
||||||
|
|
||||||
|
@ -984,13 +996,13 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
// Send Only if we don't already know about it.
|
// Send Only if we don't already know about it.
|
||||||
// KnownPrim also makes the prim known when called.
|
// KnownPrim also makes the prim known when called.
|
||||||
if (!presence.KnownPrim((ent).UUID))
|
if (!presence.KnownPrim(((SceneObjectGroup)ent).UUID))
|
||||||
((SceneObjectGroup) ent).ScheduleFullUpdateToAvatar(presence);
|
((SceneObjectGroup)ent).ScheduleFullUpdateToAvatar(presence);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
((SceneObjectGroup) ent).ScheduleFullUpdateToAvatar(presence);
|
((SceneObjectGroup)ent).ScheduleFullUpdateToAvatar(presence);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1025,7 +1037,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdatePrimGroupScale(uint localID, LLVector3 scale, IClientAPI remoteClient)
|
public void UpdatePrimGroupScale(uint localID, LLVector3 scale, IClientAPI remoteClient)
|
||||||
{
|
{
|
||||||
SceneObjectGroup group = GetGroupByPrim(localID);
|
SceneObjectGroup group = GetGroupByPrim(localID);
|
||||||
|
@ -1140,12 +1151,13 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
SceneObjectGroup group = GetGroupByPrim(localID);
|
SceneObjectGroup group = GetGroupByPrim(localID);
|
||||||
if (group != null)
|
if (group != null)
|
||||||
{
|
{
|
||||||
|
|
||||||
LLVector3 oldPos = group.AbsolutePosition;
|
LLVector3 oldPos = group.AbsolutePosition;
|
||||||
if (group.RootPart.m_IsAttachment)
|
if (group.RootPart.m_IsAttachment)
|
||||||
{
|
{
|
||||||
group.UpdateGroupPosition(pos);
|
group.UpdateGroupPosition(pos);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!PermissionsMngr.CanObjectEntry(remoteClient.AgentId, oldPos, pos) && !group.RootPart.m_IsAttachment)
|
if (!PermissionsMngr.CanObjectEntry(remoteClient.AgentId, oldPos, pos) && !group.RootPart.m_IsAttachment)
|
||||||
{
|
{
|
||||||
|
@ -1191,7 +1203,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (PermissionsMngr.CanEditObject(remoteClient.AgentId, group.UUID))
|
if (PermissionsMngr.CanEditObject(remoteClient.AgentId, group.UUID))
|
||||||
{
|
{
|
||||||
group.UpdatePrimFlags(localID, (ushort) packet.Type, true, packet.ToBytes());
|
group.UpdatePrimFlags(localID, (ushort)packet.Type, true, packet.ToBytes());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1201,7 +1213,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
SceneObjectGroup group = GetGroupByPrim(objectID);
|
SceneObjectGroup group = GetGroupByPrim(objectID);
|
||||||
if (group != null)
|
if (group != null)
|
||||||
{
|
{
|
||||||
if (PermissionsMngr.CanEditObjectPosition(remoteClient.AgentId, group.UUID)) // && PermissionsMngr.)
|
if (PermissionsMngr.CanEditObjectPosition(remoteClient.AgentId, group.UUID))// && PermissionsMngr.)
|
||||||
{
|
{
|
||||||
group.GrabMovement(offset, pos, remoteClient);
|
group.GrabMovement(offset, pos, remoteClient);
|
||||||
}
|
}
|
||||||
|
@ -1292,9 +1304,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (ent is SceneObjectGroup)
|
if (ent is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
if ((ent).LocalId == parentPrim)
|
if (((SceneObjectGroup)ent).LocalId == parentPrim)
|
||||||
{
|
{
|
||||||
parenPrim = (SceneObjectGroup) ent;
|
parenPrim = (SceneObjectGroup)ent;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1309,9 +1321,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (ent is SceneObjectGroup)
|
if (ent is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
if ((ent).LocalId == childPrims[i])
|
if (((SceneObjectGroup)ent).LocalId == childPrims[i])
|
||||||
{
|
{
|
||||||
children.Add((SceneObjectGroup) ent);
|
children.Add((SceneObjectGroup)ent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1322,7 +1334,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
parenPrim.LinkToGroup(sceneObj);
|
parenPrim.LinkToGroup(sceneObj);
|
||||||
}
|
}
|
||||||
|
|
||||||
// We need to explicitly resend the newly link prim's object properties since no other actions
|
// We need to explicitly resend the newly link prim's object properties since no other actions
|
||||||
// occur on link to invoke this elsewhere (such as object selection)
|
// occur on link to invoke this elsewhere (such as object selection)
|
||||||
parenPrim.GetProperties(client);
|
parenPrim.GetProperties(client);
|
||||||
|
@ -1348,16 +1360,19 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (ent is SceneObjectGroup)
|
if (ent is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
SceneObjectGroup obj = (SceneObjectGroup) ent;
|
SceneObjectGroup obj = (SceneObjectGroup)ent;
|
||||||
sceneObjects.Add(obj.LocalId, obj);
|
sceneObjects.Add(obj.LocalId, obj);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find the root prim among the prim ids we've been given
|
// Find the root prim among the prim ids we've been given
|
||||||
for (int i = 0; i < primIds.Count; i++)
|
for (int i = 0; i < primIds.Count; i++)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (sceneObjects.ContainsKey(primIds[i]))
|
if (sceneObjects.ContainsKey(primIds[i]))
|
||||||
{
|
{
|
||||||
|
|
||||||
parenPrim = sceneObjects[primIds[i]];
|
parenPrim = sceneObjects[primIds[i]];
|
||||||
primIds.RemoveAt(i);
|
primIds.RemoveAt(i);
|
||||||
break;
|
break;
|
||||||
|
@ -1387,13 +1402,14 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
grp.DelinkFromGroup(primIds[i]);
|
grp.DelinkFromGroup(primIds[i]);
|
||||||
delinkedSomething = true;
|
delinkedSomething = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!delinkedSomething)
|
if (!delinkedSomething)
|
||||||
{
|
{
|
||||||
m_log.InfoFormat("[SCENE]: " +
|
m_log.InfoFormat("[SCENE]: " +
|
||||||
"DelinkObjects(): Could not find a root prim out of {0} as given to a delink request!",
|
"DelinkObjects(): Could not find a root prim out of {0} as given to a delink request!",
|
||||||
primIds);
|
primIds);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1409,7 +1425,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (ent is SceneObjectGroup)
|
if (ent is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
foreach (KeyValuePair<LLUUID, SceneObjectPart> subent in ((SceneObjectGroup) ent).Children)
|
foreach (KeyValuePair<LLUUID, SceneObjectPart> subent in ((SceneObjectGroup)ent).Children)
|
||||||
{
|
{
|
||||||
if (subent.Value.LocalId == localID)
|
if (subent.Value.LocalId == localID)
|
||||||
{
|
{
|
||||||
|
@ -1419,7 +1435,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Protip: In my day, we didn't call them searchable objects, we called them limited point-to-point joints
|
//Protip: In my day, we didn't call them searchable objects, we called them limited point-to-point joints
|
||||||
//aka ObjectFlags.JointWheel = IncludeInSearch
|
//aka ObjectFlags.JointWheel = IncludeInSearch
|
||||||
|
|
||||||
|
@ -1451,7 +1467,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
public void DuplicateObject(uint originalPrim, LLVector3 offset, uint flags, LLUUID AgentID, LLUUID GroupID)
|
public void DuplicateObject(uint originalPrim, LLVector3 offset, uint flags, LLUUID AgentID, LLUUID GroupID)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[SCENE]: Duplication of object {0} at offset {1} requested by agent {2}", originalPrim, offset, AgentID);
|
m_log.DebugFormat("[SCENE]: Duplication of object {0} at offset {1} requested by agent {2}", originalPrim, offset, AgentID);
|
||||||
|
|
||||||
List<EntityBase> EntityList = GetEntities();
|
List<EntityBase> EntityList = GetEntities();
|
||||||
|
|
||||||
SceneObjectGroup originPrim = null;
|
SceneObjectGroup originPrim = null;
|
||||||
|
@ -1459,9 +1475,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (ent is SceneObjectGroup)
|
if (ent is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
if ((ent).LocalId == originalPrim)
|
if (((SceneObjectGroup)ent).LocalId == originalPrim)
|
||||||
{
|
{
|
||||||
originPrim = (SceneObjectGroup) ent;
|
originPrim = (SceneObjectGroup)ent;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1510,4 +1526,4 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
public partial class Scene
|
public partial class Scene
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log
|
private static readonly ILog m_log
|
||||||
= LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
= LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -49,11 +49,11 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
public void StartScripts()
|
public void StartScripts()
|
||||||
{
|
{
|
||||||
m_log.Info("[PRIM INVENTORY]: Starting scripts in scene");
|
m_log.Info("[PRIM INVENTORY]: Starting scripts in scene");
|
||||||
|
|
||||||
foreach (SceneObjectGroup group in Entities.Values)
|
foreach (SceneObjectGroup group in Entities.Values)
|
||||||
{
|
{
|
||||||
group.StartScripts();
|
group.StartScripts();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -64,9 +64,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
/// in which the item is to be placed.</param>
|
/// in which the item is to be placed.</param>
|
||||||
public void AddInventoryItem(IClientAPI remoteClient, InventoryItemBase item)
|
public void AddInventoryItem(IClientAPI remoteClient, InventoryItemBase item)
|
||||||
{
|
{
|
||||||
CachedUserInfo userInfo
|
CachedUserInfo userInfo
|
||||||
= CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
|
= CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
|
||||||
|
|
||||||
if (userInfo != null)
|
if (userInfo != null)
|
||||||
{
|
{
|
||||||
userInfo.AddItem(remoteClient.AgentId, item);
|
userInfo.AddItem(remoteClient.AgentId, item);
|
||||||
|
@ -88,9 +88,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
m_log.ErrorFormat(
|
m_log.ErrorFormat(
|
||||||
"[AGENT INVENTORY]: Agent {0} {1} was not found for add of item {2} {3}",
|
"[AGENT INVENTORY]: Agent {0} {1} was not found for add of item {2} {3}",
|
||||||
remoteClient.Name, remoteClient.AgentId, item.Name, item.ID);
|
remoteClient.Name, remoteClient.AgentId, item.Name, item.ID);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -190,7 +190,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
// Retrieve group
|
// Retrieve group
|
||||||
SceneObjectPart part = GetSceneObjectPart(primId);
|
SceneObjectPart part = GetSceneObjectPart(primId);
|
||||||
SceneObjectGroup group = part.ParentGroup;
|
SceneObjectGroup group = part.ParentGroup;
|
||||||
if (null == group)
|
if (null == group)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat(
|
m_log.ErrorFormat(
|
||||||
|
@ -200,30 +200,30 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Retrieve item
|
// Retrieve item
|
||||||
TaskInventoryItem item = group.GetInventoryItem(part.LocalId, itemId);
|
TaskInventoryItem item = group.GetInventoryItem(part.LocalId, itemId);
|
||||||
if (null == item)
|
if (null == item)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create new asset
|
// Create new asset
|
||||||
// XXX Hardcoding the numbers is a temporary measure - need an enumeration for this
|
// XXX Hardcoding the numbers is a temporary measure - need an enumeration for this
|
||||||
// There may well be one in libsecondlife
|
// There may well be one in libsecondlife
|
||||||
AssetBase asset = CreateAsset(item.Name, item.Description, 10, 10, data);
|
AssetBase asset = CreateAsset(item.Name, item.Description, 10, 10, data);
|
||||||
AssetCache.AddAsset(asset);
|
AssetCache.AddAsset(asset);
|
||||||
|
|
||||||
// Update item with new asset
|
// Update item with new asset
|
||||||
item.AssetID = asset.FullID;
|
item.AssetID = asset.FullID;
|
||||||
group.UpdateInventoryItem(item);
|
group.UpdateInventoryItem(item);
|
||||||
group.GetProperties(remoteClient);
|
group.GetProperties(remoteClient);
|
||||||
|
|
||||||
// Trigger rerunning of script (use TriggerRezScript event, see RezScript)
|
// Trigger rerunning of script (use TriggerRezScript event, see RezScript)
|
||||||
if (isScriptRunning)
|
if (isScriptRunning)
|
||||||
{
|
{
|
||||||
group.StopScript(part.LocalId, item.ItemID);
|
group.StopScript(part.LocalId, item.ItemID);
|
||||||
group.StartScript(part.LocalId, item.ItemID);
|
group.StartScript(part.LocalId, item.ItemID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -272,7 +272,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
if (userInfo != null && userInfo.RootFolder != null)
|
if (userInfo != null && userInfo.RootFolder != null)
|
||||||
{
|
{
|
||||||
InventoryItemBase item = userInfo.RootFolder.HasItem(itemID);
|
InventoryItemBase item = userInfo.RootFolder.HasItem(itemID);
|
||||||
|
|
||||||
if (item != null)
|
if (item != null)
|
||||||
{
|
{
|
||||||
if (LLUUID.Zero == transactionID)
|
if (LLUUID.Zero == transactionID)
|
||||||
|
@ -298,11 +298,11 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
IAgentAssetTransactions agentTransactions = RequestModuleInterface<IAgentAssetTransactions>();
|
IAgentAssetTransactions agentTransactions = this.RequestModuleInterface<IAgentAssetTransactions>();
|
||||||
if (agentTransactions != null)
|
if (agentTransactions != null)
|
||||||
{
|
{
|
||||||
agentTransactions.HandleItemUpdateFromTransaction(
|
agentTransactions.HandleItemUpdateFromTransaction(
|
||||||
remoteClient, transactionID, item);
|
remoteClient, transactionID, item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -318,7 +318,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
"[AGENT INVENTORY]: Agent ID " + remoteClient.AgentId + " not found for an inventory item update.");
|
"[AGENT INVENTORY]: Agent ID " + remoteClient.AgentId + " not found for an inventory item update.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Give an inventory item from one avatar to another
|
/// Give an inventory item from one avatar to another
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -328,13 +328,13 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
public void GiveInventoryItem(IClientAPI recipientClient, LLUUID senderId, LLUUID itemId)
|
public void GiveInventoryItem(IClientAPI recipientClient, LLUUID senderId, LLUUID itemId)
|
||||||
{
|
{
|
||||||
// Retrieve the item from the sender
|
// Retrieve the item from the sender
|
||||||
CachedUserInfo senderUserInfo = CommsManager.UserProfileCacheService.GetUserDetails(senderId);
|
CachedUserInfo senderUserInfo = CommsManager.UserProfileCacheService.GetUserDetails(senderId);
|
||||||
|
|
||||||
if (senderUserInfo == null)
|
if (senderUserInfo == null)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat(
|
m_log.ErrorFormat(
|
||||||
"[AGENT INVENTORY]: Failed to find sending user {0} for item {1}", senderId, itemId);
|
"[AGENT INVENTORY]: Failed to find sending user {0} for item {1}", senderId, itemId);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -342,11 +342,11 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
InventoryItemBase item = senderUserInfo.RootFolder.HasItem(itemId);
|
InventoryItemBase item = senderUserInfo.RootFolder.HasItem(itemId);
|
||||||
if (item != null)
|
if (item != null)
|
||||||
{
|
{
|
||||||
// TODO get recipient's root folder
|
// TODO get recipient's root folder
|
||||||
CachedUserInfo recipientUserInfo
|
CachedUserInfo recipientUserInfo
|
||||||
= CommsManager.UserProfileCacheService.GetUserDetails(recipientClient.AgentId);
|
= CommsManager.UserProfileCacheService.GetUserDetails(recipientClient.AgentId);
|
||||||
|
|
||||||
if (recipientUserInfo != null)
|
if (recipientUserInfo != null)
|
||||||
{
|
{
|
||||||
// Insert a copy of the item into the recipient
|
// Insert a copy of the item into the recipient
|
||||||
|
@ -373,15 +373,15 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
itemCopy.SaleType = item.SaleType;
|
itemCopy.SaleType = item.SaleType;
|
||||||
|
|
||||||
recipientUserInfo.AddItem(recipientClient.AgentId, itemCopy);
|
recipientUserInfo.AddItem(recipientClient.AgentId, itemCopy);
|
||||||
|
|
||||||
// Let the recipient client know about this new item
|
// Let the recipient client know about this new item
|
||||||
recipientClient.SendBulkUpdateInventory(itemCopy);
|
recipientClient.SendBulkUpdateInventory(itemCopy);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat(
|
m_log.ErrorFormat(
|
||||||
"[AGENT INVENTORY]: Could not find userinfo for recipient user {0}, {1} of item {2}, {3} from {4}",
|
"[AGENT INVENTORY]: Could not find userinfo for recipient user {0}, {1} of item {2}, {3} from {4}",
|
||||||
recipientClient.Name, recipientClient.AgentId, item.Name,
|
recipientClient.Name, recipientClient.AgentId, item.Name,
|
||||||
item.ID, senderId);
|
item.ID, senderId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -389,15 +389,15 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat(
|
m_log.ErrorFormat(
|
||||||
"[AGENT INVENTORY]: Failed to find item {0} to give to {1}", itemId, senderId);
|
"[AGENT INVENTORY]: Failed to find item {0} to give to {1}", itemId, senderId);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.Error("[AGENT INVENTORY]: Failed to find item " + itemId + ", no root folder");
|
m_log.Error("[AGENT INVENTORY]: Failed to find item " + itemId.ToString() + ", no root folder");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CopyInventoryItem(IClientAPI remoteClient, uint callbackID, LLUUID oldAgentID, LLUUID oldItemID,
|
public void CopyInventoryItem(IClientAPI remoteClient, uint callbackID, LLUUID oldAgentID, LLUUID oldItemID,
|
||||||
|
@ -406,14 +406,14 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
m_log.DebugFormat(
|
m_log.DebugFormat(
|
||||||
"[AGENT INVENTORY]: CopyInventoryItem received by {0} with oldAgentID {1}, oldItemID {2}, new FolderID {3}, newName {4}",
|
"[AGENT INVENTORY]: CopyInventoryItem received by {0} with oldAgentID {1}, oldItemID {2}, new FolderID {3}, newName {4}",
|
||||||
remoteClient.AgentId, oldAgentID, oldItemID, newFolderID, newName);
|
remoteClient.AgentId, oldAgentID, oldItemID, newFolderID, newName);
|
||||||
|
|
||||||
InventoryItemBase item = CommsManager.UserProfileCacheService.libraryRoot.HasItem(oldItemID);
|
InventoryItemBase item = CommsManager.UserProfileCacheService.libraryRoot.HasItem(oldItemID);
|
||||||
if (item == null)
|
if (item == null)
|
||||||
{
|
{
|
||||||
CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(oldAgentID);
|
CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(oldAgentID);
|
||||||
if (userInfo == null)
|
if (userInfo == null)
|
||||||
{
|
{
|
||||||
m_log.Error("[AGENT INVENTORY]: Failed to find user " + oldAgentID);
|
m_log.Error("[AGENT INVENTORY]: Failed to find user " + oldAgentID.ToString());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -422,20 +422,20 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
item = userInfo.RootFolder.HasItem(oldItemID);
|
item = userInfo.RootFolder.HasItem(oldItemID);
|
||||||
if (item == null)
|
if (item == null)
|
||||||
{
|
{
|
||||||
m_log.Error("[AGENT INVENTORY]: Failed to find item " + oldItemID);
|
m_log.Error("[AGENT INVENTORY]: Failed to find item " + oldItemID.ToString());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.Error("[AGENT INVENTORY]: Failed to find item " + oldItemID);
|
m_log.Error("[AGENT INVENTORY]: Failed to find item " + oldItemID.ToString());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AssetBase asset
|
AssetBase asset
|
||||||
= AssetCache.GetAsset(
|
= AssetCache.GetAsset(
|
||||||
item.AssetID, (item.AssetType == (int) AssetType.Texture ? true : false));
|
item.AssetID, (item.AssetType == (int)AssetType.Texture ? true : false));
|
||||||
|
|
||||||
if (asset != null)
|
if (asset != null)
|
||||||
{
|
{
|
||||||
|
@ -447,7 +447,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat(
|
m_log.ErrorFormat(
|
||||||
"[AGENT INVENTORY]: Could not copy item {0} since asset {1} could not be found",
|
"[AGENT INVENTORY]: Could not copy item {0} since asset {1} could not be found",
|
||||||
item.Name, item.AssetID);
|
item.Name, item.AssetID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -472,7 +472,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
|
CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
|
||||||
if (userInfo == null)
|
if (userInfo == null)
|
||||||
{
|
{
|
||||||
m_log.Error("[AGENT INVENTORY]: Failed to find user " + remoteClient.AgentId);
|
m_log.Error("[AGENT INVENTORY]: Failed to find user " + remoteClient.AgentId.ToString());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -493,13 +493,13 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.Error("[AGENT INVENTORY]: Failed to find item " + itemID);
|
m_log.Error("[AGENT INVENTORY]: Failed to find item " + itemID.ToString());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.Error("[AGENT INVENTORY]: Failed to find item " + itemID + ", no root folder");
|
m_log.Error("[AGENT INVENTORY]: Failed to find item " + itemID.ToString() + ", no root folder");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -515,9 +515,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
private void CreateNewInventoryItem(IClientAPI remoteClient, LLUUID folderID, uint callbackID,
|
private void CreateNewInventoryItem(IClientAPI remoteClient, LLUUID folderID, uint callbackID,
|
||||||
AssetBase asset, uint nextOwnerMask)
|
AssetBase asset, uint nextOwnerMask)
|
||||||
{
|
{
|
||||||
CachedUserInfo userInfo
|
CachedUserInfo userInfo
|
||||||
= CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
|
= CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
|
||||||
|
|
||||||
if (userInfo != null)
|
if (userInfo != null)
|
||||||
{
|
{
|
||||||
InventoryItemBase item = new InventoryItemBase();
|
InventoryItemBase item = new InventoryItemBase();
|
||||||
|
@ -539,8 +539,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.WarnFormat(
|
m_log.WarnFormat(
|
||||||
"No user details associated with client {0} uuid {1} in CreateNewInventoryItem!",
|
"No user details associated with client {0} uuid {1} in CreateNewInventoryItem!",
|
||||||
remoteClient.Name, remoteClient.AgentId);
|
remoteClient.Name, remoteClient.AgentId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -564,25 +564,25 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
byte wearableType, uint nextOwnerMask)
|
byte wearableType, uint nextOwnerMask)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat("[AGENT INVENTORY]: Received request to create inventory item {0} in folder {1}", name, folderID);
|
// m_log.DebugFormat("[AGENT INVENTORY]: Received request to create inventory item {0} in folder {1}", name, folderID);
|
||||||
|
|
||||||
if (transactionID == LLUUID.Zero)
|
if (transactionID == LLUUID.Zero)
|
||||||
{
|
{
|
||||||
CachedUserInfo userInfo
|
CachedUserInfo userInfo
|
||||||
= CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
|
= CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
|
||||||
|
|
||||||
if (userInfo != null)
|
if (userInfo != null)
|
||||||
{
|
{
|
||||||
ScenePresence presence;
|
ScenePresence presence;
|
||||||
TryGetAvatar(remoteClient.AgentId, out presence);
|
TryGetAvatar(remoteClient.AgentId, out presence);
|
||||||
byte[] data = null;
|
byte[] data = null;
|
||||||
if (invType == 3 && presence != null) // libsecondlife.asset.assettype.landmark = 3 - needs to be turned into an enum
|
if(invType == 3 && presence != null) // libsecondlife.asset.assettype.landmark = 3 - needs to be turned into an enum
|
||||||
{
|
{
|
||||||
LLVector3 pos = presence.AbsolutePosition;
|
LLVector3 pos=presence.AbsolutePosition;
|
||||||
string strdata = String.Format("Landmark version 2\nregion_id {0}\nlocal_pos {1} {2} {3}\nregion_handle {4}\n",
|
string strdata=String.Format("Landmark version 2\nregion_id {0}\nlocal_pos {1} {2} {3}\nregion_handle {4}\n",
|
||||||
presence.Scene.RegionInfo.RegionID,
|
presence.Scene.RegionInfo.RegionID,
|
||||||
pos.X, pos.Y, pos.Z,
|
pos.X, pos.Y, pos.Z,
|
||||||
presence.RegionHandle);
|
presence.RegionHandle);
|
||||||
data = Encoding.ASCII.GetBytes(strdata);
|
data=Encoding.ASCII.GetBytes(strdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
AssetBase asset = CreateAsset(name, description, invType, assetType, data);
|
AssetBase asset = CreateAsset(name, description, invType, assetType, data);
|
||||||
|
@ -593,19 +593,21 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat(
|
m_log.ErrorFormat(
|
||||||
"userInfo for agent uuid {0} unexpectedly null in CreateNewInventoryItem",
|
"userInfo for agent uuid {0} unexpectedly null in CreateNewInventoryItem",
|
||||||
remoteClient.AgentId);
|
remoteClient.AgentId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
IAgentAssetTransactions agentTransactions = RequestModuleInterface<IAgentAssetTransactions>();
|
IAgentAssetTransactions agentTransactions = this.RequestModuleInterface<IAgentAssetTransactions>();
|
||||||
if (agentTransactions != null)
|
if (agentTransactions != null)
|
||||||
{
|
{
|
||||||
agentTransactions.HandleItemCreationFromTransaction(
|
agentTransactions.HandleItemCreationFromTransaction(
|
||||||
remoteClient, transactionID, folderID, callbackID, description,
|
remoteClient, transactionID, folderID, callbackID, description,
|
||||||
name, invType, assetType, wearableType, nextOwnerMask);
|
name, invType, assetType, wearableType, nextOwnerMask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -615,7 +617,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
= CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
|
= CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
|
||||||
if (userInfo == null)
|
if (userInfo == null)
|
||||||
{
|
{
|
||||||
m_log.Error("[AGENT INVENTORY]: Failed to find user " + remoteClient.AgentId);
|
m_log.Error("[AGENT INVENTORY]: Failed to find user " + remoteClient.AgentId.ToString());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -639,7 +641,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
= CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
|
= CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
|
||||||
if (userInfo == null)
|
if (userInfo == null)
|
||||||
{
|
{
|
||||||
m_log.Error("[AGENT INVENTORY]: Failed to find user " + remoteClient.AgentId);
|
m_log.Error("[AGENT INVENTORY]: Failed to find user " + remoteClient.AgentId.ToString());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -675,7 +677,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
/// <param name="remoteClient"></param>
|
/// <param name="remoteClient"></param>
|
||||||
/// <param name="primLocalID"></param>
|
/// <param name="primLocalID"></param>
|
||||||
public void RequestTaskInventory(IClientAPI remoteClient, uint primLocalID)
|
public void RequestTaskInventory(IClientAPI remoteClient, uint primLocalID)
|
||||||
{
|
{
|
||||||
SceneObjectGroup group = GetGroupByPrim(primLocalID);
|
SceneObjectGroup group = GetGroupByPrim(primLocalID);
|
||||||
if (group != null)
|
if (group != null)
|
||||||
{
|
{
|
||||||
|
@ -723,7 +725,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
localID);
|
localID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Move the given item in the given prim to a folder in the client's inventory
|
/// Move the given item in the given prim to a folder in the client's inventory
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -734,43 +736,43 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
public void MoveTaskInventoryItem(IClientAPI remoteClient, LLUUID folderId, uint primLocalId, LLUUID itemId)
|
public void MoveTaskInventoryItem(IClientAPI remoteClient, LLUUID folderId, uint primLocalId, LLUUID itemId)
|
||||||
{
|
{
|
||||||
SceneObjectGroup group = GetGroupByPrim(primLocalId);
|
SceneObjectGroup group = GetGroupByPrim(primLocalId);
|
||||||
|
|
||||||
if (null == group)
|
if (null == group)
|
||||||
{
|
{
|
||||||
m_log.WarnFormat(
|
m_log.WarnFormat(
|
||||||
"[PRIM INVENTORY]: " +
|
"[PRIM INVENTORY]: " +
|
||||||
"Move of inventory item {0} from prim with local id {1} failed because the prim could not be found",
|
"Move of inventory item {0} from prim with local id {1} failed because the prim could not be found",
|
||||||
itemId, primLocalId);
|
itemId, primLocalId);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
TaskInventoryItem taskItem = group.GetInventoryItem(primLocalId, itemId);
|
TaskInventoryItem taskItem = group.GetInventoryItem(primLocalId, itemId);
|
||||||
|
|
||||||
if (null == taskItem)
|
if (null == taskItem)
|
||||||
{
|
{
|
||||||
// Console already notified of error in GetInventoryItem
|
// Console already notified of error in GetInventoryItem
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// bool permission;
|
// bool permission;
|
||||||
// permission = PermissionsMngr.CanCopyObject(remoteClient.AgentId,
|
// permission = PermissionsMngr.CanCopyObject(remoteClient.AgentId,
|
||||||
// ((SceneObjectGroup) selectedEnt).UUID);
|
// ((SceneObjectGroup) selectedEnt).UUID);
|
||||||
|
|
||||||
// Pending resolving upstream problems with permissions, we just won't allow anybody who is not the owner
|
// Pending resolving upstream problems with permissions, we just won't allow anybody who is not the owner
|
||||||
// to copy
|
// to copy
|
||||||
if (remoteClient.AgentId != taskItem.OwnerID)
|
if (remoteClient.AgentId != taskItem.OwnerID)
|
||||||
{
|
{
|
||||||
m_log.InfoFormat(
|
m_log.InfoFormat(
|
||||||
"[PRIM INVENTORY]: Attempt made by {0} {1} to copy inventory item {2} {3} in prim {4} {5},"
|
"[PRIM INVENTORY]: Attempt made by {0} {1} to copy inventory item {2} {3} in prim {4} {5},"
|
||||||
+ " but temporarily not allowed pending upstream bugfixes/feature implementation",
|
+ " but temporarily not allowed pending upstream bugfixes/feature implementation",
|
||||||
remoteClient.Name, remoteClient.AgentId, taskItem.Name, taskItem.ItemID, group.Name, group.UUID);
|
remoteClient.Name, remoteClient.AgentId, taskItem.Name, taskItem.ItemID, group.Name, group.UUID);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
InventoryItemBase agentItem = new InventoryItemBase();
|
InventoryItemBase agentItem = new InventoryItemBase();
|
||||||
|
|
||||||
agentItem.ID = LLUUID.Random();
|
agentItem.ID = LLUUID.Random();
|
||||||
agentItem.Creator = taskItem.CreatorID;
|
agentItem.Creator = taskItem.CreatorID;
|
||||||
agentItem.Owner = remoteClient.AgentId;
|
agentItem.Owner = remoteClient.AgentId;
|
||||||
|
@ -781,9 +783,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
agentItem.InvType = taskItem.InvType;
|
agentItem.InvType = taskItem.InvType;
|
||||||
agentItem.Folder = folderId;
|
agentItem.Folder = folderId;
|
||||||
agentItem.EveryOnePermissions = taskItem.EveryoneMask;
|
agentItem.EveryOnePermissions = taskItem.EveryoneMask;
|
||||||
|
|
||||||
if (remoteClient.AgentId != taskItem.OwnerID)
|
if (remoteClient.AgentId != taskItem.OwnerID) {
|
||||||
{
|
|
||||||
agentItem.BasePermissions = taskItem.NextOwnerMask;
|
agentItem.BasePermissions = taskItem.NextOwnerMask;
|
||||||
agentItem.CurrentPermissions = taskItem.NextOwnerMask;
|
agentItem.CurrentPermissions = taskItem.NextOwnerMask;
|
||||||
agentItem.NextPermissions = taskItem.NextOwnerMask;
|
agentItem.NextPermissions = taskItem.NextOwnerMask;
|
||||||
|
@ -792,9 +793,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
agentItem.BasePermissions = taskItem.BaseMask;
|
agentItem.BasePermissions = taskItem.BaseMask;
|
||||||
agentItem.CurrentPermissions = taskItem.OwnerMask;
|
agentItem.CurrentPermissions = taskItem.OwnerMask;
|
||||||
agentItem.NextPermissions = taskItem.NextOwnerMask;
|
agentItem.NextPermissions = taskItem.NextOwnerMask;
|
||||||
}
|
}
|
||||||
|
|
||||||
AddInventoryItem(remoteClient, agentItem);
|
AddInventoryItem(remoteClient, agentItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -833,7 +834,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
group.AddInventoryItem(remoteClient, primLocalID, item, copyID);
|
group.AddInventoryItem(remoteClient, primLocalID, item, copyID);
|
||||||
m_log.InfoFormat(
|
m_log.InfoFormat(
|
||||||
"[PRIM INVENTORY]: Update with item {0} requested of prim {1} for {2}",
|
"[PRIM INVENTORY]: Update with item {0} requested of prim {1} for {2}",
|
||||||
item.Name, primLocalID, remoteClient.Name);
|
item.Name, primLocalID, remoteClient.Name);
|
||||||
group.GetProperties(remoteClient);
|
group.GetProperties(remoteClient);
|
||||||
}
|
}
|
||||||
|
@ -864,22 +865,22 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
public void RezScript(IClientAPI remoteClient, LLUUID itemID, uint localID)
|
public void RezScript(IClientAPI remoteClient, LLUUID itemID, uint localID)
|
||||||
{
|
{
|
||||||
LLUUID copyID = LLUUID.Random();
|
LLUUID copyID = LLUUID.Random();
|
||||||
|
|
||||||
if (itemID != LLUUID.Zero)
|
if (itemID != LLUUID.Zero)
|
||||||
{
|
{
|
||||||
CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
|
CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
|
||||||
|
|
||||||
if (userInfo != null && userInfo.RootFolder != null)
|
if (userInfo != null && userInfo.RootFolder != null)
|
||||||
{
|
{
|
||||||
InventoryItemBase item = userInfo.RootFolder.HasItem(itemID);
|
InventoryItemBase item = userInfo.RootFolder.HasItem(itemID);
|
||||||
|
|
||||||
// Try library
|
// Try library
|
||||||
// XXX clumsy, possibly should be one call
|
// XXX clumsy, possibly should be one call
|
||||||
if (null == item)
|
if (null == item)
|
||||||
{
|
{
|
||||||
item = CommsManager.UserProfileCacheService.libraryRoot.HasItem(itemID);
|
item = CommsManager.UserProfileCacheService.libraryRoot.HasItem(itemID);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item != null)
|
if (item != null)
|
||||||
{
|
{
|
||||||
SceneObjectGroup group = GetGroupByPrim(localID);
|
SceneObjectGroup group = GetGroupByPrim(localID);
|
||||||
|
@ -888,10 +889,10 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
group.AddInventoryItem(remoteClient, localID, item, copyID);
|
group.AddInventoryItem(remoteClient, localID, item, copyID);
|
||||||
group.StartScript(localID, copyID);
|
group.StartScript(localID, copyID);
|
||||||
group.GetProperties(remoteClient);
|
group.GetProperties(remoteClient);
|
||||||
|
|
||||||
// m_log.InfoFormat("[PRIMINVENTORY]: " +
|
// m_log.InfoFormat("[PRIMINVENTORY]: " +
|
||||||
// "Rezzed script {0} into prim local ID {1} for user {2}",
|
// "Rezzed script {0} into prim local ID {1} for user {2}",
|
||||||
// item.inventoryName, localID, remoteClient.Name);
|
// item.inventoryName, localID, remoteClient.Name);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -910,7 +911,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // If the itemID is zero then the script has been rezzed directly in an object's inventory
|
else // If the itemID is zero then the script has been rezzed directly in an object's inventory
|
||||||
{
|
{
|
||||||
// not yet implemented
|
// not yet implemented
|
||||||
// TODO Need to get more details from original RezScript packet
|
// TODO Need to get more details from original RezScript packet
|
||||||
|
@ -926,7 +927,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
/// <param name="packet"></param>
|
/// <param name="packet"></param>
|
||||||
/// <param name="simClient"></param>
|
/// <param name="simClient"></param>
|
||||||
public virtual void DeRezObject(Packet packet, IClientAPI remoteClient)
|
public virtual void DeRezObject(Packet packet, IClientAPI remoteClient)
|
||||||
{
|
{
|
||||||
DeRezObjectPacket DeRezPacket = (DeRezObjectPacket) packet;
|
DeRezObjectPacket DeRezPacket = (DeRezObjectPacket) packet;
|
||||||
|
|
||||||
if (DeRezPacket.AgentBlock.DestinationID == LLUUID.Zero)
|
if (DeRezPacket.AgentBlock.DestinationID == LLUUID.Zero)
|
||||||
|
@ -936,11 +937,11 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
foreach (DeRezObjectPacket.ObjectDataBlock Data in DeRezPacket.ObjectData)
|
foreach (DeRezObjectPacket.ObjectDataBlock Data in DeRezPacket.ObjectData)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
// "[AGENT INVENTORY]: Received request to derez {0} into folder {1}",
|
// "[AGENT INVENTORY]: Received request to derez {0} into folder {1}",
|
||||||
// Data.ObjectLocalID, DeRezPacket.AgentBlock.DestinationID);
|
// Data.ObjectLocalID, DeRezPacket.AgentBlock.DestinationID);
|
||||||
|
|
||||||
EntityBase selectedEnt = null;
|
EntityBase selectedEnt = null;
|
||||||
//m_log.Info("[CLIENT]: LocalID:" + Data.ObjectLocalID.ToString());
|
//m_log.Info("[CLIENT]: LocalID:" + Data.ObjectLocalID.ToString());
|
||||||
|
|
||||||
|
@ -958,16 +959,14 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
bool permission;
|
bool permission;
|
||||||
if (DeRezPacket.AgentBlock.Destination == 1)
|
if (DeRezPacket.AgentBlock.Destination == 1)
|
||||||
{
|
{ // Take Copy
|
||||||
// Take Copy
|
permission = PermissionsMngr.CanCopyObject(remoteClient.AgentId,
|
||||||
permission = PermissionsMngr.CanCopyObject(remoteClient.AgentId,
|
((SceneObjectGroup) selectedEnt).UUID);
|
||||||
(selectedEnt).UUID);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{ // Take
|
||||||
// Take
|
permission = PermissionsMngr.CanDeRezObject(remoteClient.AgentId,
|
||||||
permission = PermissionsMngr.CanDeRezObject(remoteClient.AgentId,
|
((SceneObjectGroup) selectedEnt).UUID);
|
||||||
(selectedEnt).UUID);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (permission)
|
if (permission)
|
||||||
|
@ -998,8 +997,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
item.InvType = asset.InvType;
|
item.InvType = asset.InvType;
|
||||||
item.Folder = DeRezPacket.AgentBlock.DestinationID;
|
item.Folder = DeRezPacket.AgentBlock.DestinationID;
|
||||||
item.EveryOnePermissions = objectGroup.RootPart.EveryoneMask;
|
item.EveryOnePermissions = objectGroup.RootPart.EveryoneMask;
|
||||||
if (remoteClient.AgentId != objectGroup.RootPart.OwnerID)
|
if (remoteClient.AgentId != objectGroup.RootPart.OwnerID) {
|
||||||
{
|
|
||||||
item.BasePermissions = objectGroup.RootPart.NextOwnerMask;
|
item.BasePermissions = objectGroup.RootPart.NextOwnerMask;
|
||||||
item.CurrentPermissions = objectGroup.RootPart.NextOwnerMask;
|
item.CurrentPermissions = objectGroup.RootPart.NextOwnerMask;
|
||||||
item.NextPermissions = objectGroup.RootPart.NextOwnerMask;
|
item.NextPermissions = objectGroup.RootPart.NextOwnerMask;
|
||||||
|
@ -1027,7 +1025,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateKnownAsset(IClientAPI remoteClient, SceneObjectGroup grp, LLUUID assetID, LLUUID agentID)
|
public void updateKnownAsset(IClientAPI remoteClient, SceneObjectGroup grp, LLUUID assetID, LLUUID agentID)
|
||||||
{
|
{
|
||||||
SceneObjectGroup objectGroup = grp;
|
SceneObjectGroup objectGroup = grp;
|
||||||
|
@ -1047,6 +1044,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
// search through folders to find the asset.
|
// search through folders to find the asset.
|
||||||
while (searchfolders.Count > 0)
|
while (searchfolders.Count > 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
InventoryFolderImpl fld = searchfolders.Dequeue();
|
InventoryFolderImpl fld = searchfolders.Dequeue();
|
||||||
lock (fld)
|
lock (fld)
|
||||||
{
|
{
|
||||||
|
@ -1071,8 +1069,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
AssetBase asset = CreateAsset(
|
AssetBase asset = CreateAsset(
|
||||||
objectGroup.GetPartName(objectGroup.LocalId),
|
objectGroup.GetPartName(objectGroup.LocalId),
|
||||||
objectGroup.GetPartDescription(objectGroup.LocalId),
|
objectGroup.GetPartDescription(objectGroup.LocalId),
|
||||||
(sbyte) InventoryType.Object,
|
(sbyte)InventoryType.Object,
|
||||||
(sbyte) AssetType.Object,
|
(sbyte)AssetType.Object,
|
||||||
Helpers.StringToField(sceneObjectXml));
|
Helpers.StringToField(sceneObjectXml));
|
||||||
AssetCache.AddAsset(asset);
|
AssetCache.AddAsset(asset);
|
||||||
|
|
||||||
|
@ -1088,7 +1086,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
// Sticking it in root folder for now.. objects folder later?
|
// Sticking it in root folder for now.. objects folder later?
|
||||||
|
|
||||||
item.Folder = foundFolder; // DeRezPacket.AgentBlock.DestinationID;
|
item.Folder = foundFolder;// DeRezPacket.AgentBlock.DestinationID;
|
||||||
item.EveryOnePermissions = objectGroup.RootPart.EveryoneMask;
|
item.EveryOnePermissions = objectGroup.RootPart.EveryoneMask;
|
||||||
if (agentID != objectGroup.RootPart.OwnerID)
|
if (agentID != objectGroup.RootPart.OwnerID)
|
||||||
{
|
{
|
||||||
|
@ -1110,10 +1108,10 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
remoteClient.SendInventoryItemCreateUpdate(item);
|
remoteClient.SendInventoryItemCreateUpdate(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public LLUUID attachObjectAssetStore(IClientAPI remoteClient, SceneObjectGroup grp, LLUUID AgentId)
|
public LLUUID attachObjectAssetStore(IClientAPI remoteClient, SceneObjectGroup grp, LLUUID AgentId)
|
||||||
{
|
{
|
||||||
SceneObjectGroup objectGroup = grp;
|
SceneObjectGroup objectGroup = grp;
|
||||||
|
@ -1128,8 +1126,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
AssetBase asset = CreateAsset(
|
AssetBase asset = CreateAsset(
|
||||||
objectGroup.GetPartName(objectGroup.LocalId),
|
objectGroup.GetPartName(objectGroup.LocalId),
|
||||||
objectGroup.GetPartDescription(objectGroup.LocalId),
|
objectGroup.GetPartDescription(objectGroup.LocalId),
|
||||||
(sbyte) InventoryType.Object,
|
(sbyte)InventoryType.Object,
|
||||||
(sbyte) AssetType.Object,
|
(sbyte)AssetType.Object,
|
||||||
Helpers.StringToField(sceneObjectXml));
|
Helpers.StringToField(sceneObjectXml));
|
||||||
AssetCache.AddAsset(asset);
|
AssetCache.AddAsset(asset);
|
||||||
|
|
||||||
|
@ -1142,10 +1140,10 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
item.Name = asset.Name;
|
item.Name = asset.Name;
|
||||||
item.AssetType = asset.Type;
|
item.AssetType = asset.Type;
|
||||||
item.InvType = asset.InvType;
|
item.InvType = asset.InvType;
|
||||||
|
|
||||||
// Sticking it in root folder for now.. objects folder later?
|
// Sticking it in root folder for now.. objects folder later?
|
||||||
|
|
||||||
item.Folder = userInfo.RootFolder.ID; // DeRezPacket.AgentBlock.DestinationID;
|
item.Folder = userInfo.RootFolder.ID;// DeRezPacket.AgentBlock.DestinationID;
|
||||||
item.EveryOnePermissions = objectGroup.RootPart.EveryoneMask;
|
item.EveryOnePermissions = objectGroup.RootPart.EveryoneMask;
|
||||||
if (remoteClient.AgentId != objectGroup.RootPart.OwnerID)
|
if (remoteClient.AgentId != objectGroup.RootPart.OwnerID)
|
||||||
{
|
{
|
||||||
|
@ -1167,6 +1165,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
return LLUUID.Zero;
|
return LLUUID.Zero;
|
||||||
}
|
}
|
||||||
return LLUUID.Zero;
|
return LLUUID.Zero;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -1188,63 +1187,64 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
/// <param name="RemoveItem"></param>
|
/// <param name="RemoveItem"></param>
|
||||||
/// <param name="fromTaskID"></param>
|
/// <param name="fromTaskID"></param>
|
||||||
public virtual void RezObject(IClientAPI remoteClient, LLUUID itemID, LLVector3 RayEnd, LLVector3 RayStart,
|
public virtual void RezObject(IClientAPI remoteClient, LLUUID itemID, LLVector3 RayEnd, LLVector3 RayStart,
|
||||||
LLUUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection,
|
LLUUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection,
|
||||||
uint EveryoneMask, uint GroupMask, uint NextOwnerMask, uint ItemFlags,
|
uint EveryoneMask, uint GroupMask, uint NextOwnerMask, uint ItemFlags,
|
||||||
bool RezSelected, bool RemoveItem, LLUUID fromTaskID)
|
bool RezSelected, bool RemoveItem, LLUUID fromTaskID)
|
||||||
{
|
{
|
||||||
SceneObjectGroup sog = RezObject(remoteClient, itemID, RayEnd, RayStart,
|
SceneObjectGroup sog = RezObject(remoteClient, itemID, RayEnd, RayStart,
|
||||||
RayTargetID, BypassRayCast, RayEndIsIntersection,
|
RayTargetID, BypassRayCast, RayEndIsIntersection,
|
||||||
EveryoneMask, GroupMask, NextOwnerMask, ItemFlags,
|
EveryoneMask, GroupMask, NextOwnerMask, ItemFlags,
|
||||||
RezSelected, RemoveItem, fromTaskID, false);
|
RezSelected, RemoveItem, fromTaskID, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Returns SceneObjectGroup or null from asset request.
|
/// <summary>
|
||||||
/// </summary>
|
/// Returns SceneObjectGroup or null from asset request.
|
||||||
/// <param name="remoteClient"></param>
|
/// </summary>
|
||||||
/// <param name="itemID"></param>
|
/// <param name="remoteClient"></param>
|
||||||
/// <param name="RayEnd"></param>
|
/// <param name="itemID"></param>
|
||||||
/// <param name="RayStart"></param>
|
/// <param name="RayEnd"></param>
|
||||||
/// <param name="RayTargetID"></param>
|
/// <param name="RayStart"></param>
|
||||||
/// <param name="BypassRayCast"></param>
|
/// <param name="RayTargetID"></param>
|
||||||
/// <param name="RayEndIsIntersection"></param>
|
/// <param name="BypassRayCast"></param>
|
||||||
/// <param name="EveryoneMask"></param>
|
/// <param name="RayEndIsIntersection"></param>
|
||||||
/// <param name="GroupMask"></param>
|
/// <param name="EveryoneMask"></param>
|
||||||
/// <param name="NextOwnerMask"></param>
|
/// <param name="GroupMask"></param>
|
||||||
/// <param name="ItemFlags"></param>
|
/// <param name="NextOwnerMask"></param>
|
||||||
/// <param name="RezSelected"></param>
|
/// <param name="ItemFlags"></param>
|
||||||
/// <param name="RemoveItem"></param>
|
/// <param name="RezSelected"></param>
|
||||||
/// <param name="fromTaskID"></param>
|
/// <param name="RemoveItem"></param>
|
||||||
/// <param name="difference"></param>
|
/// <param name="fromTaskID"></param>
|
||||||
/// <returns></returns>
|
/// <param name="difference"></param>
|
||||||
|
/// <returns></returns>
|
||||||
public virtual SceneObjectGroup RezObject(IClientAPI remoteClient, LLUUID itemID, LLVector3 RayEnd, LLVector3 RayStart,
|
public virtual SceneObjectGroup RezObject(IClientAPI remoteClient, LLUUID itemID, LLVector3 RayEnd, LLVector3 RayStart,
|
||||||
LLUUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection,
|
LLUUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection,
|
||||||
uint EveryoneMask, uint GroupMask, uint NextOwnerMask, uint ItemFlags,
|
uint EveryoneMask, uint GroupMask, uint NextOwnerMask, uint ItemFlags,
|
||||||
bool RezSelected, bool RemoveItem, LLUUID fromTaskID, bool attachment)
|
bool RezSelected, bool RemoveItem, LLUUID fromTaskID, bool attachment)
|
||||||
{
|
{
|
||||||
// Work out position details
|
// Work out position details
|
||||||
byte bRayEndIsIntersection = 0;
|
byte bRayEndIsIntersection = (byte)0;
|
||||||
|
|
||||||
if (RayEndIsIntersection)
|
if (RayEndIsIntersection)
|
||||||
{
|
{
|
||||||
bRayEndIsIntersection = 1;
|
bRayEndIsIntersection = (byte)1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
bRayEndIsIntersection = 0;
|
bRayEndIsIntersection = (byte)0;
|
||||||
}
|
}
|
||||||
|
|
||||||
LLVector3 scale = new LLVector3(0.5f, 0.5f, 0.5f);
|
LLVector3 scale = new LLVector3(0.5f, 0.5f, 0.5f);
|
||||||
|
|
||||||
|
|
||||||
LLVector3 pos = GetNewRezLocation(
|
LLVector3 pos = GetNewRezLocation(
|
||||||
RayStart, RayEnd, RayTargetID, new LLQuaternion(0, 0, 0, 1),
|
RayStart, RayEnd, RayTargetID, new LLQuaternion(0, 0, 0, 1),
|
||||||
BypassRayCast, bRayEndIsIntersection, true, scale, false);
|
BypassRayCast, bRayEndIsIntersection,true,scale, false);
|
||||||
|
|
||||||
if (!PermissionsMngr.CanRezObject(remoteClient.AgentId, pos) && !attachment)
|
if (!PermissionsMngr.CanRezObject(remoteClient.AgentId, pos) && !attachment)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rez object
|
// Rez object
|
||||||
|
@ -1260,7 +1260,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
if (rezAsset != null)
|
if (rezAsset != null)
|
||||||
{
|
{
|
||||||
string xmlData = Helpers.FieldToUTF8String(rezAsset.Data);
|
string xmlData = Helpers.FieldToUTF8String(rezAsset.Data);
|
||||||
SceneObjectGroup group = new SceneObjectGroup(this, m_regionHandle, xmlData);
|
SceneObjectGroup group = new SceneObjectGroup(this, m_regionHandle, xmlData);
|
||||||
group.ResetIDs();
|
group.ResetIDs();
|
||||||
AddEntity(group);
|
AddEntity(group);
|
||||||
|
@ -1270,8 +1270,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
if (!attachment)
|
if (!attachment)
|
||||||
{
|
{
|
||||||
pos = GetNewRezLocation(
|
pos = GetNewRezLocation(
|
||||||
RayStart, RayEnd, RayTargetID, new LLQuaternion(0, 0, 0, 1),
|
RayStart, RayEnd, RayTargetID, new LLQuaternion(0, 0, 0, 1),
|
||||||
BypassRayCast, bRayEndIsIntersection, true, group.GroupScale(), false);
|
BypassRayCast, bRayEndIsIntersection, true, group.GroupScale(), false);
|
||||||
group.AbsolutePosition = pos;
|
group.AbsolutePosition = pos;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1280,7 +1280,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
SceneObjectPart rootPart = group.GetChildPart(group.UUID);
|
SceneObjectPart rootPart = group.GetChildPart(group.UUID);
|
||||||
|
|
||||||
// Since renaming the item in the inventory does not affect the name stored
|
// Since renaming the item in the inventory does not affect the name stored
|
||||||
// in the serialization, transfer the correct name from the inventory to the
|
// in the serialization, transfer the correct name from the inventory to the
|
||||||
// object itself before we rez.
|
// object itself before we rez.
|
||||||
|
@ -1301,22 +1301,22 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
part.ChangeInventoryOwner(item.Owner);
|
part.ChangeInventoryOwner(item.Owner);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rootPart.TrimPermissions();
|
rootPart.TrimPermissions();
|
||||||
|
|
||||||
if (!attachment)
|
if (!attachment)
|
||||||
{
|
{
|
||||||
if (group.RootPart.Shape.PCode == (byte) PCode.Prim)
|
if (group.RootPart.Shape.PCode == (byte)PCode.Prim)
|
||||||
{
|
{
|
||||||
group.ClearPartAttachmentData();
|
group.ClearPartAttachmentData();
|
||||||
}
|
}
|
||||||
group.ApplyPhysics(m_physicalPrim);
|
group.ApplyPhysics(m_physicalPrim);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
group.StartScripts();
|
group.StartScripts();
|
||||||
|
|
||||||
|
|
||||||
if (!attachment)
|
if (!attachment)
|
||||||
rootPart.ScheduleFullUpdate();
|
rootPart.ScheduleFullUpdate();
|
||||||
|
|
||||||
|
@ -1327,5 +1327,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,12 +78,11 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
foreach (EntityBase ent in EntitieList)
|
foreach (EntityBase ent in EntitieList)
|
||||||
{
|
{
|
||||||
if (ent is SceneObjectGroup)
|
if (ent is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
if ((ent).LocalId == primLocalID)
|
if (((SceneObjectGroup) ent).LocalId == primLocalID)
|
||||||
{
|
{
|
||||||
// A prim is only tainted if it's allowed to be edited by the person clicking it.
|
// A prim is only tainted if it's allowed to be edited by the person clicking it.
|
||||||
if (m_permissionManager.CanEditObjectPosition(remoteClient.AgentId, (ent).UUID) ||
|
if (m_permissionManager.CanEditObjectPosition(remoteClient.AgentId, ((SceneObjectGroup)ent).UUID) || m_permissionManager.CanEditObject(remoteClient.AgentId, ((SceneObjectGroup)ent).UUID))
|
||||||
m_permissionManager.CanEditObject(remoteClient.AgentId, (ent).UUID))
|
|
||||||
{
|
{
|
||||||
((SceneObjectGroup) ent).GetProperties(remoteClient);
|
((SceneObjectGroup) ent).GetProperties(remoteClient);
|
||||||
((SceneObjectGroup) ent).IsSelected = true;
|
((SceneObjectGroup) ent).IsSelected = true;
|
||||||
|
@ -108,10 +107,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
if (ent is SceneObjectGroup)
|
if (ent is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
if ((ent).LocalId == primLocalID)
|
if (((SceneObjectGroup) ent).LocalId == primLocalID)
|
||||||
{
|
{
|
||||||
if (m_permissionManager.CanEditObjectPosition(remoteClient.AgentId, (ent).UUID) ||
|
if (m_permissionManager.CanEditObjectPosition(remoteClient.AgentId, ((SceneObjectGroup)ent).UUID) || m_permissionManager.CanEditObject(remoteClient.AgentId, ((SceneObjectGroup)ent).UUID))
|
||||||
m_permissionManager.CanEditObject(remoteClient.AgentId, (ent).UUID))
|
|
||||||
{
|
{
|
||||||
((SceneObjectGroup) ent).IsSelected = false;
|
((SceneObjectGroup) ent).IsSelected = false;
|
||||||
LandChannel.setPrimsTainted();
|
LandChannel.setPrimsTainted();
|
||||||
|
@ -131,20 +129,21 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void ProcessParcelBuy(LLUUID agentId, LLUUID groupId, bool final, bool groupOwned,
|
public virtual void ProcessParcelBuy(LLUUID agentId, LLUUID groupId, bool final, bool groupOwned,
|
||||||
bool removeContribution, int parcelLocalID, int parcelArea, int parcelPrice, bool authenticated)
|
bool removeContribution, int parcelLocalID, int parcelArea, int parcelPrice, bool authenticated)
|
||||||
{
|
{
|
||||||
EventManager.LandBuyArgs args = new EventManager.LandBuyArgs(
|
EventManager.LandBuyArgs args = new EventManager.LandBuyArgs(
|
||||||
agentId, groupId, final, groupOwned, removeContribution, parcelLocalID, parcelArea, parcelPrice, authenticated);
|
agentId, groupId, final, groupOwned, removeContribution, parcelLocalID, parcelArea, parcelPrice, authenticated);
|
||||||
|
|
||||||
// First, allow all validators a stab at it
|
// First, allow all validators a stab at it
|
||||||
m_eventManager.TriggerValidateLandBuy(this, args);
|
m_eventManager.TriggerValidateLandBuy(this, args);
|
||||||
|
|
||||||
// Then, check validation and transfer
|
// Then, check validation and transfer
|
||||||
m_eventManager.TriggerLandBuy(this, args);
|
m_eventManager.TriggerLandBuy(this, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void ProcessObjectGrab(uint localID, LLVector3 offsetPos, IClientAPI remoteClient)
|
public virtual void ProcessObjectGrab(uint localID, LLVector3 offsetPos, IClientAPI remoteClient)
|
||||||
{
|
{
|
||||||
|
|
||||||
List<EntityBase> EntitieList = GetEntities();
|
List<EntityBase> EntitieList = GetEntities();
|
||||||
|
|
||||||
foreach (EntityBase ent in EntitieList)
|
foreach (EntityBase ent in EntitieList)
|
||||||
|
@ -179,6 +178,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
public virtual void ProcessObjectDeGrab(uint localID, IClientAPI remoteClient)
|
public virtual void ProcessObjectDeGrab(uint localID, IClientAPI remoteClient)
|
||||||
{
|
{
|
||||||
|
|
||||||
List<EntityBase> EntitieList = GetEntities();
|
List<EntityBase> EntitieList = GetEntities();
|
||||||
|
|
||||||
foreach (EntityBase ent in EntitieList)
|
foreach (EntityBase ent in EntitieList)
|
||||||
|
@ -190,7 +190,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
// Is this prim part of the group
|
// Is this prim part of the group
|
||||||
if (obj.HasChildPrim(localID))
|
if (obj.HasChildPrim(localID))
|
||||||
{
|
{
|
||||||
SceneObjectPart part = obj.GetChildPart(localID);
|
SceneObjectPart part=obj.GetChildPart(localID);
|
||||||
if (part != null)
|
if (part != null)
|
||||||
{
|
{
|
||||||
// If the touched prim handles touches, deliver it
|
// If the touched prim handles touches, deliver it
|
||||||
|
@ -233,8 +233,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
LLUUID translatedIDtem = item.AvatarID;
|
LLUUID translatedIDtem = item.AvatarID;
|
||||||
searchData[i] = new AvatarPickerReplyPacket.DataBlock();
|
searchData[i] = new AvatarPickerReplyPacket.DataBlock();
|
||||||
searchData[i].AvatarID = translatedIDtem;
|
searchData[i].AvatarID = translatedIDtem;
|
||||||
searchData[i].FirstName = Helpers.StringToField(item.firstName);
|
searchData[i].FirstName = Helpers.StringToField((string) item.firstName);
|
||||||
searchData[i].LastName = Helpers.StringToField(item.lastName);
|
searchData[i].LastName = Helpers.StringToField((string) item.lastName);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
if (AvatarResponses.Count == 0)
|
if (AvatarResponses.Count == 0)
|
||||||
|
@ -245,4 +245,4 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
client.SendAvatarPickerReply(replyPacket);
|
client.SendAvatarPickerReply(replyPacket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -40,11 +40,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// XXX These two methods are very temporary
|
|
||||||
/// </summary>
|
|
||||||
protected Dictionary<LLUUID, string> capsPaths = new Dictionary<LLUUID, string>();
|
|
||||||
|
|
||||||
#region Events
|
#region Events
|
||||||
|
|
||||||
public event restart OnRestart;
|
public event restart OnRestart;
|
||||||
|
@ -55,38 +50,41 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
private readonly ClientManager m_clientManager = new ClientManager();
|
private readonly ClientManager m_clientManager = new ClientManager();
|
||||||
|
|
||||||
|
public ClientManager ClientManager
|
||||||
|
{
|
||||||
|
get { return m_clientManager; }
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ulong m_regionHandle;
|
||||||
|
protected string m_regionName;
|
||||||
|
protected RegionInfo m_regInfo;
|
||||||
|
|
||||||
//public TerrainEngine Terrain;
|
//public TerrainEngine Terrain;
|
||||||
public ITerrainChannel Heightmap;
|
public ITerrainChannel Heightmap;
|
||||||
|
|
||||||
public ILandChannel LandChannel;
|
public ILandChannel LandChannel;
|
||||||
private AssetCache m_assetCache;
|
|
||||||
|
|
||||||
|
|
||||||
protected string m_datastore;
|
|
||||||
protected EventManager m_eventManager;
|
protected EventManager m_eventManager;
|
||||||
|
|
||||||
private uint m_nextLocalId = 8880000;
|
|
||||||
protected RegionInfo m_regInfo;
|
|
||||||
protected ulong m_regionHandle;
|
|
||||||
protected string m_regionName;
|
|
||||||
|
|
||||||
protected RegionStatus m_regStatus;
|
|
||||||
|
|
||||||
public EventManager EventManager
|
public EventManager EventManager
|
||||||
{
|
{
|
||||||
get { return m_eventManager; }
|
get { return m_eventManager; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected string m_datastore;
|
||||||
|
|
||||||
|
private uint m_nextLocalId = 8880000;
|
||||||
|
|
||||||
|
private AssetCache m_assetCache;
|
||||||
|
|
||||||
public AssetCache AssetCache
|
public AssetCache AssetCache
|
||||||
{
|
{
|
||||||
get { return m_assetCache; }
|
get { return m_assetCache; }
|
||||||
set { m_assetCache = value; }
|
set { m_assetCache = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public ClientManager ClientManager
|
protected RegionStatus m_regStatus;
|
||||||
{
|
|
||||||
get { return m_clientManager; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public RegionStatus Region_Status
|
public RegionStatus Region_Status
|
||||||
{
|
{
|
||||||
|
@ -143,8 +141,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region IScene Members
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -159,18 +155,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
get { return m_nextLocalId++; }
|
get { return m_nextLocalId++; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GetCapsPath(LLUUID agentId)
|
|
||||||
{
|
|
||||||
if (capsPaths.ContainsKey(agentId))
|
|
||||||
{
|
|
||||||
return capsPaths[agentId];
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region admin stuff
|
#region admin stuff
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -189,7 +173,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract bool OtherRegionUp(RegionInfo thisRegion);
|
public abstract bool OtherRegionUp(RegionInfo thisRegion);
|
||||||
|
|
||||||
public virtual string GetSimulatorVersion()
|
public virtual string GetSimulatorVersion()
|
||||||
|
@ -212,10 +195,24 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.Error("[SCENE]: SceneBase.cs: Close() - Failed with exception " + e);
|
m_log.Error("[SCENE]: SceneBase.cs: Close() - Failed with exception " + e.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// XXX These two methods are very temporary
|
||||||
|
/// </summary>
|
||||||
|
protected Dictionary<LLUUID, string> capsPaths = new Dictionary<LLUUID, string>();
|
||||||
|
public string GetCapsPath(LLUUID agentId)
|
||||||
|
{
|
||||||
|
if (capsPaths.ContainsKey(agentId))
|
||||||
|
{
|
||||||
|
return capsPaths[agentId];
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,47 +43,13 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
public class SceneCommunicationService //one instance per region
|
public class SceneCommunicationService //one instance per region
|
||||||
{
|
{
|
||||||
#region Delegates
|
|
||||||
|
|
||||||
public delegate void InformNeighbourThatRegionUpDelegate(RegionInfo region, ulong regionhandle);
|
|
||||||
|
|
||||||
public delegate void SendChildAgentDataUpdateDelegate(ChildAgentDataUpdate cAgentData, ScenePresence presence);
|
|
||||||
|
|
||||||
public delegate void SendCloseChildAgentDelegate(LLUUID agentID, List<ulong> regionlst);
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
public string _debugRegionName = String.Empty;
|
|
||||||
private AgentCrossing handlerAvatarCrossingIntoRegion; // OnAvatarCrossingIntoRegion;
|
|
||||||
private ChildAgentUpdate handlerChildAgentUpdate; // OnChildAgentUpdate;
|
|
||||||
private CloseAgentConnection handlerCloseAgentConnection; // OnCloseAgentConnection;
|
|
||||||
private ExpectPrimDelegate handlerExpectPrim; // OnExpectPrim;
|
|
||||||
private ExpectUserDelegate handlerExpectUser; // OnExpectUser;
|
|
||||||
private PrimCrossing handlerPrimCrossingIntoRegion; // OnPrimCrossingIntoRegion;
|
|
||||||
private RegionUp handlerRegionUp; // OnRegionUp;
|
|
||||||
private RemoveKnownRegionsFromAvatarList handlerRemoveKnownRegionFromAvatar; // OnRemoveKnownRegionFromAvatar;
|
|
||||||
|
|
||||||
public KillObjectDelegate KillObject;
|
|
||||||
|
|
||||||
protected CommunicationsManager m_commsProvider;
|
protected CommunicationsManager m_commsProvider;
|
||||||
protected RegionInfo m_regionInfo;
|
protected RegionInfo m_regionInfo;
|
||||||
|
|
||||||
protected RegionCommsListener regionCommsHost;
|
protected RegionCommsListener regionCommsHost;
|
||||||
|
|
||||||
public SceneCommunicationService(CommunicationsManager commsMan)
|
|
||||||
{
|
|
||||||
m_commsProvider = commsMan;
|
|
||||||
m_commsProvider.GridService.gdebugRegionName = _debugRegionName;
|
|
||||||
m_commsProvider.InterRegion.rdebugRegionName = _debugRegionName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string debugRegionName
|
|
||||||
{
|
|
||||||
get { return _debugRegionName; }
|
|
||||||
set { _debugRegionName = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public event AgentCrossing OnAvatarCrossingIntoRegion;
|
public event AgentCrossing OnAvatarCrossingIntoRegion;
|
||||||
public event ExpectUserDelegate OnExpectUser;
|
public event ExpectUserDelegate OnExpectUser;
|
||||||
public event ExpectPrimDelegate OnExpectPrim;
|
public event ExpectPrimDelegate OnExpectPrim;
|
||||||
|
@ -93,6 +59,31 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
public event ChildAgentUpdate OnChildAgentUpdate;
|
public event ChildAgentUpdate OnChildAgentUpdate;
|
||||||
public event RemoveKnownRegionsFromAvatarList OnRemoveKnownRegionFromAvatar;
|
public event RemoveKnownRegionsFromAvatarList OnRemoveKnownRegionFromAvatar;
|
||||||
|
|
||||||
|
private AgentCrossing handlerAvatarCrossingIntoRegion = null; // OnAvatarCrossingIntoRegion;
|
||||||
|
private ExpectUserDelegate handlerExpectUser = null; // OnExpectUser;
|
||||||
|
private ExpectPrimDelegate handlerExpectPrim = null; // OnExpectPrim;
|
||||||
|
private CloseAgentConnection handlerCloseAgentConnection = null; // OnCloseAgentConnection;
|
||||||
|
private PrimCrossing handlerPrimCrossingIntoRegion = null; // OnPrimCrossingIntoRegion;
|
||||||
|
private RegionUp handlerRegionUp = null; // OnRegionUp;
|
||||||
|
private ChildAgentUpdate handlerChildAgentUpdate = null; // OnChildAgentUpdate;
|
||||||
|
private RemoveKnownRegionsFromAvatarList handlerRemoveKnownRegionFromAvatar = null; // OnRemoveKnownRegionFromAvatar;
|
||||||
|
|
||||||
|
public KillObjectDelegate KillObject;
|
||||||
|
public string _debugRegionName = String.Empty;
|
||||||
|
|
||||||
|
public string debugRegionName
|
||||||
|
{
|
||||||
|
get { return _debugRegionName; }
|
||||||
|
set { _debugRegionName = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public SceneCommunicationService(CommunicationsManager commsMan)
|
||||||
|
{
|
||||||
|
m_commsProvider = commsMan;
|
||||||
|
m_commsProvider.GridService.gdebugRegionName = _debugRegionName;
|
||||||
|
m_commsProvider.InterRegion.rdebugRegionName = _debugRegionName;
|
||||||
|
}
|
||||||
|
|
||||||
public void RegisterRegion(RegionInfo regionInfos)
|
public void RegisterRegion(RegionInfo regionInfos)
|
||||||
{
|
{
|
||||||
m_regionInfo = regionInfos;
|
m_regionInfo = regionInfos;
|
||||||
|
@ -108,7 +99,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
regionCommsHost.OnAvatarCrossingIntoRegion += AgentCrossing;
|
regionCommsHost.OnAvatarCrossingIntoRegion += AgentCrossing;
|
||||||
regionCommsHost.OnCloseAgentConnection += CloseConnection;
|
regionCommsHost.OnCloseAgentConnection += CloseConnection;
|
||||||
regionCommsHost.OnRegionUp += newRegionUp;
|
regionCommsHost.OnRegionUp += newRegionUp;
|
||||||
regionCommsHost.OnChildAgentUpdate += ChildAgentUpdate;
|
regionCommsHost.OnChildAgentUpdate += ChildAgentUpdate;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -131,6 +122,218 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region CommsManager Event handlers
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="regionHandle"></param>
|
||||||
|
/// <param name="agent"></param>
|
||||||
|
///
|
||||||
|
protected void NewUserConnection(ulong regionHandle, AgentCircuitData agent)
|
||||||
|
{
|
||||||
|
handlerExpectUser = OnExpectUser;
|
||||||
|
if (handlerExpectUser != null)
|
||||||
|
{
|
||||||
|
//m_log.Info("[INTER]: " + debugRegionName + ": SceneCommunicationService: OnExpectUser Fired for User:" + agent.firstname + " " + agent.lastname);
|
||||||
|
handlerExpectUser(regionHandle, agent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected bool newRegionUp(RegionInfo region)
|
||||||
|
{
|
||||||
|
handlerRegionUp = OnRegionUp;
|
||||||
|
if (handlerRegionUp != null)
|
||||||
|
{
|
||||||
|
//m_log.Info("[INTER]: " + debugRegionName + ": SceneCommunicationService: newRegionUp Fired for User:" + region.RegionName);
|
||||||
|
handlerRegionUp(region);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected bool ChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData)
|
||||||
|
{
|
||||||
|
handlerChildAgentUpdate = OnChildAgentUpdate;
|
||||||
|
if (handlerChildAgentUpdate != null)
|
||||||
|
handlerChildAgentUpdate(regionHandle, cAgentData);
|
||||||
|
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void AgentCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isFlying)
|
||||||
|
{
|
||||||
|
handlerAvatarCrossingIntoRegion = OnAvatarCrossingIntoRegion;
|
||||||
|
if (handlerAvatarCrossingIntoRegion != null)
|
||||||
|
{
|
||||||
|
handlerAvatarCrossingIntoRegion(regionHandle, agentID, position, isFlying);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected bool IncomingPrimCrossing(ulong regionHandle, LLUUID primID, String objXMLData, int XMLMethod)
|
||||||
|
{
|
||||||
|
handlerExpectPrim = OnExpectPrim;
|
||||||
|
if (handlerExpectPrim != null)
|
||||||
|
{
|
||||||
|
return handlerExpectPrim(regionHandle, primID, objXMLData, XMLMethod);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void PrimCrossing(ulong regionHandle, LLUUID primID, LLVector3 position, bool isPhysical)
|
||||||
|
{
|
||||||
|
handlerPrimCrossingIntoRegion = OnPrimCrossingIntoRegion;
|
||||||
|
if (handlerPrimCrossingIntoRegion != null)
|
||||||
|
{
|
||||||
|
handlerPrimCrossingIntoRegion(regionHandle, primID, position, isPhysical);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected bool CloseConnection(ulong regionHandle, LLUUID agentID)
|
||||||
|
{
|
||||||
|
m_log.Info("[INTERREGION]: Incoming Agent Close Request for agent: " + agentID.ToString());
|
||||||
|
handlerCloseAgentConnection = OnCloseAgentConnection;
|
||||||
|
if (handlerCloseAgentConnection != null)
|
||||||
|
{
|
||||||
|
return handlerCloseAgentConnection(regionHandle, agentID);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Inform Client of Neighbours
|
||||||
|
|
||||||
|
private delegate void InformClientOfNeighbourDelegate(
|
||||||
|
ScenePresence avatar, AgentCircuitData a, ulong regionHandle, IPEndPoint endPoint);
|
||||||
|
|
||||||
|
private void InformClientOfNeighbourCompleted(IAsyncResult iar)
|
||||||
|
{
|
||||||
|
InformClientOfNeighbourDelegate icon = (InformClientOfNeighbourDelegate) iar.AsyncState;
|
||||||
|
icon.EndInvoke(iar);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Async compnent for informing client of which neighbours exists
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// This needs to run asynchronesously, as a network timeout may block the thread for a long while
|
||||||
|
/// </remarks>
|
||||||
|
/// <param name="remoteClient"></param>
|
||||||
|
/// <param name="a"></param>
|
||||||
|
/// <param name="regionHandle"></param>
|
||||||
|
/// <param name="endPoint"></param>
|
||||||
|
private void InformClientOfNeighbourAsync(ScenePresence avatar, AgentCircuitData a, ulong regionHandle,
|
||||||
|
IPEndPoint endPoint)
|
||||||
|
{
|
||||||
|
m_log.Info("[INTERGRID]: Starting to inform client about neighbours");
|
||||||
|
bool regionAccepted = m_commsProvider.InterRegion.InformRegionOfChildAgent(regionHandle, a);
|
||||||
|
|
||||||
|
if (regionAccepted)
|
||||||
|
{
|
||||||
|
avatar.ControllingClient.InformClientOfNeighbour(regionHandle, endPoint);
|
||||||
|
avatar.AddNeighbourRegion(regionHandle);
|
||||||
|
m_log.Info("[INTERGRID]: Completed inform client about neighbours");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RequestNeighbors(RegionInfo region)
|
||||||
|
{
|
||||||
|
List<SimpleRegionInfo> neighbours =
|
||||||
|
m_commsProvider.GridService.RequestNeighbours(m_regionInfo.RegionLocX, m_regionInfo.RegionLocY);
|
||||||
|
//IPEndPoint blah = new IPEndPoint();
|
||||||
|
|
||||||
|
//blah.Address = region.RemotingAddress;
|
||||||
|
//blah.Port = region.RemotingPort;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// This informs all neighboring regions about agent "avatar".
|
||||||
|
/// Calls an asynchronous method to do so.. so it doesn't lag the sim.
|
||||||
|
/// </summary>
|
||||||
|
public void EnableNeighbourChildAgents(ScenePresence avatar, List<RegionInfo> lstneighbours)
|
||||||
|
{
|
||||||
|
List<SimpleRegionInfo> neighbours = new List<SimpleRegionInfo>();
|
||||||
|
|
||||||
|
//m_commsProvider.GridService.RequestNeighbours(m_regionInfo.RegionLocX, m_regionInfo.RegionLocY);
|
||||||
|
for (int i = 0; i < lstneighbours.Count; i++)
|
||||||
|
{
|
||||||
|
// We don't want to keep sending to regions that consistently fail on comms.
|
||||||
|
if (!(lstneighbours[i].commFailTF))
|
||||||
|
{
|
||||||
|
neighbours.Add(new SimpleRegionInfo(lstneighbours[i]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// we're going to be using the above code once neighbour cache is correct. Currently it doesn't appear to be
|
||||||
|
// So we're temporarily going back to the old method of grabbing it from the Grid Server Every time :/
|
||||||
|
neighbours =
|
||||||
|
m_commsProvider.GridService.RequestNeighbours(m_regionInfo.RegionLocX, m_regionInfo.RegionLocY);
|
||||||
|
|
||||||
|
if (neighbours != null)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < neighbours.Count; i++)
|
||||||
|
{
|
||||||
|
AgentCircuitData agent = avatar.ControllingClient.RequestClientInfo();
|
||||||
|
agent.BaseFolder = LLUUID.Zero;
|
||||||
|
agent.InventoryFolder = LLUUID.Zero;
|
||||||
|
agent.startpos = new LLVector3(128, 128, 70);
|
||||||
|
agent.child = true;
|
||||||
|
|
||||||
|
InformClientOfNeighbourDelegate d = InformClientOfNeighbourAsync;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
d.BeginInvoke(avatar, agent, neighbours[i].RegionHandle, neighbours[i].ExternalEndPoint,
|
||||||
|
InformClientOfNeighbourCompleted,
|
||||||
|
d);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
m_log.ErrorFormat(
|
||||||
|
"[REGIONINFO]: Could not resolve external hostname {0} for region {1} ({2}, {3}). {4}",
|
||||||
|
neighbours[i].ExternalHostName,
|
||||||
|
neighbours[i].RegionHandle,
|
||||||
|
neighbours[i].RegionLocX,
|
||||||
|
neighbours[i].RegionLocY,
|
||||||
|
e);
|
||||||
|
|
||||||
|
// FIXME: Okay, even though we've failed, we're still going to throw the exception on,
|
||||||
|
// since I don't know what will happen if we just let the client continue
|
||||||
|
|
||||||
|
// XXX: Well, decided to swallow the exception instead for now. Let us see how that goes.
|
||||||
|
// throw e;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// This informs a single neighboring region about agent "avatar".
|
||||||
|
/// Calls an asynchronous method to do so.. so it doesn't lag the sim.
|
||||||
|
/// </summary>
|
||||||
|
public void InformNeighborChildAgent(ScenePresence avatar, RegionInfo region, List<RegionInfo> neighbours)
|
||||||
|
{
|
||||||
|
AgentCircuitData agent = avatar.ControllingClient.RequestClientInfo();
|
||||||
|
agent.BaseFolder = LLUUID.Zero;
|
||||||
|
agent.InventoryFolder = LLUUID.Zero;
|
||||||
|
agent.startpos = new LLVector3(128, 128, 70);
|
||||||
|
agent.child = true;
|
||||||
|
|
||||||
|
InformClientOfNeighbourDelegate d = InformClientOfNeighbourAsync;
|
||||||
|
d.BeginInvoke(avatar, agent, region.RegionHandle, region.ExternalEndPoint,
|
||||||
|
InformClientOfNeighbourCompleted,
|
||||||
|
d);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
public delegate void InformNeighbourThatRegionUpDelegate(RegionInfo region, ulong regionhandle);
|
||||||
|
|
||||||
private void InformNeighborsThatRegionisUpCompleted(IAsyncResult iar)
|
private void InformNeighborsThatRegionisUpCompleted(IAsyncResult iar)
|
||||||
{
|
{
|
||||||
InformNeighbourThatRegionUpDelegate icon = (InformNeighbourThatRegionUpDelegate) iar.AsyncState;
|
InformNeighbourThatRegionUpDelegate icon = (InformNeighbourThatRegionUpDelegate) iar.AsyncState;
|
||||||
|
@ -187,6 +390,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
//bool val = m_commsProvider.InterRegion.RegionUp(new SearializableRegionInfo(region));
|
//bool val = m_commsProvider.InterRegion.RegionUp(new SearializableRegionInfo(region));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public delegate void SendChildAgentDataUpdateDelegate(ChildAgentDataUpdate cAgentData, ScenePresence presence);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// This informs all neighboring regions about the settings of it's child agent.
|
/// This informs all neighboring regions about the settings of it's child agent.
|
||||||
/// Calls an asynchronous method to do so.. so it doesn't lag the sim.
|
/// Calls an asynchronous method to do so.. so it doesn't lag the sim.
|
||||||
|
@ -217,6 +422,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
// We're ignoring a collection was modified error because this data gets old and outdated fast.
|
// We're ignoring a collection was modified error because this data gets old and outdated fast.
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SendChildAgentDataUpdateCompleted(IAsyncResult iar)
|
private void SendChildAgentDataUpdateCompleted(IAsyncResult iar)
|
||||||
|
@ -229,17 +435,20 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
// This assumes that we know what our neighbors are.
|
// This assumes that we know what our neighbors are.
|
||||||
SendChildAgentDataUpdateDelegate d = SendChildAgentDataUpdateAsync;
|
SendChildAgentDataUpdateDelegate d = SendChildAgentDataUpdateAsync;
|
||||||
d.BeginInvoke(cAgentData, presence,
|
d.BeginInvoke(cAgentData,presence,
|
||||||
SendChildAgentDataUpdateCompleted,
|
SendChildAgentDataUpdateCompleted,
|
||||||
d);
|
d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public delegate void SendCloseChildAgentDelegate( LLUUID agentID, List<ulong> regionlst);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// This Closes child agents on neighboring regions
|
/// This Closes child agents on neighboring regions
|
||||||
/// Calls an asynchronous method to do so.. so it doesn't lag the sim.
|
/// Calls an asynchronous method to do so.. so it doesn't lag the sim.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void SendCloseChildAgentAsync(LLUUID agentID, List<ulong> regionlst)
|
private void SendCloseChildAgentAsync(LLUUID agentID, List<ulong> regionlst)
|
||||||
{
|
{
|
||||||
|
|
||||||
foreach (ulong regionHandle in regionlst)
|
foreach (ulong regionHandle in regionlst)
|
||||||
{
|
{
|
||||||
bool regionAccepted = m_commsProvider.InterRegion.TellRegionToCloseChildConnection(regionHandle, agentID);
|
bool regionAccepted = m_commsProvider.InterRegion.TellRegionToCloseChildConnection(regionHandle, agentID);
|
||||||
|
@ -247,11 +456,14 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
if (regionAccepted)
|
if (regionAccepted)
|
||||||
{
|
{
|
||||||
m_log.Info("[INTERGRID]: Completed sending agent Close agent Request to neighbor");
|
m_log.Info("[INTERGRID]: Completed sending agent Close agent Request to neighbor");
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.Info("[INTERGRID]: Failed sending agent Close agent Request to neighbor");
|
m_log.Info("[INTERGRID]: Failed sending agent Close agent Request to neighbor");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
// We remove the list of known regions from the agent's known region list through an event
|
// We remove the list of known regions from the agent's known region list through an event
|
||||||
// to scene, because, if an agent logged of, it's likely that there will be no scene presence
|
// to scene, because, if an agent logged of, it's likely that there will be no scene presence
|
||||||
|
@ -265,7 +477,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
private void SendCloseChildAgentCompleted(IAsyncResult iar)
|
private void SendCloseChildAgentCompleted(IAsyncResult iar)
|
||||||
{
|
{
|
||||||
SendCloseChildAgentDelegate icon = (SendCloseChildAgentDelegate) iar.AsyncState;
|
SendCloseChildAgentDelegate icon = (SendCloseChildAgentDelegate)iar.AsyncState;
|
||||||
icon.EndInvoke(iar);
|
icon.EndInvoke(iar);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -344,28 +556,28 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
// assume local regions are always up
|
// assume local regions are always up
|
||||||
destRegionUp = true;
|
destRegionUp = true;
|
||||||
}
|
}
|
||||||
if (destRegionUp)
|
if(destRegionUp)
|
||||||
{
|
{
|
||||||
avatar.Close();
|
avatar.Close();
|
||||||
|
|
||||||
// Compared to ScenePresence.CrossToNewRegion(), there's no obvious code to handle a teleport
|
// Compared to ScenePresence.CrossToNewRegion(), there's no obvious code to handle a teleport
|
||||||
// failure at this point (unlike a border crossing failure). So perhaps this can never fail
|
// failure at this point (unlike a border crossing failure). So perhaps this can never fail
|
||||||
// once we reach here...
|
// once we reach here...
|
||||||
avatar.Scene.RemoveCapsHandler(avatar.UUID);
|
avatar.Scene.RemoveCapsHandler(avatar.UUID);
|
||||||
|
|
||||||
m_commsProvider.InterRegion.InformRegionOfChildAgent(regionHandle, agent);
|
m_commsProvider.InterRegion.InformRegionOfChildAgent(regionHandle, agent);
|
||||||
m_commsProvider.InterRegion.ExpectAvatarCrossing(regionHandle, avatar.ControllingClient.AgentId,
|
m_commsProvider.InterRegion.ExpectAvatarCrossing(regionHandle, avatar.ControllingClient.AgentId,
|
||||||
position, false);
|
position, false);
|
||||||
AgentCircuitData circuitdata = avatar.ControllingClient.RequestClientInfo();
|
AgentCircuitData circuitdata = avatar.ControllingClient.RequestClientInfo();
|
||||||
|
|
||||||
// TODO Should construct this behind a method
|
// TODO Should construct this behind a method
|
||||||
string capsPath =
|
string capsPath =
|
||||||
"http://" + reg.ExternalHostName + ":" + reg.HttpPort
|
"http://" + reg.ExternalHostName + ":" + reg.HttpPort
|
||||||
+ "/CAPS/" + circuitdata.CapsPath + "0000/";
|
+ "/CAPS/" + circuitdata.CapsPath + "0000/";
|
||||||
|
|
||||||
m_log.DebugFormat(
|
m_log.DebugFormat(
|
||||||
"[CAPS]: Sending new CAPS seed url {0} to client {1}", capsPath, avatar.UUID);
|
"[CAPS]: Sending new CAPS seed url {0} to client {1}", capsPath, avatar.UUID);
|
||||||
|
|
||||||
avatar.ControllingClient.SendRegionTeleport(regionHandle, 13, reg.ExternalEndPoint, 4, (1 << 4),
|
avatar.ControllingClient.SendRegionTeleport(regionHandle, 13, reg.ExternalEndPoint, 4, (1 << 4),
|
||||||
capsPath);
|
capsPath);
|
||||||
avatar.MakeChildAgent();
|
avatar.MakeChildAgent();
|
||||||
|
@ -375,13 +587,13 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
KillObject(avatar.LocalId);
|
KillObject(avatar.LocalId);
|
||||||
}
|
}
|
||||||
uint newRegionX = (uint) (regionHandle >> 40);
|
uint newRegionX = (uint)(regionHandle >> 40);
|
||||||
uint newRegionY = (((uint) (regionHandle)) >> 8);
|
uint newRegionY = (((uint)(regionHandle)) >> 8);
|
||||||
uint oldRegionX = (uint) (m_regionInfo.RegionHandle >> 40);
|
uint oldRegionX = (uint)(m_regionInfo.RegionHandle >> 40);
|
||||||
uint oldRegionY = (((uint) (m_regionInfo.RegionHandle)) >> 8);
|
uint oldRegionY = (((uint)(m_regionInfo.RegionHandle)) >> 8);
|
||||||
if (Util.fast_distance2d((int) (newRegionX - oldRegionX), (int) (newRegionY - oldRegionY)) > 3)
|
if (Util.fast_distance2d((int)(newRegionX - oldRegionX), (int)(newRegionY - oldRegionY)) > 3)
|
||||||
{
|
{
|
||||||
SendCloseChildAgentConnections(avatar.UUID, avatar.GetKnownRegionList());
|
SendCloseChildAgentConnections(avatar.UUID,avatar.GetKnownRegionList());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -416,7 +628,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
public void LogOffUser(LLUUID userid, LLUUID regionid, ulong regionhandle, float posx, float posy, float posz)
|
public void LogOffUser(LLUUID userid, LLUUID regionid, ulong regionhandle, float posx, float posy, float posz)
|
||||||
{
|
{
|
||||||
m_commsProvider.LogOffUser(userid, regionid, regionhandle, posx, posy, posz);
|
m_commsProvider.LogOffUser(userid, regionid, regionhandle, posx, posy, posz);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ClearUserAgent(LLUUID avatarID)
|
public void ClearUserAgent(LLUUID avatarID)
|
||||||
|
@ -444,7 +656,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
return m_commsProvider.GetUserFriendList(friendlistowner);
|
return m_commsProvider.GetUserFriendList(friendlistowner);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<MapBlockData> RequestNeighbourMapBlocks(int minX, int minY, int maxX, int maxY)
|
public List<MapBlockData> RequestNeighbourMapBlocks(int minX, int minY, int maxX, int maxY)
|
||||||
{
|
{
|
||||||
return m_commsProvider.GridService.RequestNeighbourMapBlocks(minX, minY, maxX, maxY);
|
return m_commsProvider.GridService.RequestNeighbourMapBlocks(minX, minY, maxX, maxY);
|
||||||
}
|
}
|
||||||
|
@ -453,213 +665,5 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
return m_commsProvider.GenerateAgentPickerRequestResponse(queryID, query);
|
return m_commsProvider.GenerateAgentPickerRequestResponse(queryID, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
#region CommsManager Event handlers
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="regionHandle"></param>
|
|
||||||
/// <param name="agent"></param>
|
|
||||||
///
|
|
||||||
protected void NewUserConnection(ulong regionHandle, AgentCircuitData agent)
|
|
||||||
{
|
|
||||||
handlerExpectUser = OnExpectUser;
|
|
||||||
if (handlerExpectUser != null)
|
|
||||||
{
|
|
||||||
//m_log.Info("[INTER]: " + debugRegionName + ": SceneCommunicationService: OnExpectUser Fired for User:" + agent.firstname + " " + agent.lastname);
|
|
||||||
handlerExpectUser(regionHandle, agent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected bool newRegionUp(RegionInfo region)
|
|
||||||
{
|
|
||||||
handlerRegionUp = OnRegionUp;
|
|
||||||
if (handlerRegionUp != null)
|
|
||||||
{
|
|
||||||
//m_log.Info("[INTER]: " + debugRegionName + ": SceneCommunicationService: newRegionUp Fired for User:" + region.RegionName);
|
|
||||||
handlerRegionUp(region);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected bool ChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData)
|
|
||||||
{
|
|
||||||
handlerChildAgentUpdate = OnChildAgentUpdate;
|
|
||||||
if (handlerChildAgentUpdate != null)
|
|
||||||
handlerChildAgentUpdate(regionHandle, cAgentData);
|
|
||||||
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void AgentCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position, bool isFlying)
|
|
||||||
{
|
|
||||||
handlerAvatarCrossingIntoRegion = OnAvatarCrossingIntoRegion;
|
|
||||||
if (handlerAvatarCrossingIntoRegion != null)
|
|
||||||
{
|
|
||||||
handlerAvatarCrossingIntoRegion(regionHandle, agentID, position, isFlying);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected bool IncomingPrimCrossing(ulong regionHandle, LLUUID primID, String objXMLData, int XMLMethod)
|
|
||||||
{
|
|
||||||
handlerExpectPrim = OnExpectPrim;
|
|
||||||
if (handlerExpectPrim != null)
|
|
||||||
{
|
|
||||||
return handlerExpectPrim(regionHandle, primID, objXMLData, XMLMethod);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void PrimCrossing(ulong regionHandle, LLUUID primID, LLVector3 position, bool isPhysical)
|
|
||||||
{
|
|
||||||
handlerPrimCrossingIntoRegion = OnPrimCrossingIntoRegion;
|
|
||||||
if (handlerPrimCrossingIntoRegion != null)
|
|
||||||
{
|
|
||||||
handlerPrimCrossingIntoRegion(regionHandle, primID, position, isPhysical);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected bool CloseConnection(ulong regionHandle, LLUUID agentID)
|
|
||||||
{
|
|
||||||
m_log.Info("[INTERREGION]: Incoming Agent Close Request for agent: " + agentID);
|
|
||||||
handlerCloseAgentConnection = OnCloseAgentConnection;
|
|
||||||
if (handlerCloseAgentConnection != null)
|
|
||||||
{
|
|
||||||
return handlerCloseAgentConnection(regionHandle, agentID);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Inform Client of Neighbours
|
|
||||||
|
|
||||||
private void InformClientOfNeighbourCompleted(IAsyncResult iar)
|
|
||||||
{
|
|
||||||
InformClientOfNeighbourDelegate icon = (InformClientOfNeighbourDelegate) iar.AsyncState;
|
|
||||||
icon.EndInvoke(iar);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Async compnent for informing client of which neighbours exists
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>
|
|
||||||
/// This needs to run asynchronesously, as a network timeout may block the thread for a long while
|
|
||||||
/// </remarks>
|
|
||||||
/// <param name="remoteClient"></param>
|
|
||||||
/// <param name="a"></param>
|
|
||||||
/// <param name="regionHandle"></param>
|
|
||||||
/// <param name="endPoint"></param>
|
|
||||||
private void InformClientOfNeighbourAsync(ScenePresence avatar, AgentCircuitData a, ulong regionHandle,
|
|
||||||
IPEndPoint endPoint)
|
|
||||||
{
|
|
||||||
m_log.Info("[INTERGRID]: Starting to inform client about neighbours");
|
|
||||||
bool regionAccepted = m_commsProvider.InterRegion.InformRegionOfChildAgent(regionHandle, a);
|
|
||||||
|
|
||||||
if (regionAccepted)
|
|
||||||
{
|
|
||||||
avatar.ControllingClient.InformClientOfNeighbour(regionHandle, endPoint);
|
|
||||||
avatar.AddNeighbourRegion(regionHandle);
|
|
||||||
m_log.Info("[INTERGRID]: Completed inform client about neighbours");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void RequestNeighbors(RegionInfo region)
|
|
||||||
{
|
|
||||||
List<SimpleRegionInfo> neighbours =
|
|
||||||
m_commsProvider.GridService.RequestNeighbours(m_regionInfo.RegionLocX, m_regionInfo.RegionLocY);
|
|
||||||
//IPEndPoint blah = new IPEndPoint();
|
|
||||||
|
|
||||||
//blah.Address = region.RemotingAddress;
|
|
||||||
//blah.Port = region.RemotingPort;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// This informs all neighboring regions about agent "avatar".
|
|
||||||
/// Calls an asynchronous method to do so.. so it doesn't lag the sim.
|
|
||||||
/// </summary>
|
|
||||||
public void EnableNeighbourChildAgents(ScenePresence avatar, List<RegionInfo> lstneighbours)
|
|
||||||
{
|
|
||||||
List<SimpleRegionInfo> neighbours = new List<SimpleRegionInfo>();
|
|
||||||
|
|
||||||
//m_commsProvider.GridService.RequestNeighbours(m_regionInfo.RegionLocX, m_regionInfo.RegionLocY);
|
|
||||||
for (int i = 0; i < lstneighbours.Count; i++)
|
|
||||||
{
|
|
||||||
// We don't want to keep sending to regions that consistently fail on comms.
|
|
||||||
if (!(lstneighbours[i].commFailTF))
|
|
||||||
{
|
|
||||||
neighbours.Add(new SimpleRegionInfo(lstneighbours[i]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// we're going to be using the above code once neighbour cache is correct. Currently it doesn't appear to be
|
|
||||||
// So we're temporarily going back to the old method of grabbing it from the Grid Server Every time :/
|
|
||||||
neighbours =
|
|
||||||
m_commsProvider.GridService.RequestNeighbours(m_regionInfo.RegionLocX, m_regionInfo.RegionLocY);
|
|
||||||
|
|
||||||
if (neighbours != null)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < neighbours.Count; i++)
|
|
||||||
{
|
|
||||||
AgentCircuitData agent = avatar.ControllingClient.RequestClientInfo();
|
|
||||||
agent.BaseFolder = LLUUID.Zero;
|
|
||||||
agent.InventoryFolder = LLUUID.Zero;
|
|
||||||
agent.startpos = new LLVector3(128, 128, 70);
|
|
||||||
agent.child = true;
|
|
||||||
|
|
||||||
InformClientOfNeighbourDelegate d = InformClientOfNeighbourAsync;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
d.BeginInvoke(avatar, agent, neighbours[i].RegionHandle, neighbours[i].ExternalEndPoint,
|
|
||||||
InformClientOfNeighbourCompleted,
|
|
||||||
d);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
m_log.ErrorFormat(
|
|
||||||
"[REGIONINFO]: Could not resolve external hostname {0} for region {1} ({2}, {3}). {4}",
|
|
||||||
neighbours[i].ExternalHostName,
|
|
||||||
neighbours[i].RegionHandle,
|
|
||||||
neighbours[i].RegionLocX,
|
|
||||||
neighbours[i].RegionLocY,
|
|
||||||
e);
|
|
||||||
|
|
||||||
// FIXME: Okay, even though we've failed, we're still going to throw the exception on,
|
|
||||||
// since I don't know what will happen if we just let the client continue
|
|
||||||
|
|
||||||
// XXX: Well, decided to swallow the exception instead for now. Let us see how that goes.
|
|
||||||
// throw e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// This informs a single neighboring region about agent "avatar".
|
|
||||||
/// Calls an asynchronous method to do so.. so it doesn't lag the sim.
|
|
||||||
/// </summary>
|
|
||||||
public void InformNeighborChildAgent(ScenePresence avatar, RegionInfo region, List<RegionInfo> neighbours)
|
|
||||||
{
|
|
||||||
AgentCircuitData agent = avatar.ControllingClient.RequestClientInfo();
|
|
||||||
agent.BaseFolder = LLUUID.Zero;
|
|
||||||
agent.InventoryFolder = LLUUID.Zero;
|
|
||||||
agent.startpos = new LLVector3(128, 128, 70);
|
|
||||||
agent.child = true;
|
|
||||||
|
|
||||||
InformClientOfNeighbourDelegate d = InformClientOfNeighbourAsync;
|
|
||||||
d.BeginInvoke(avatar, agent, region.RegionHandle, region.ExternalEndPoint,
|
|
||||||
InformClientOfNeighbourCompleted,
|
|
||||||
d);
|
|
||||||
}
|
|
||||||
|
|
||||||
private delegate void InformClientOfNeighbourDelegate(
|
|
||||||
ScenePresence avatar, AgentCircuitData a, ulong regionHandle, IPEndPoint endPoint);
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,186 +38,236 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class EventManager
|
public class EventManager
|
||||||
{
|
{
|
||||||
#region Delegates
|
|
||||||
|
|
||||||
public delegate void AvatarEnteringNewParcel(ScenePresence avatar, int localLandID, LLUUID regionID);
|
|
||||||
|
|
||||||
public delegate void ClientClosed(LLUUID clientID);
|
|
||||||
|
|
||||||
public delegate void ClientMovement(ScenePresence client);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// DeregisterCapsEvent is called by Scene when the caps
|
|
||||||
/// handler for an agent are removed.
|
|
||||||
/// </summary>
|
|
||||||
public delegate void DeregisterCapsEvent(LLUUID agentID, Caps caps);
|
|
||||||
|
|
||||||
public delegate void LandBuy(Object sender, LandBuyArgs e);
|
|
||||||
|
|
||||||
public delegate void LandObjectAdded(ILandObject newParcel);
|
|
||||||
|
|
||||||
public delegate void LandObjectRemoved(LLUUID globalID);
|
|
||||||
|
|
||||||
public delegate void MoneyTransferEvent(Object sender, MoneyTransferArgs e);
|
|
||||||
|
|
||||||
public delegate void NewGridInstantMessage(GridInstantMessage message);
|
|
||||||
|
|
||||||
public delegate void NewInventoryItemUploadComplete(LLUUID avatarID, LLUUID assetID, string name, int userlevel);
|
|
||||||
|
|
||||||
public delegate void NewRezScript(uint localID, LLUUID itemID, string script);
|
|
||||||
|
|
||||||
public delegate void ObjectDeGrabDelegate(uint localID, IClientAPI remoteClient);
|
|
||||||
|
|
||||||
public delegate void ObjectGrabDelegate(uint localID, LLVector3 offsetPos, IClientAPI remoteClient);
|
|
||||||
|
|
||||||
public delegate void OnBackupDelegate(IRegionDataStore datastore);
|
|
||||||
|
|
||||||
public delegate void OnFrameDelegate();
|
public delegate void OnFrameDelegate();
|
||||||
|
|
||||||
public delegate void OnNewClientDelegate(IClientAPI client);
|
|
||||||
|
|
||||||
public delegate void OnNewPresenceDelegate(ScenePresence presence);
|
|
||||||
|
|
||||||
public delegate void OnParcelPrimCountAddDelegate(SceneObjectGroup obj);
|
|
||||||
|
|
||||||
public delegate void OnParcelPrimCountUpdateDelegate();
|
|
||||||
|
|
||||||
public delegate void OnPermissionErrorDelegate(LLUUID user, string reason);
|
|
||||||
|
|
||||||
public delegate void OnPluginConsoleDelegate(string[] args);
|
|
||||||
|
|
||||||
public delegate void OnRemovePresenceDelegate(LLUUID agentId);
|
|
||||||
|
|
||||||
public delegate void OnShutdownDelegate();
|
|
||||||
|
|
||||||
public delegate void OnTerrainTickDelegate();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// RegisterCapsEvent is called by Scene after the Caps object
|
|
||||||
/// has been instantiated and before it is return to the
|
|
||||||
/// client and provides region modules to add their caps.
|
|
||||||
/// </summary>
|
|
||||||
public delegate void RegisterCapsEvent(LLUUID agentID, Caps caps);
|
|
||||||
|
|
||||||
public delegate void RemoveScript(uint localID, LLUUID itemID);
|
|
||||||
|
|
||||||
public delegate void SceneGroupGrabed(LLUUID groupID, LLVector3 offset, LLUUID userID);
|
|
||||||
|
|
||||||
public delegate bool SceneGroupMoved(LLUUID groupID, LLVector3 delta);
|
|
||||||
|
|
||||||
public delegate void ScriptAtTargetEvent(uint localID, uint handle, LLVector3 targetpos, LLVector3 atpos);
|
|
||||||
|
|
||||||
public delegate void ScriptChangedEvent(uint localID, uint change);
|
|
||||||
|
|
||||||
public delegate void ScriptNotAtTargetEvent(uint localID);
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
private AvatarEnteringNewParcel handlerAvatarEnteringNewParcel; //OnAvatarEnteringNewParcel;
|
|
||||||
private OnBackupDelegate handlerBackup; //OnBackup;
|
|
||||||
private ClientClosed handlerClientClosed; //OnClientClosed;
|
|
||||||
private ClientMovement handlerClientMovement; //OnClientMovement;
|
|
||||||
private DeregisterCapsEvent handlerDeregisterCaps; // OnDeregisterCaps;
|
|
||||||
private OnFrameDelegate handlerFrame; //OnFrame;
|
|
||||||
private NewGridInstantMessage handlerGridInstantMessageToFriends; //OnGridInstantMessageToFriendsModule;
|
|
||||||
private NewGridInstantMessage handlerGridInstantMessageToIM; //OnGridInstantMessageToIMModule;
|
|
||||||
private LandBuy handlerLandBuy;
|
|
||||||
private LandObjectAdded handlerLandObjectAdded; //OnLandObjectAdded;
|
|
||||||
private LandObjectRemoved handlerLandObjectRemoved; //OnLandObjectRemoved;
|
|
||||||
private OnNewPresenceDelegate handlerMakeChildAgent; //OnMakeChildAgent;
|
|
||||||
private MoneyTransferEvent handlerMoneyTransfer; //OnMoneyTransfer;
|
|
||||||
private OnNewClientDelegate handlerNewClient; //OnNewClient;
|
|
||||||
private NewInventoryItemUploadComplete handlerNewInventoryItemUpdateComplete;
|
|
||||||
private OnNewPresenceDelegate handlerNewPresence; //OnNewPresence;
|
|
||||||
private ObjectDeGrabDelegate handlerObjectDeGrab; //OnObjectDeGrab;
|
|
||||||
private ObjectGrabDelegate handlerObjectGrab; //OnObjectGrab;
|
|
||||||
private OnParcelPrimCountAddDelegate handlerParcelPrimCountAdd; //OnParcelPrimCountAdd;
|
|
||||||
private OnParcelPrimCountUpdateDelegate handlerParcelPrimCountUpdate; //OnParcelPrimCountUpdate;
|
|
||||||
private OnPermissionErrorDelegate handlerPermissionError; //OnPermissionError;
|
|
||||||
private OnPluginConsoleDelegate handlerPluginConsole; //OnPluginConsole;
|
|
||||||
private RegisterCapsEvent handlerRegisterCaps; // OnRegisterCaps;
|
|
||||||
private OnRemovePresenceDelegate handlerRemovePresence; //OnRemovePresence;
|
|
||||||
private RemoveScript handlerRemoveScript; //OnRemoveScript;
|
|
||||||
private NewRezScript handlerRezScript; //OnRezScript;
|
|
||||||
private SceneGroupGrabed handlerSceneGroupGrab; //OnSceneGroupGrab;
|
|
||||||
private SceneGroupMoved handlerSceneGroupMove; //OnSceneGroupMove;
|
|
||||||
private ScriptAtTargetEvent handlerScriptAtTargetEvent;
|
|
||||||
private ScriptChangedEvent handlerScriptChangedEvent; //OnScriptChangedEvent;
|
|
||||||
private ScriptNotAtTargetEvent handlerScriptNotAtTargetEvent;
|
|
||||||
private OnShutdownDelegate handlerShutdown; //OnShutdown;
|
|
||||||
private OnTerrainTickDelegate handlerTerrainTick; // OnTerainTick;
|
|
||||||
private LandBuy handlerValidateLandBuy;
|
|
||||||
|
|
||||||
public event OnFrameDelegate OnFrame;
|
public event OnFrameDelegate OnFrame;
|
||||||
|
|
||||||
|
public delegate void ClientMovement(ScenePresence client);
|
||||||
|
|
||||||
public event ClientMovement OnClientMovement;
|
public event ClientMovement OnClientMovement;
|
||||||
|
|
||||||
|
public delegate void OnTerrainTickDelegate();
|
||||||
|
|
||||||
public event OnTerrainTickDelegate OnTerrainTick;
|
public event OnTerrainTickDelegate OnTerrainTick;
|
||||||
|
|
||||||
|
public delegate void OnBackupDelegate(IRegionDataStore datastore);
|
||||||
|
|
||||||
public event OnBackupDelegate OnBackup;
|
public event OnBackupDelegate OnBackup;
|
||||||
|
|
||||||
|
public delegate void OnNewClientDelegate(IClientAPI client);
|
||||||
|
|
||||||
public event OnNewClientDelegate OnNewClient;
|
public event OnNewClientDelegate OnNewClient;
|
||||||
|
|
||||||
|
public delegate void OnNewPresenceDelegate(ScenePresence presence);
|
||||||
|
|
||||||
public event OnNewPresenceDelegate OnNewPresence;
|
public event OnNewPresenceDelegate OnNewPresence;
|
||||||
|
|
||||||
|
public delegate void OnRemovePresenceDelegate(LLUUID agentId);
|
||||||
|
|
||||||
public event OnRemovePresenceDelegate OnRemovePresence;
|
public event OnRemovePresenceDelegate OnRemovePresence;
|
||||||
|
|
||||||
|
public delegate void OnParcelPrimCountUpdateDelegate();
|
||||||
|
|
||||||
public event OnParcelPrimCountUpdateDelegate OnParcelPrimCountUpdate;
|
public event OnParcelPrimCountUpdateDelegate OnParcelPrimCountUpdate;
|
||||||
|
|
||||||
|
public delegate void OnParcelPrimCountAddDelegate(SceneObjectGroup obj);
|
||||||
|
|
||||||
public event OnParcelPrimCountAddDelegate OnParcelPrimCountAdd;
|
public event OnParcelPrimCountAddDelegate OnParcelPrimCountAdd;
|
||||||
|
|
||||||
|
public delegate void OnPluginConsoleDelegate(string[] args);
|
||||||
|
|
||||||
public event OnPluginConsoleDelegate OnPluginConsole;
|
public event OnPluginConsoleDelegate OnPluginConsole;
|
||||||
|
|
||||||
|
public delegate void OnShutdownDelegate();
|
||||||
|
|
||||||
public event OnShutdownDelegate OnShutdown;
|
public event OnShutdownDelegate OnShutdown;
|
||||||
|
|
||||||
|
public delegate void ObjectGrabDelegate(uint localID, LLVector3 offsetPos, IClientAPI remoteClient);
|
||||||
|
public delegate void ObjectDeGrabDelegate(uint localID, IClientAPI remoteClient);
|
||||||
|
|
||||||
|
public delegate void OnPermissionErrorDelegate(LLUUID user, string reason);
|
||||||
|
|
||||||
public event ObjectGrabDelegate OnObjectGrab;
|
public event ObjectGrabDelegate OnObjectGrab;
|
||||||
public event ObjectDeGrabDelegate OnObjectDeGrab;
|
public event ObjectDeGrabDelegate OnObjectDeGrab;
|
||||||
|
|
||||||
public event OnPermissionErrorDelegate OnPermissionError;
|
public event OnPermissionErrorDelegate OnPermissionError;
|
||||||
|
|
||||||
|
public delegate void NewRezScript(uint localID, LLUUID itemID, string script);
|
||||||
|
|
||||||
public event NewRezScript OnRezScript;
|
public event NewRezScript OnRezScript;
|
||||||
|
|
||||||
|
public delegate void RemoveScript(uint localID, LLUUID itemID);
|
||||||
|
|
||||||
public event RemoveScript OnRemoveScript;
|
public event RemoveScript OnRemoveScript;
|
||||||
|
|
||||||
|
public delegate bool SceneGroupMoved(LLUUID groupID, LLVector3 delta);
|
||||||
|
|
||||||
public event SceneGroupMoved OnSceneGroupMove;
|
public event SceneGroupMoved OnSceneGroupMove;
|
||||||
|
|
||||||
|
public delegate void SceneGroupGrabed(LLUUID groupID, LLVector3 offset, LLUUID userID);
|
||||||
|
|
||||||
public event SceneGroupGrabed OnSceneGroupGrab;
|
public event SceneGroupGrabed OnSceneGroupGrab;
|
||||||
|
|
||||||
|
public delegate void LandObjectAdded(ILandObject newParcel);
|
||||||
|
|
||||||
public event LandObjectAdded OnLandObjectAdded;
|
public event LandObjectAdded OnLandObjectAdded;
|
||||||
|
|
||||||
|
public delegate void LandObjectRemoved(LLUUID globalID);
|
||||||
|
|
||||||
public event LandObjectRemoved OnLandObjectRemoved;
|
public event LandObjectRemoved OnLandObjectRemoved;
|
||||||
|
|
||||||
|
public delegate void AvatarEnteringNewParcel(ScenePresence avatar, int localLandID, LLUUID regionID);
|
||||||
|
|
||||||
public event AvatarEnteringNewParcel OnAvatarEnteringNewParcel;
|
public event AvatarEnteringNewParcel OnAvatarEnteringNewParcel;
|
||||||
|
|
||||||
|
|
||||||
|
public delegate void NewGridInstantMessage(GridInstantMessage message);
|
||||||
|
|
||||||
public event NewGridInstantMessage OnGridInstantMessageToIMModule;
|
public event NewGridInstantMessage OnGridInstantMessageToIMModule;
|
||||||
|
|
||||||
public event NewGridInstantMessage OnGridInstantMessageToFriendsModule;
|
public event NewGridInstantMessage OnGridInstantMessageToFriendsModule;
|
||||||
|
|
||||||
public event NewGridInstantMessage OnGridInstantMessageToGroupsModule;
|
public event NewGridInstantMessage OnGridInstantMessageToGroupsModule;
|
||||||
|
|
||||||
|
public delegate void ClientClosed(LLUUID clientID);
|
||||||
|
|
||||||
public event ClientClosed OnClientClosed;
|
public event ClientClosed OnClientClosed;
|
||||||
|
|
||||||
|
public delegate void ScriptChangedEvent(uint localID, uint change);
|
||||||
|
|
||||||
public event ScriptChangedEvent OnScriptChangedEvent;
|
public event ScriptChangedEvent OnScriptChangedEvent;
|
||||||
|
|
||||||
|
public delegate void ScriptAtTargetEvent(uint localID, uint handle, LLVector3 targetpos, LLVector3 atpos);
|
||||||
|
|
||||||
public event ScriptAtTargetEvent OnScriptAtTargetEvent;
|
public event ScriptAtTargetEvent OnScriptAtTargetEvent;
|
||||||
|
|
||||||
|
public delegate void ScriptNotAtTargetEvent(uint localID);
|
||||||
|
|
||||||
public event ScriptNotAtTargetEvent OnScriptNotAtTargetEvent;
|
public event ScriptNotAtTargetEvent OnScriptNotAtTargetEvent;
|
||||||
|
|
||||||
public event OnNewPresenceDelegate OnMakeChildAgent;
|
public event OnNewPresenceDelegate OnMakeChildAgent;
|
||||||
|
|
||||||
|
public delegate void NewInventoryItemUploadComplete(LLUUID avatarID, LLUUID assetID, string name, int userlevel);
|
||||||
|
|
||||||
public event NewInventoryItemUploadComplete OnNewInventoryItemUploadComplete;
|
public event NewInventoryItemUploadComplete OnNewInventoryItemUploadComplete;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// RegisterCapsEvent is called by Scene after the Caps object
|
||||||
|
/// has been instantiated and before it is return to the
|
||||||
|
/// client and provides region modules to add their caps.
|
||||||
|
/// </summary>
|
||||||
|
public delegate void RegisterCapsEvent(LLUUID agentID, Caps caps);
|
||||||
public event RegisterCapsEvent OnRegisterCaps;
|
public event RegisterCapsEvent OnRegisterCaps;
|
||||||
|
/// <summary>
|
||||||
|
/// DeregisterCapsEvent is called by Scene when the caps
|
||||||
|
/// handler for an agent are removed.
|
||||||
|
/// </summary>
|
||||||
|
public delegate void DeregisterCapsEvent(LLUUID agentID, Caps caps);
|
||||||
public event DeregisterCapsEvent OnDeregisterCaps;
|
public event DeregisterCapsEvent OnDeregisterCaps;
|
||||||
|
|
||||||
|
public class MoneyTransferArgs : EventArgs
|
||||||
|
{
|
||||||
|
public LLUUID sender;
|
||||||
|
public LLUUID receiver;
|
||||||
|
|
||||||
|
// Always false. The SL protocol sucks.
|
||||||
|
public bool authenticated = false;
|
||||||
|
|
||||||
|
public int amount;
|
||||||
|
public int transactiontype;
|
||||||
|
public string description;
|
||||||
|
|
||||||
|
public MoneyTransferArgs(LLUUID asender, LLUUID areceiver, int aamount, int atransactiontype, string adescription) {
|
||||||
|
sender = asender;
|
||||||
|
receiver = areceiver;
|
||||||
|
amount = aamount;
|
||||||
|
transactiontype = atransactiontype;
|
||||||
|
description = adescription;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class LandBuyArgs : EventArgs
|
||||||
|
{
|
||||||
|
public LLUUID agentId = LLUUID.Zero;
|
||||||
|
|
||||||
|
public LLUUID groupId = LLUUID.Zero;
|
||||||
|
|
||||||
|
public LLUUID parcelOwnerID = LLUUID.Zero;
|
||||||
|
|
||||||
|
public bool final = false;
|
||||||
|
public bool groupOwned = false;
|
||||||
|
public bool removeContribution = false;
|
||||||
|
public int parcelLocalID = 0;
|
||||||
|
public int parcelArea = 0;
|
||||||
|
public int parcelPrice = 0;
|
||||||
|
public bool authenticated = false;
|
||||||
|
public bool landValidated = false;
|
||||||
|
public bool economyValidated = false;
|
||||||
|
public int transactionID = 0;
|
||||||
|
public int amountDebited = 0;
|
||||||
|
|
||||||
|
|
||||||
|
public LandBuyArgs(LLUUID pagentId, LLUUID pgroupId, bool pfinal, bool pgroupOwned,
|
||||||
|
bool premoveContribution, int pparcelLocalID, int pparcelArea, int pparcelPrice,
|
||||||
|
bool pauthenticated)
|
||||||
|
{
|
||||||
|
agentId = pagentId;
|
||||||
|
groupId = pgroupId;
|
||||||
|
final = pfinal;
|
||||||
|
groupOwned = pgroupOwned;
|
||||||
|
removeContribution = premoveContribution;
|
||||||
|
parcelLocalID = pparcelLocalID;
|
||||||
|
parcelArea = pparcelArea;
|
||||||
|
parcelPrice = pparcelPrice;
|
||||||
|
authenticated = pauthenticated;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public delegate void MoneyTransferEvent(Object sender, MoneyTransferArgs e);
|
||||||
|
|
||||||
|
public delegate void LandBuy(Object sender, LandBuyArgs e);
|
||||||
|
|
||||||
public event MoneyTransferEvent OnMoneyTransfer;
|
public event MoneyTransferEvent OnMoneyTransfer;
|
||||||
public event LandBuy OnLandBuy;
|
public event LandBuy OnLandBuy;
|
||||||
public event LandBuy OnValidateLandBuy;
|
public event LandBuy OnValidateLandBuy;
|
||||||
|
|
||||||
/* Designated Event Deletage Instances */
|
/* Designated Event Deletage Instances */
|
||||||
|
|
||||||
|
private ScriptChangedEvent handlerScriptChangedEvent = null; //OnScriptChangedEvent;
|
||||||
|
private ScriptAtTargetEvent handlerScriptAtTargetEvent = null;
|
||||||
|
private ScriptNotAtTargetEvent handlerScriptNotAtTargetEvent = null;
|
||||||
|
private ClientMovement handlerClientMovement = null; //OnClientMovement;
|
||||||
|
private OnPermissionErrorDelegate handlerPermissionError = null; //OnPermissionError;
|
||||||
|
private OnPluginConsoleDelegate handlerPluginConsole = null; //OnPluginConsole;
|
||||||
|
private OnFrameDelegate handlerFrame = null; //OnFrame;
|
||||||
|
private OnNewClientDelegate handlerNewClient = null; //OnNewClient;
|
||||||
|
private OnNewPresenceDelegate handlerNewPresence = null; //OnNewPresence;
|
||||||
|
private OnRemovePresenceDelegate handlerRemovePresence = null; //OnRemovePresence;
|
||||||
|
private OnBackupDelegate handlerBackup = null; //OnBackup;
|
||||||
|
private OnParcelPrimCountUpdateDelegate handlerParcelPrimCountUpdate = null; //OnParcelPrimCountUpdate;
|
||||||
|
private MoneyTransferEvent handlerMoneyTransfer = null; //OnMoneyTransfer;
|
||||||
|
private OnParcelPrimCountAddDelegate handlerParcelPrimCountAdd = null; //OnParcelPrimCountAdd;
|
||||||
|
private OnShutdownDelegate handlerShutdown = null; //OnShutdown;
|
||||||
|
private ObjectGrabDelegate handlerObjectGrab = null; //OnObjectGrab;
|
||||||
|
private ObjectDeGrabDelegate handlerObjectDeGrab = null; //OnObjectDeGrab;
|
||||||
|
private NewRezScript handlerRezScript = null; //OnRezScript;
|
||||||
|
private RemoveScript handlerRemoveScript = null; //OnRemoveScript;
|
||||||
|
private SceneGroupMoved handlerSceneGroupMove = null; //OnSceneGroupMove;
|
||||||
|
private SceneGroupGrabed handlerSceneGroupGrab = null; //OnSceneGroupGrab;
|
||||||
|
private LandObjectAdded handlerLandObjectAdded = null; //OnLandObjectAdded;
|
||||||
|
private LandObjectRemoved handlerLandObjectRemoved = null; //OnLandObjectRemoved;
|
||||||
|
private AvatarEnteringNewParcel handlerAvatarEnteringNewParcel = null; //OnAvatarEnteringNewParcel;
|
||||||
|
private NewGridInstantMessage handlerGridInstantMessageToIM = null; //OnGridInstantMessageToIMModule;
|
||||||
|
private NewGridInstantMessage handlerGridInstantMessageToFriends = null; //OnGridInstantMessageToFriendsModule;
|
||||||
|
private ClientClosed handlerClientClosed = null; //OnClientClosed;
|
||||||
|
private OnNewPresenceDelegate handlerMakeChildAgent = null; //OnMakeChildAgent;
|
||||||
|
private OnTerrainTickDelegate handlerTerrainTick = null; // OnTerainTick;
|
||||||
|
private RegisterCapsEvent handlerRegisterCaps = null; // OnRegisterCaps;
|
||||||
|
private DeregisterCapsEvent handlerDeregisterCaps = null; // OnDeregisterCaps;
|
||||||
|
private NewInventoryItemUploadComplete handlerNewInventoryItemUpdateComplete = null;
|
||||||
|
private LandBuy handlerLandBuy = null;
|
||||||
|
private LandBuy handlerValidateLandBuy = null;
|
||||||
|
|
||||||
public void TriggerOnScriptChangedEvent(uint localID, uint change)
|
public void TriggerOnScriptChangedEvent(uint localID, uint change)
|
||||||
{
|
{
|
||||||
handlerScriptChangedEvent = OnScriptChangedEvent;
|
handlerScriptChangedEvent = OnScriptChangedEvent;
|
||||||
|
@ -293,7 +343,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
if (handlerParcelPrimCountUpdate != null)
|
if (handlerParcelPrimCountUpdate != null)
|
||||||
{
|
{
|
||||||
handlerParcelPrimCountUpdate();
|
handlerParcelPrimCountUpdate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerMoneyTransfer(Object sender, MoneyTransferArgs e)
|
public void TriggerMoneyTransfer(Object sender, MoneyTransferArgs e)
|
||||||
|
@ -442,6 +492,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
handlerGridInstantMessageToFriends(message);
|
handlerGridInstantMessageToFriends(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -463,7 +514,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerOnRegisterCaps(LLUUID agentID, Caps caps)
|
public void TriggerOnRegisterCaps(LLUUID agentID, Caps caps)
|
||||||
{
|
{
|
||||||
handlerRegisterCaps = OnRegisterCaps;
|
handlerRegisterCaps = OnRegisterCaps;
|
||||||
if (handlerRegisterCaps != null)
|
if (handlerRegisterCaps != null)
|
||||||
|
@ -472,7 +523,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerOnDeregisterCaps(LLUUID agentID, Caps caps)
|
public void TriggerOnDeregisterCaps(LLUUID agentID, Caps caps)
|
||||||
{
|
{
|
||||||
handlerDeregisterCaps = OnDeregisterCaps;
|
handlerDeregisterCaps = OnDeregisterCaps;
|
||||||
if (handlerDeregisterCaps != null)
|
if (handlerDeregisterCaps != null)
|
||||||
|
@ -489,8 +540,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
handlerNewInventoryItemUpdateComplete(agentID, AssetID, AssetName, userlevel);
|
handlerNewInventoryItemUpdateComplete(agentID, AssetID, AssetName, userlevel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public void TriggerLandBuy (Object sender, LandBuyArgs e)
|
||||||
public void TriggerLandBuy(Object sender, LandBuyArgs e)
|
|
||||||
{
|
{
|
||||||
handlerLandBuy = OnLandBuy;
|
handlerLandBuy = OnLandBuy;
|
||||||
if (handlerLandBuy != null)
|
if (handlerLandBuy != null)
|
||||||
|
@ -498,7 +548,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
handlerLandBuy(sender, e);
|
handlerLandBuy(sender, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerValidateLandBuy(Object sender, LandBuyArgs e)
|
public void TriggerValidateLandBuy(Object sender, LandBuyArgs e)
|
||||||
{
|
{
|
||||||
handlerValidateLandBuy = OnValidateLandBuy;
|
handlerValidateLandBuy = OnValidateLandBuy;
|
||||||
|
@ -507,7 +556,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
handlerValidateLandBuy(sender, e);
|
handlerValidateLandBuy(sender, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerAtTargetEvent(uint localID, uint handle, LLVector3 targetpos, LLVector3 currentpos)
|
public void TriggerAtTargetEvent(uint localID, uint handle, LLVector3 targetpos, LLVector3 currentpos)
|
||||||
{
|
{
|
||||||
handlerScriptAtTargetEvent = OnScriptAtTargetEvent;
|
handlerScriptAtTargetEvent = OnScriptAtTargetEvent;
|
||||||
|
@ -525,67 +574,5 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
handlerScriptNotAtTargetEvent(localID);
|
handlerScriptNotAtTargetEvent(localID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Nested type: LandBuyArgs
|
|
||||||
|
|
||||||
public class LandBuyArgs : EventArgs
|
|
||||||
{
|
|
||||||
public LLUUID agentId = LLUUID.Zero;
|
|
||||||
public int amountDebited;
|
|
||||||
public bool authenticated;
|
|
||||||
public bool economyValidated;
|
|
||||||
|
|
||||||
public bool final;
|
|
||||||
public LLUUID groupId = LLUUID.Zero;
|
|
||||||
public bool groupOwned;
|
|
||||||
public bool landValidated;
|
|
||||||
public int parcelArea;
|
|
||||||
public int parcelLocalID;
|
|
||||||
public LLUUID parcelOwnerID = LLUUID.Zero;
|
|
||||||
public int parcelPrice;
|
|
||||||
public bool removeContribution;
|
|
||||||
public int transactionID;
|
|
||||||
|
|
||||||
|
|
||||||
public LandBuyArgs(LLUUID pagentId, LLUUID pgroupId, bool pfinal, bool pgroupOwned,
|
|
||||||
bool premoveContribution, int pparcelLocalID, int pparcelArea, int pparcelPrice,
|
|
||||||
bool pauthenticated)
|
|
||||||
{
|
|
||||||
agentId = pagentId;
|
|
||||||
groupId = pgroupId;
|
|
||||||
final = pfinal;
|
|
||||||
groupOwned = pgroupOwned;
|
|
||||||
removeContribution = premoveContribution;
|
|
||||||
parcelLocalID = pparcelLocalID;
|
|
||||||
parcelArea = pparcelArea;
|
|
||||||
parcelPrice = pparcelPrice;
|
|
||||||
authenticated = pauthenticated;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Nested type: MoneyTransferArgs
|
|
||||||
|
|
||||||
public class MoneyTransferArgs : EventArgs
|
|
||||||
{
|
|
||||||
public int amount;
|
|
||||||
public bool authenticated;
|
|
||||||
public string description;
|
|
||||||
public LLUUID receiver;
|
|
||||||
public LLUUID sender;
|
|
||||||
public int transactiontype;
|
|
||||||
|
|
||||||
public MoneyTransferArgs(LLUUID asender, LLUUID areceiver, int aamount, int atransactiontype, string adescription)
|
|
||||||
{
|
|
||||||
sender = asender;
|
|
||||||
receiver = areceiver;
|
|
||||||
amount = aamount;
|
|
||||||
transactiontype = atransactiontype;
|
|
||||||
description = adescription;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,13 +41,10 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private readonly List<Scene> m_localScenes;
|
public event RestartSim OnRestartSim;
|
||||||
private Scene m_currentScene;
|
|
||||||
|
|
||||||
public SceneManager()
|
private readonly List<Scene> m_localScenes;
|
||||||
{
|
private Scene m_currentScene = null;
|
||||||
m_localScenes = new List<Scene>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Scene> Scenes
|
public List<Scene> Scenes
|
||||||
{
|
{
|
||||||
|
@ -74,7 +71,10 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public event RestartSim OnRestartSim;
|
public SceneManager()
|
||||||
|
{
|
||||||
|
m_localScenes = new List<Scene>();
|
||||||
|
}
|
||||||
|
|
||||||
public void Close()
|
public void Close()
|
||||||
{
|
{
|
||||||
|
@ -180,7 +180,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
[Obsolete("TODO: Remove this warning by 0.7")]
|
[Obsolete("TODO: Remove this warning by 0.7")]
|
||||||
public bool RunTerrainCmdOnCurrentScene(string[] cmdparams, ref string result)
|
public bool RunTerrainCmdOnCurrentScene(string[] cmdparams, ref string result)
|
||||||
{
|
{
|
||||||
m_log.Warn("DEPRECIATED: The terrain engine has been replaced with a new terrain plugin module. Please type 'plugin terrain help' for new commands.");
|
m_log.Warn("DEPRECIATED: The terrain engine has been replaced with a new terrain plugin module. Please type 'plugin terrain help' for new commands.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -252,8 +252,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
public bool TrySetCurrentScene(LLUUID regionID)
|
public bool TrySetCurrentScene(LLUUID regionID)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Searching for Region: '{0}'", regionID);
|
Console.WriteLine("Searching for Region: '{0}'", regionID.ToString());
|
||||||
|
|
||||||
foreach (Scene scene in m_localScenes)
|
foreach (Scene scene in m_localScenes)
|
||||||
{
|
{
|
||||||
if (scene.RegionInfo.RegionID == regionID)
|
if (scene.RegionInfo.RegionID == regionID)
|
||||||
|
@ -262,7 +262,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -313,7 +313,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
foreach (Scene mscene in m_localScenes)
|
foreach (Scene mscene in m_localScenes)
|
||||||
{
|
{
|
||||||
if ((mscene.RegionInfo.InternalEndPoint.Equals(ipEndPoint.Address)) &&
|
if((mscene.RegionInfo.InternalEndPoint.Equals(ipEndPoint.Address)) &&
|
||||||
(mscene.RegionInfo.InternalEndPoint.Port == ipEndPoint.Port))
|
(mscene.RegionInfo.InternalEndPoint.Port == ipEndPoint.Port))
|
||||||
{
|
{
|
||||||
scene = mscene;
|
scene = mscene;
|
||||||
|
@ -327,22 +327,22 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
public void SetDebugPacketOnCurrentScene(int newDebug)
|
public void SetDebugPacketOnCurrentScene(int newDebug)
|
||||||
{
|
{
|
||||||
ForEachCurrentScene(delegate(Scene scene)
|
ForEachCurrentScene(delegate(Scene scene)
|
||||||
|
{
|
||||||
|
List<ScenePresence> scenePresences = scene.GetScenePresences();
|
||||||
|
|
||||||
|
foreach (ScenePresence scenePresence in scenePresences)
|
||||||
{
|
{
|
||||||
List<ScenePresence> scenePresences = scene.GetScenePresences();
|
if (!scenePresence.IsChildAgent)
|
||||||
|
|
||||||
foreach (ScenePresence scenePresence in scenePresences)
|
|
||||||
{
|
{
|
||||||
if (!scenePresence.IsChildAgent)
|
m_log.ErrorFormat("Packet debug for {0} {1} set to {2}",
|
||||||
{
|
scenePresence.Firstname,
|
||||||
m_log.ErrorFormat("Packet debug for {0} {1} set to {2}",
|
scenePresence.Lastname,
|
||||||
scenePresence.Firstname,
|
newDebug);
|
||||||
scenePresence.Lastname,
|
|
||||||
newDebug);
|
|
||||||
|
|
||||||
scenePresence.ControllingClient.SetDebug(newDebug);
|
scenePresence.ControllingClient.SetDebug(newDebug);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<ScenePresence> GetCurrentSceneAvatars()
|
public List<ScenePresence> GetCurrentSceneAvatars()
|
||||||
|
@ -350,17 +350,17 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
List<ScenePresence> avatars = new List<ScenePresence>();
|
List<ScenePresence> avatars = new List<ScenePresence>();
|
||||||
|
|
||||||
ForEachCurrentScene(delegate(Scene scene)
|
ForEachCurrentScene(delegate(Scene scene)
|
||||||
{
|
{
|
||||||
List<ScenePresence> scenePresences = scene.GetScenePresences();
|
List<ScenePresence> scenePresences = scene.GetScenePresences();
|
||||||
|
|
||||||
foreach (ScenePresence scenePresence in scenePresences)
|
foreach (ScenePresence scenePresence in scenePresences)
|
||||||
{
|
{
|
||||||
if (!scenePresence.IsChildAgent)
|
if (!scenePresence.IsChildAgent)
|
||||||
{
|
{
|
||||||
avatars.Add(scenePresence);
|
avatars.Add(scenePresence);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return avatars;
|
return avatars;
|
||||||
}
|
}
|
||||||
|
@ -381,11 +381,11 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
public void SetCurrentSceneTimePhase(int timePhase)
|
public void SetCurrentSceneTimePhase(int timePhase)
|
||||||
{
|
{
|
||||||
ForEachCurrentScene(delegate(Scene scene)
|
ForEachCurrentScene(delegate(Scene scene)
|
||||||
{
|
{
|
||||||
scene.SetTimePhase(
|
scene.SetTimePhase(
|
||||||
timePhase)
|
timePhase)
|
||||||
;
|
;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ForceCurrentSceneClientUpdate()
|
public void ForceCurrentSceneClientUpdate()
|
||||||
|
@ -453,4 +453,4 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
m_localScenes.ForEach(action);
|
m_localScenes.ForEach(action);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
if (part != null)
|
if (part != null)
|
||||||
{
|
{
|
||||||
part.StartScript(itemID);
|
part.StartScript(itemID);
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -56,9 +57,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
"[PRIMINVENTORY]: " +
|
"[PRIMINVENTORY]: " +
|
||||||
"Couldn't find part {0} in object group {1}, {2} to start script with ID {3}",
|
"Couldn't find part {0} in object group {1}, {2} to start script with ID {3}",
|
||||||
localID, Name, UUID, itemID);
|
localID, Name, UUID, itemID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// /// Start a given script.
|
// /// Start a given script.
|
||||||
// /// </summary>
|
// /// </summary>
|
||||||
// /// <param name="localID">
|
// /// <param name="localID">
|
||||||
|
@ -79,7 +80,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
// localID, Name, UUID, itemID);
|
// localID, Name, UUID, itemID);
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Start the scripts contained in all the prims in this group.
|
/// Start the scripts contained in all the prims in this group.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -105,7 +106,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Start a given script.
|
/// Start a given script.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="localID">
|
/// <param name="localID">
|
||||||
|
@ -125,9 +126,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
"[PRIMINVENTORY]: " +
|
"[PRIMINVENTORY]: " +
|
||||||
"Couldn't find part {0} in object group {1}, {2} to stop script with ID {3}",
|
"Couldn't find part {0} in object group {1}, {2} to stop script with ID {3}",
|
||||||
partID, Name, UUID, itemID);
|
partID, Name, UUID, itemID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -170,7 +171,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
localID, Name, UUID);
|
localID, Name, UUID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Add an inventory item to a prim in this group.
|
/// Add an inventory item to a prim in this group.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -179,7 +180,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
/// <param name="item"></param>
|
/// <param name="item"></param>
|
||||||
/// <param name="copyItemID">The item UUID that should be used by the new item.</param>
|
/// <param name="copyItemID">The item UUID that should be used by the new item.</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public bool AddInventoryItem(IClientAPI remoteClient, uint localID,
|
public bool AddInventoryItem(IClientAPI remoteClient, uint localID,
|
||||||
InventoryItemBase item, LLUUID copyItemID)
|
InventoryItemBase item, LLUUID copyItemID)
|
||||||
{
|
{
|
||||||
LLUUID newItemId = (copyItemID != LLUUID.Zero) ? copyItemID : item.ID;
|
LLUUID newItemId = (copyItemID != LLUUID.Zero) ? copyItemID : item.ID;
|
||||||
|
@ -188,8 +189,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
if (part != null)
|
if (part != null)
|
||||||
{
|
{
|
||||||
TaskInventoryItem taskItem = new TaskInventoryItem();
|
TaskInventoryItem taskItem = new TaskInventoryItem();
|
||||||
|
|
||||||
taskItem.ItemID = newItemId;
|
taskItem.ItemID = newItemId;
|
||||||
taskItem.AssetID = item.AssetID;
|
taskItem.AssetID = item.AssetID;
|
||||||
taskItem.Name = item.Name;
|
taskItem.Name = item.Name;
|
||||||
taskItem.Description = item.Description;
|
taskItem.Description = item.Description;
|
||||||
|
@ -197,15 +198,15 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
taskItem.CreatorID = item.Creator;
|
taskItem.CreatorID = item.Creator;
|
||||||
taskItem.Type = item.AssetType;
|
taskItem.Type = item.AssetType;
|
||||||
taskItem.InvType = item.InvType;
|
taskItem.InvType = item.InvType;
|
||||||
|
|
||||||
taskItem.BaseMask = item.BasePermissions;
|
taskItem.BaseMask = item.BasePermissions;
|
||||||
taskItem.OwnerMask = item.CurrentPermissions;
|
taskItem.OwnerMask = item.CurrentPermissions;
|
||||||
// FIXME: ignoring group permissions for now as they aren't stored in item
|
// FIXME: ignoring group permissions for now as they aren't stored in item
|
||||||
taskItem.EveryoneMask = item.EveryOnePermissions;
|
taskItem.EveryoneMask = item.EveryOnePermissions;
|
||||||
taskItem.NextOwnerMask = item.NextPermissions;
|
taskItem.NextOwnerMask = item.NextPermissions;
|
||||||
|
|
||||||
part.AddInventoryItem(taskItem);
|
part.AddInventoryItem(taskItem);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -218,7 +219,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns an existing inventory item. Returns the original, so any changes will be live.
|
/// Returns an existing inventory item. Returns the original, so any changes will be live.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -238,11 +239,11 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
"[PRIMINVENTORY]: " +
|
"[PRIMINVENTORY]: " +
|
||||||
"Couldn't find prim local ID {0} in prim {1}, {2} to get inventory item ID {3}",
|
"Couldn't find prim local ID {0} in prim {1}, {2} to get inventory item ID {3}",
|
||||||
primID, part.Name, part.UUID, itemID);
|
primID, part.Name, part.UUID, itemID);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Update an existing inventory item.
|
/// Update an existing inventory item.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -254,8 +255,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
SceneObjectPart part = GetChildPart(item.ParentPartID);
|
SceneObjectPart part = GetChildPart(item.ParentPartID);
|
||||||
if (part != null)
|
if (part != null)
|
||||||
{
|
{
|
||||||
part.UpdateInventoryItem(item);
|
part.UpdateInventoryItem(item);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -264,22 +265,22 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
"[PRIMINVENTORY]: " +
|
"[PRIMINVENTORY]: " +
|
||||||
"Couldn't find prim ID {0} to update item {1}, {2}",
|
"Couldn't find prim ID {0} to update item {1}, {2}",
|
||||||
item.ParentPartID, item.Name, item.ItemID);
|
item.ParentPartID, item.Name, item.ItemID);
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int RemoveInventoryItem(uint localID, LLUUID itemID)
|
public int RemoveInventoryItem(uint localID, LLUUID itemID)
|
||||||
{
|
{
|
||||||
SceneObjectPart part = GetChildPart(localID);
|
SceneObjectPart part = GetChildPart(localID);
|
||||||
if (part != null)
|
if (part != null)
|
||||||
{
|
{
|
||||||
int type = part.RemoveInventoryItem(itemID);
|
int type = part.RemoveInventoryItem(itemID);
|
||||||
|
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,7 +72,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
object_rez = 4194304
|
object_rez = 4194304
|
||||||
}
|
}
|
||||||
|
|
||||||
internal struct scriptPosTarget
|
struct scriptPosTarget
|
||||||
{
|
{
|
||||||
public LLVector3 targetPos;
|
public LLVector3 targetPos;
|
||||||
public float tolerance;
|
public float tolerance;
|
||||||
|
@ -82,14 +82,14 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
public partial class SceneObjectGroup : EntityBase
|
public partial class SceneObjectGroup : EntityBase
|
||||||
{
|
{
|
||||||
private readonly Dictionary<uint, scriptPosTarget> m_targets = new Dictionary<uint, scriptPosTarget>();
|
private PrimCountTaintedDelegate handlerPrimCountTainted = null;
|
||||||
private PrimCountTaintedDelegate handlerPrimCountTainted;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Signal whether the non-inventory attributes of any prims in the group have changed
|
/// Signal whether the non-inventory attributes of any prims in the group have changed
|
||||||
/// since the group's last persistent backup
|
/// since the group's last persistent backup
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool HasGroupChanged;
|
public bool HasGroupChanged = false;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private LLVector3 lastPhysGroupPos;
|
private LLVector3 lastPhysGroupPos;
|
||||||
|
@ -104,8 +104,11 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
protected SceneObjectPart m_rootPart;
|
protected SceneObjectPart m_rootPart;
|
||||||
private Dictionary<LLUUID, scriptEvents> m_scriptEvents = new Dictionary<LLUUID, scriptEvents>();
|
private Dictionary<LLUUID, scriptEvents> m_scriptEvents = new Dictionary<LLUUID, scriptEvents>();
|
||||||
|
|
||||||
private bool m_scriptListens_atTarget;
|
private Dictionary<uint, scriptPosTarget> m_targets = new Dictionary<uint, scriptPosTarget>();
|
||||||
private bool m_scriptListens_notAtTarget;
|
|
||||||
|
private bool m_scriptListens_atTarget = false;
|
||||||
|
private bool m_scriptListens_notAtTarget = false;
|
||||||
|
|
||||||
|
|
||||||
#region Properties
|
#region Properties
|
||||||
|
|
||||||
|
@ -116,7 +119,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
/// think really there should be a list (or whatever) in each scenepresence
|
/// think really there should be a list (or whatever) in each scenepresence
|
||||||
/// saying what prim(s) that user has selected.
|
/// saying what prim(s) that user has selected.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected bool m_isSelected;
|
protected bool m_isSelected = false;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
|
@ -183,6 +186,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
string.Format("[SCENE OBJECT GROUP]: Object {0} has no root part.", m_uuid));
|
string.Format("[SCENE OBJECT GROUP]: Object {0} has no root part.", m_uuid));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return m_rootPart.GroupPosition;
|
return m_rootPart.GroupPosition;
|
||||||
}
|
}
|
||||||
|
@ -202,7 +206,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
part.GroupPosition = val;
|
part.GroupPosition = val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//if (m_rootPart.PhysActor != null)
|
//if (m_rootPart.PhysActor != null)
|
||||||
//{
|
//{
|
||||||
//m_rootPart.PhysActor.Position =
|
//m_rootPart.PhysActor.Position =
|
||||||
|
@ -212,7 +216,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override uint LocalId
|
public override uint LocalId
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
@ -511,11 +515,10 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
m_scene.EventManager.OnBackup += ProcessBackup;
|
m_scene.EventManager.OnBackup += ProcessBackup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public LLVector3 GroupScale()
|
public LLVector3 GroupScale()
|
||||||
{
|
{
|
||||||
LLVector3 minScale = new LLVector3(Constants.RegionSize, Constants.RegionSize, Constants.RegionSize);
|
LLVector3 minScale = new LLVector3(Constants.RegionSize,Constants.RegionSize,Constants.RegionSize);
|
||||||
LLVector3 maxScale = new LLVector3(0f, 0f, 0f);
|
LLVector3 maxScale = new LLVector3(0f,0f,0f);
|
||||||
LLVector3 finalScale = new LLVector3(0.5f, 0.5f, 0.5f);
|
LLVector3 finalScale = new LLVector3(0.5f, 0.5f, 0.5f);
|
||||||
|
|
||||||
lock (m_parts)
|
lock (m_parts)
|
||||||
|
@ -538,8 +541,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
finalScale.Y = (minScale.Y > maxScale.Y) ? minScale.Y : maxScale.Y;
|
finalScale.Y = (minScale.Y > maxScale.Y) ? minScale.Y : maxScale.Y;
|
||||||
finalScale.Z = (minScale.Z > maxScale.Z) ? minScale.Z : maxScale.Z;
|
finalScale.Z = (minScale.Z > maxScale.Z) ? minScale.Z : maxScale.Z;
|
||||||
return finalScale;
|
return finalScale;
|
||||||
}
|
|
||||||
|
|
||||||
|
}
|
||||||
public EntityIntersection TestIntersection(Ray hRay, bool frontFacesOnly, bool faceCenters)
|
public EntityIntersection TestIntersection(Ray hRay, bool frontFacesOnly, bool faceCenters)
|
||||||
{
|
{
|
||||||
// We got a request from the inner_scene to raytrace along the Ray hRay
|
// We got a request from the inner_scene to raytrace along the Ray hRay
|
||||||
|
@ -562,7 +565,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
// Telling the prim to raytrace.
|
// Telling the prim to raytrace.
|
||||||
//EntityIntersection inter = part.TestIntersection(hRay, parentrotation);
|
//EntityIntersection inter = part.TestIntersection(hRay, parentrotation);
|
||||||
|
|
||||||
EntityIntersection inter = part.TestIntersectionOBB(hRay, parentrotation, frontFacesOnly, faceCenters);
|
EntityIntersection inter = part.TestIntersectionOBB(hRay, parentrotation,frontFacesOnly, faceCenters);
|
||||||
|
|
||||||
// This may need to be updated to the maximum draw distance possible..
|
// This may need to be updated to the maximum draw distance possible..
|
||||||
// We might (and probably will) be checking for prim creation from other sims
|
// We might (and probably will) be checking for prim creation from other sims
|
||||||
|
@ -681,11 +684,12 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
DetachFromBackup(this);
|
DetachFromBackup(this);
|
||||||
m_rootPart.m_attachedAvatar = agentID;
|
m_rootPart.m_attachedAvatar = agentID;
|
||||||
|
|
||||||
|
|
||||||
if (m_rootPart.PhysActor != null)
|
if (m_rootPart.PhysActor != null)
|
||||||
{
|
{
|
||||||
m_scene.PhysicsScene.RemovePrim(m_rootPart.PhysActor);
|
m_scene.PhysicsScene.RemovePrim(m_rootPart.PhysActor);
|
||||||
m_rootPart.PhysActor = null;
|
m_rootPart.PhysActor = null;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AbsolutePosition = AttachOffset;
|
AbsolutePosition = AttachOffset;
|
||||||
|
@ -705,28 +709,27 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
m_rootPart.ScheduleFullUpdate();
|
m_rootPart.ScheduleFullUpdate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte GetAttachmentPoint()
|
public byte GetAttachmentPoint()
|
||||||
{
|
{
|
||||||
if (m_rootPart != null)
|
if (m_rootPart != null)
|
||||||
{
|
{
|
||||||
return m_rootPart.Shape.State;
|
return m_rootPart.Shape.State;
|
||||||
}
|
}
|
||||||
return 0;
|
return (byte)0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ClearPartAttachmentData()
|
public void ClearPartAttachmentData()
|
||||||
{
|
{
|
||||||
foreach (SceneObjectPart part in m_parts.Values)
|
foreach (SceneObjectPart part in m_parts.Values)
|
||||||
{
|
{
|
||||||
part.SetAttachmentPoint(0);
|
part.SetAttachmentPoint((Byte)0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DetachToGround()
|
public void DetachToGround()
|
||||||
{
|
{
|
||||||
ScenePresence avatar = m_scene.GetScenePresence(m_rootPart.m_attachedAvatar);
|
ScenePresence avatar = m_scene.GetScenePresence(m_rootPart.m_attachedAvatar);
|
||||||
LLVector3 detachedpos = new LLVector3(127f, 127f, 127f);
|
LLVector3 detachedpos = new LLVector3(127f,127f,127f);
|
||||||
if (avatar != null)
|
if (avatar != null)
|
||||||
{
|
{
|
||||||
detachedpos = avatar.AbsolutePosition;
|
detachedpos = avatar.AbsolutePosition;
|
||||||
|
@ -735,14 +738,14 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
AbsolutePosition = detachedpos;
|
AbsolutePosition = detachedpos;
|
||||||
m_rootPart.m_attachedAvatar = LLUUID.Zero;
|
m_rootPart.m_attachedAvatar = LLUUID.Zero;
|
||||||
m_rootPart.SetParentLocalId(0);
|
m_rootPart.SetParentLocalId(0);
|
||||||
m_rootPart.SetAttachmentPoint(0);
|
m_rootPart.SetAttachmentPoint((byte)0);
|
||||||
m_rootPart.m_IsAttachment = false;
|
m_rootPart.m_IsAttachment = false;
|
||||||
m_rootPart.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), m_scene.m_physicalPrim);
|
m_rootPart.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), m_scene.m_physicalPrim);
|
||||||
AttachToBackup();
|
AttachToBackup();
|
||||||
m_rootPart.ScheduleFullUpdate();
|
m_rootPart.ScheduleFullUpdate();
|
||||||
m_rootPart.ClearUndoState();
|
m_rootPart.ClearUndoState();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DetachToInventoryPrep()
|
public void DetachToInventoryPrep()
|
||||||
{
|
{
|
||||||
ScenePresence avatar = m_scene.GetScenePresence(m_rootPart.m_attachedAvatar);
|
ScenePresence avatar = m_scene.GetScenePresence(m_rootPart.m_attachedAvatar);
|
||||||
|
@ -752,7 +755,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
//detachedpos = avatar.AbsolutePosition;
|
//detachedpos = avatar.AbsolutePosition;
|
||||||
avatar.RemoveAttachment(this);
|
avatar.RemoveAttachment(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_rootPart.m_attachedAvatar = LLUUID.Zero;
|
m_rootPart.m_attachedAvatar = LLUUID.Zero;
|
||||||
m_rootPart.SetParentLocalId(0);
|
m_rootPart.SetParentLocalId(0);
|
||||||
//m_rootPart.SetAttachmentPoint((byte)0);
|
//m_rootPart.SetAttachmentPoint((byte)0);
|
||||||
|
@ -761,8 +764,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
//m_rootPart.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), m_scene.m_physicalPrim);
|
//m_rootPart.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), m_scene.m_physicalPrim);
|
||||||
//AttachToBackup();
|
//AttachToBackup();
|
||||||
//m_rootPart.ScheduleFullUpdate();
|
//m_rootPart.ScheduleFullUpdate();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -823,6 +826,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
m_parts.Add(part.UUID, part);
|
m_parts.Add(part.UUID, part);
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -843,6 +847,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
if (part.UUID != m_rootPart.UUID)
|
if (part.UUID != m_rootPart.UUID)
|
||||||
{
|
{
|
||||||
part.ParentID = m_rootPart.LocalId;
|
part.ParentID = m_rootPart.LocalId;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -855,10 +860,10 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
foreach (SceneObjectPart part in m_parts.Values)
|
foreach (SceneObjectPart part in m_parts.Values)
|
||||||
{
|
{
|
||||||
part.UUID = LLUUID.Random();
|
part.UUID = LLUUID.Random();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// helper provided for parts.
|
// helper provided for parts.
|
||||||
public int GetSceneMaxUndo()
|
public int GetSceneMaxUndo()
|
||||||
{
|
{
|
||||||
|
@ -866,7 +871,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
return m_scene.MaxUndoCount;
|
return m_scene.MaxUndoCount;
|
||||||
return 5;
|
return 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ResetChildPrimPhysicsPositions()
|
public void ResetChildPrimPhysicsPositions()
|
||||||
{
|
{
|
||||||
AbsolutePosition = AbsolutePosition;
|
AbsolutePosition = AbsolutePosition;
|
||||||
|
@ -893,6 +897,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
SceneObjectPart part = GetChildPart(localId);
|
SceneObjectPart part = GetChildPart(localId);
|
||||||
OnGrabPart(part, offsetPos, remoteClient);
|
OnGrabPart(part, offsetPos, remoteClient);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -900,6 +905,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
part.StoreUndoState();
|
part.StoreUndoState();
|
||||||
part.OnGrab(offsetPos, remoteClient);
|
part.OnGrab(offsetPos, remoteClient);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void OnGrabGroup(LLVector3 offsetPos, IClientAPI remoteClient)
|
public virtual void OnGrabGroup(LLVector3 offsetPos, IClientAPI remoteClient)
|
||||||
|
@ -963,19 +969,19 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
public void aggregateScriptEvents()
|
public void aggregateScriptEvents()
|
||||||
{
|
{
|
||||||
uint objectflagupdate = RootPart.GetEffectiveObjectFlags();
|
uint objectflagupdate=(uint)RootPart.GetEffectiveObjectFlags();
|
||||||
|
|
||||||
scriptEvents aggregateScriptEvents = 0;
|
scriptEvents aggregateScriptEvents=0;
|
||||||
|
|
||||||
lock (m_parts)
|
lock (m_parts)
|
||||||
{
|
{
|
||||||
foreach (SceneObjectPart part in m_parts.Values)
|
foreach (SceneObjectPart part in m_parts.Values)
|
||||||
{
|
{
|
||||||
if (part == null)
|
if(part == null)
|
||||||
continue;
|
continue;
|
||||||
if (part != RootPart)
|
if(part != RootPart)
|
||||||
part.ObjectFlags = objectflagupdate;
|
part.ObjectFlags = objectflagupdate;
|
||||||
aggregateScriptEvents |= part.m_aggregateScriptEvents;
|
aggregateScriptEvents |= part.m_aggregateScriptEvents;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1059,139 +1065,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void SetAxisRotation(int axis, int rotate10)
|
|
||||||
{
|
|
||||||
bool setX = false;
|
|
||||||
bool setY = false;
|
|
||||||
bool setZ = false;
|
|
||||||
|
|
||||||
int xaxis = 2;
|
|
||||||
int yaxis = 4;
|
|
||||||
int zaxis = 8;
|
|
||||||
|
|
||||||
if (m_rootPart != null)
|
|
||||||
{
|
|
||||||
setX = ((axis & xaxis) != 0) ? true : false;
|
|
||||||
setY = ((axis & yaxis) != 0) ? true : false;
|
|
||||||
setZ = ((axis & zaxis) != 0) ? true : false;
|
|
||||||
|
|
||||||
float setval = (rotate10 > 0) ? 1f : 0f;
|
|
||||||
|
|
||||||
if (setX)
|
|
||||||
m_rootPart.m_rotationAxis.X = setval;
|
|
||||||
if (setY)
|
|
||||||
m_rootPart.m_rotationAxis.Y = setval;
|
|
||||||
if (setZ)
|
|
||||||
m_rootPart.m_rotationAxis.Z = setval;
|
|
||||||
|
|
||||||
if (setX || setY || setZ)
|
|
||||||
{
|
|
||||||
m_rootPart.SetPhysicsAxisRotation();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int registerTargetWaypoint(LLVector3 target, float tolerance)
|
|
||||||
{
|
|
||||||
scriptPosTarget waypoint = new scriptPosTarget();
|
|
||||||
waypoint.targetPos = target;
|
|
||||||
waypoint.tolerance = tolerance;
|
|
||||||
uint handle = m_scene.PrimIDAllocate();
|
|
||||||
lock (m_targets)
|
|
||||||
{
|
|
||||||
m_targets.Add(handle, waypoint);
|
|
||||||
}
|
|
||||||
return (int) handle;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void unregisterTargetWaypoint(int handle)
|
|
||||||
{
|
|
||||||
lock (m_targets)
|
|
||||||
{
|
|
||||||
if (m_targets.ContainsKey((uint) handle))
|
|
||||||
m_targets.Remove((uint) handle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void checkAtTargets()
|
|
||||||
{
|
|
||||||
if (m_scriptListens_atTarget || m_scriptListens_notAtTarget)
|
|
||||||
{
|
|
||||||
if (m_targets.Count > 0)
|
|
||||||
{
|
|
||||||
bool at_target = false;
|
|
||||||
//LLVector3 targetPos;
|
|
||||||
//uint targetHandle;
|
|
||||||
Dictionary<uint, scriptPosTarget> atTargets = new Dictionary<uint, scriptPosTarget>();
|
|
||||||
lock (m_targets)
|
|
||||||
{
|
|
||||||
foreach (uint idx in m_targets.Keys)
|
|
||||||
{
|
|
||||||
scriptPosTarget target = m_targets[idx];
|
|
||||||
if (Util.GetDistanceTo(target.targetPos, m_rootPart.GroupPosition) <= target.tolerance)
|
|
||||||
{
|
|
||||||
// trigger at_target
|
|
||||||
if (m_scriptListens_atTarget)
|
|
||||||
{
|
|
||||||
// Reusing att.tolerance to hold the index of the target in the targets dictionary
|
|
||||||
// to avoid deadlocking the sim.
|
|
||||||
at_target = true;
|
|
||||||
scriptPosTarget att = new scriptPosTarget();
|
|
||||||
att.targetPos = target.targetPos;
|
|
||||||
att.tolerance = idx;
|
|
||||||
atTargets.Add(idx, att);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (atTargets.Count > 0)
|
|
||||||
{
|
|
||||||
uint[] localids = new uint[0];
|
|
||||||
lock (m_parts)
|
|
||||||
{
|
|
||||||
localids = new uint[m_parts.Count];
|
|
||||||
int cntr = 0;
|
|
||||||
foreach (SceneObjectPart part in m_parts.Values)
|
|
||||||
{
|
|
||||||
localids[cntr] = part.LocalId;
|
|
||||||
cntr++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (int ctr = 0; ctr < localids.Length; ctr++)
|
|
||||||
{
|
|
||||||
foreach (uint target in atTargets.Keys)
|
|
||||||
{
|
|
||||||
scriptPosTarget att = atTargets[target];
|
|
||||||
// Reusing att.tolerance to hold the index of the target in the targets dictionary
|
|
||||||
// to avoid deadlocking the sim.
|
|
||||||
m_scene.TriggerAtTargetEvent(localids[ctr], (uint) att.tolerance, att.targetPos, m_rootPart.GroupPosition);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (m_scriptListens_notAtTarget && !at_target)
|
|
||||||
{
|
|
||||||
//trigger not_at_target
|
|
||||||
uint[] localids = new uint[0];
|
|
||||||
lock (m_parts)
|
|
||||||
{
|
|
||||||
localids = new uint[m_parts.Count];
|
|
||||||
int cntr = 0;
|
|
||||||
foreach (SceneObjectPart part in m_parts.Values)
|
|
||||||
{
|
|
||||||
localids[cntr] = part.LocalId;
|
|
||||||
cntr++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (int ctr = 0; ctr < localids.Length; ctr++)
|
|
||||||
{
|
|
||||||
m_scene.TriggerNotAtTargetEvent(localids[ctr]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Events
|
#region Events
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -1489,8 +1362,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
m_parts.Add(newPart.UUID, newPart);
|
m_parts.Add(newPart.UUID, newPart);
|
||||||
}
|
}
|
||||||
|
|
||||||
SetPartAsNonRoot(newPart);
|
SetPartAsNonRoot(newPart);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -1560,30 +1434,32 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public override void Update()
|
public override void Update()
|
||||||
{
|
{
|
||||||
|
|
||||||
lock (m_parts)
|
lock (m_parts)
|
||||||
{
|
{
|
||||||
//if (m_rootPart.m_IsAttachment)
|
//if (m_rootPart.m_IsAttachment)
|
||||||
//{
|
//{
|
||||||
//foreach (SceneObjectPart part in m_parts.Values)
|
//foreach (SceneObjectPart part in m_parts.Values)
|
||||||
//{
|
//{
|
||||||
//part.SendScheduledUpdates();
|
//part.SendScheduledUpdates();
|
||||||
|
//}
|
||||||
|
//return;
|
||||||
//}
|
//}
|
||||||
//return;
|
|
||||||
//}
|
|
||||||
|
|
||||||
if (Util.GetDistanceTo(lastPhysGroupPos, AbsolutePosition) > 0.02)
|
if (Util.GetDistanceTo(lastPhysGroupPos, AbsolutePosition) > 0.02)
|
||||||
{
|
{
|
||||||
m_rootPart.UpdateFlag = 1;
|
m_rootPart.UpdateFlag = 1;
|
||||||
lastPhysGroupPos = AbsolutePosition;
|
lastPhysGroupPos = AbsolutePosition;
|
||||||
}
|
}
|
||||||
//foreach (SceneObjectPart part in m_parts.Values)
|
//foreach (SceneObjectPart part in m_parts.Values)
|
||||||
//{
|
//{
|
||||||
//if (part.UpdateFlag == 0) part.UpdateFlag = 1;
|
//if (part.UpdateFlag == 0) part.UpdateFlag = 1;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
|
||||||
checkAtTargets();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
checkAtTargets();
|
||||||
|
|
||||||
|
|
||||||
if ((Math.Abs(lastPhysGroupRot.W - GroupRotation.W) > 0.1)
|
if ((Math.Abs(lastPhysGroupRot.W - GroupRotation.W) > 0.1)
|
||||||
|| (Math.Abs(lastPhysGroupRot.X - GroupRotation.X) > 0.1)
|
|| (Math.Abs(lastPhysGroupRot.X - GroupRotation.X) > 0.1)
|
||||||
|
@ -1887,7 +1763,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
public void DelinkFromGroup(uint partID)
|
public void DelinkFromGroup(uint partID)
|
||||||
{
|
{
|
||||||
SceneObjectPart linkPart = GetChildPart(partID);
|
SceneObjectPart linkPart = GetChildPart(partID);
|
||||||
|
|
||||||
if (null != linkPart)
|
if (null != linkPart)
|
||||||
{
|
{
|
||||||
linkPart.ClearUndoState();
|
linkPart.ClearUndoState();
|
||||||
|
@ -2072,10 +1948,10 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
proper.ObjectData[0].FromTaskID = LLUUID.Zero;
|
proper.ObjectData[0].FromTaskID = LLUUID.Zero;
|
||||||
proper.ObjectData[0].GroupID = LLUUID.Zero;
|
proper.ObjectData[0].GroupID = LLUUID.Zero;
|
||||||
proper.ObjectData[0].InventorySerial = (short) m_rootPart.InventorySerial;
|
proper.ObjectData[0].InventorySerial = (short) m_rootPart.InventorySerial;
|
||||||
|
|
||||||
proper.ObjectData[0].LastOwnerID = m_rootPart.LastOwnerID;
|
proper.ObjectData[0].LastOwnerID = m_rootPart.LastOwnerID;
|
||||||
// proper.ObjectData[0].LastOwnerID = LLUUID.Zero;
|
// proper.ObjectData[0].LastOwnerID = LLUUID.Zero;
|
||||||
|
|
||||||
proper.ObjectData[0].ObjectID = UUID;
|
proper.ObjectData[0].ObjectID = UUID;
|
||||||
proper.ObjectData[0].OwnerID = m_rootPart.OwnerID;
|
proper.ObjectData[0].OwnerID = m_rootPart.OwnerID;
|
||||||
proper.ObjectData[0].TouchName = Helpers.StringToField(m_rootPart.TouchName);
|
proper.ObjectData[0].TouchName = Helpers.StringToField(m_rootPart.TouchName);
|
||||||
|
@ -2515,5 +2391,140 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
internal void SetAxisRotation(int axis, int rotate10)
|
||||||
|
{
|
||||||
|
bool setX = false;
|
||||||
|
bool setY = false;
|
||||||
|
bool setZ = false;
|
||||||
|
|
||||||
|
int xaxis = 2;
|
||||||
|
int yaxis = 4;
|
||||||
|
int zaxis = 8;
|
||||||
|
|
||||||
|
if (m_rootPart != null)
|
||||||
|
{
|
||||||
|
setX = ((axis & xaxis) != 0) ? true : false;
|
||||||
|
setY = ((axis & yaxis) != 0) ? true : false;
|
||||||
|
setZ = ((axis & zaxis) != 0) ? true : false;
|
||||||
|
|
||||||
|
float setval = (rotate10 > 0) ? 1f : 0f;
|
||||||
|
|
||||||
|
if (setX)
|
||||||
|
m_rootPart.m_rotationAxis.X = setval;
|
||||||
|
if (setY)
|
||||||
|
m_rootPart.m_rotationAxis.Y = setval;
|
||||||
|
if (setZ)
|
||||||
|
m_rootPart.m_rotationAxis.Z = setval;
|
||||||
|
|
||||||
|
if (setX || setY || setZ)
|
||||||
|
{
|
||||||
|
m_rootPart.SetPhysicsAxisRotation();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int registerTargetWaypoint(LLVector3 target, float tolerance)
|
||||||
|
{
|
||||||
|
scriptPosTarget waypoint = new scriptPosTarget();
|
||||||
|
waypoint.targetPos = target;
|
||||||
|
waypoint.tolerance = tolerance;
|
||||||
|
uint handle = m_scene.PrimIDAllocate();
|
||||||
|
lock (m_targets)
|
||||||
|
{
|
||||||
|
m_targets.Add(handle, waypoint);
|
||||||
|
}
|
||||||
|
return (int)handle;
|
||||||
|
}
|
||||||
|
public void unregisterTargetWaypoint(int handle)
|
||||||
|
{
|
||||||
|
lock (m_targets)
|
||||||
|
{
|
||||||
|
if (m_targets.ContainsKey((uint)handle))
|
||||||
|
m_targets.Remove((uint)handle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkAtTargets()
|
||||||
|
{
|
||||||
|
if (m_scriptListens_atTarget || m_scriptListens_notAtTarget)
|
||||||
|
{
|
||||||
|
if (m_targets.Count > 0)
|
||||||
|
{
|
||||||
|
bool at_target = false;
|
||||||
|
//LLVector3 targetPos;
|
||||||
|
//uint targetHandle;
|
||||||
|
Dictionary<uint, scriptPosTarget> atTargets = new Dictionary<uint, scriptPosTarget>();
|
||||||
|
lock (m_targets)
|
||||||
|
{
|
||||||
|
foreach (uint idx in m_targets.Keys)
|
||||||
|
{
|
||||||
|
scriptPosTarget target = m_targets[idx];
|
||||||
|
if (Util.GetDistanceTo(target.targetPos, m_rootPart.GroupPosition) <= target.tolerance)
|
||||||
|
{
|
||||||
|
// trigger at_target
|
||||||
|
if (m_scriptListens_atTarget)
|
||||||
|
{
|
||||||
|
// Reusing att.tolerance to hold the index of the target in the targets dictionary
|
||||||
|
// to avoid deadlocking the sim.
|
||||||
|
at_target = true;
|
||||||
|
scriptPosTarget att = new scriptPosTarget();
|
||||||
|
att.targetPos = target.targetPos;
|
||||||
|
att.tolerance = (float)idx;
|
||||||
|
atTargets.Add(idx, att);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (atTargets.Count > 0)
|
||||||
|
{
|
||||||
|
uint[] localids = new uint[0];
|
||||||
|
lock (m_parts)
|
||||||
|
{
|
||||||
|
localids = new uint[m_parts.Count];
|
||||||
|
int cntr = 0;
|
||||||
|
foreach (SceneObjectPart part in m_parts.Values)
|
||||||
|
{
|
||||||
|
localids[cntr] = part.LocalId;
|
||||||
|
cntr++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int ctr = 0; ctr < localids.Length; ctr++)
|
||||||
|
{
|
||||||
|
foreach (uint target in atTargets.Keys)
|
||||||
|
{
|
||||||
|
scriptPosTarget att = atTargets[target];
|
||||||
|
// Reusing att.tolerance to hold the index of the target in the targets dictionary
|
||||||
|
// to avoid deadlocking the sim.
|
||||||
|
m_scene.TriggerAtTargetEvent(localids[ctr], (uint)att.tolerance, att.targetPos, m_rootPart.GroupPosition);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (m_scriptListens_notAtTarget && !at_target)
|
||||||
|
{
|
||||||
|
//trigger not_at_target
|
||||||
|
uint[] localids = new uint[0];
|
||||||
|
lock (m_parts)
|
||||||
|
{
|
||||||
|
localids = new uint[m_parts.Count];
|
||||||
|
int cntr = 0;
|
||||||
|
foreach (SceneObjectPart part in m_parts.Values)
|
||||||
|
{
|
||||||
|
localids[cntr] = part.LocalId;
|
||||||
|
cntr++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int ctr = 0; ctr < localids.Length; ctr++)
|
||||||
|
{
|
||||||
|
m_scene.TriggerNotAtTargetEvent(localids[ctr]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue