diff --git a/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs b/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs index 7e498d6fda..dd3f4b34f7 100644 --- a/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs +++ b/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs @@ -68,7 +68,7 @@ namespace OpenSim.ApplicationPlugins.LoadRegions 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); } @@ -106,7 +106,7 @@ namespace OpenSim.ApplicationPlugins.LoadRegions if (regionhandle == regionsToLoad[i].RegionHandle) { m_log.Debug("[LOADREGIONS]: Creating Region: " + regionsToLoad[i].RegionName + " (ThreadID: " + - Thread.CurrentThread.ManagedThreadId + ")"); + Thread.CurrentThread.ManagedThreadId.ToString() + ")"); openSim.CreateRegion(regionsToLoad[i], true); } } diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs index b7067e76b8..e540e4ddac 100644 --- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs +++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs @@ -54,13 +54,11 @@ namespace OpenSim.ApplicationPlugins.RemoteController private BaseHttpServer m_httpd; private string requiredPassword = String.Empty; - #region IApplicationPlugin Members - public void Initialise(OpenSimMain openSim) { try { - if (openSim.ConfigSource.Configs["RemoteAdmin"] != null && + if (openSim.ConfigSource.Configs["RemoteAdmin"] != null && openSim.ConfigSource.Configs["RemoteAdmin"].GetBoolean("enabled", false)) { 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) { XmlRpcResponse response = new XmlRpcResponse(); @@ -98,14 +90,13 @@ namespace OpenSim.ApplicationPlugins.RemoteController Hashtable responseData = new Hashtable(); m_log.Info("[RADMIN]: Request to restart Region."); - try - { - checkStringParameters(request, new[] {"password", "regionID"}); + try { + checkStringParameters(request, new string[] { "password", "regionID" }); if (requiredPassword != String.Empty && (!requestData.Contains("password") || (string) requestData["password"] != requiredPassword)) throw new Exception("wrong password"); - + LLUUID regionID = new LLUUID((string) requestData["regionID"]); responseData["accepted"] = "true"; @@ -115,11 +106,11 @@ namespace OpenSim.ApplicationPlugins.RemoteController if (!m_app.SceneManager.TryGetScene(regionID, out rebootedScene)) throw new Exception("region not found"); - + responseData["rebooting"] = "true"; rebootedScene.Restart(30); - } - catch (Exception e) + } + catch(Exception e) { m_log.ErrorFormat("[RADMIN]: Restart region: failed: {0}", e.Message); 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 responseData = new Hashtable(); - try - { - checkStringParameters(request, new[] {"password", "message"}); + try { + checkStringParameters(request, new string[] { "password", "message" }); if (requiredPassword != String.Empty && (!requestData.Contains("password") || (string) requestData["password"] != requiredPassword)) throw new Exception("wrong password"); - + string message = (string) requestData["message"]; m_log.InfoFormat("[RADMIN]: Broadcasting: {0}", message); @@ -155,7 +145,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController m_app.SceneManager.SendGeneralMessage(message); } - catch (Exception e) + catch(Exception e) { m_log.ErrorFormat("[RADMIN]: Broadcasting: failed: {0}", e.Message); m_log.DebugFormat("[RADMIN]: Broadcasting: failed: {0}", e.ToString()); @@ -172,25 +162,24 @@ namespace OpenSim.ApplicationPlugins.RemoteController public XmlRpcResponse XmlRpcLoadHeightmapMethod(XmlRpcRequest request) { 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()); foreach (string k in requestData.Keys) { - m_log.DebugFormat("[RADMIN]: Load Terrain: XmlRpc {0}: >{1}< {2}", - k, requestData[k], ((string) requestData[k]).Length); + m_log.DebugFormat("[RADMIN]: Load Terrain: XmlRpc {0}: >{1}< {2}", + k, (string)requestData[k], ((string)requestData[k]).Length); } Hashtable responseData = new Hashtable(); - try - { - checkStringParameters(request, new[] {"password", "filename", "regionid"}); + try { + checkStringParameters(request, new string[] { "password", "filename", "regionid"}); if (requiredPassword != String.Empty && - (!requestData.Contains("password") || (string) requestData["password"] != requiredPassword)) + (!requestData.Contains("password") || (string)requestData["password"] != requiredPassword)) throw new Exception("wrong password"); - string file = (string) requestData["filename"]; + string file = (string)requestData["filename"]; LLUUID regionID = (string) requestData["regionid"]; m_log.InfoFormat("[RADMIN]: Terrain Loading: {0}", file); @@ -209,7 +198,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController response.Value = responseData; } - catch (Exception e) + catch (Exception e) { m_log.ErrorFormat("[RADMIN] Terrain Loading: failed: {0}", e.Message); 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 responseData = new Hashtable(); - try - { + try { if (requiredPassword != String.Empty && (!requestData.Contains("password") || (string) requestData["password"] != requiredPassword)) throw new Exception("wrong password"); @@ -239,14 +227,14 @@ namespace OpenSim.ApplicationPlugins.RemoteController int timeout = 2000; - if (requestData.ContainsKey("shutdown") && + if (requestData.ContainsKey("shutdown") && ((string) requestData["shutdown"] == "delayed") && requestData.ContainsKey("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."); - } + } else { m_app.SceneManager.SendGeneralMessage("Region is going down now."); @@ -255,12 +243,12 @@ namespace OpenSim.ApplicationPlugins.RemoteController // Perform shutdown Timer shutdownTimer = new Timer(timeout); // Wait before firing shutdownTimer.AutoReset = false; - shutdownTimer.Elapsed += shutdownTimer_Elapsed; + shutdownTimer.Elapsed += new ElapsedEventHandler(shutdownTimer_Elapsed); shutdownTimer.Start(); responseData["success"] = "true"; } - catch (Exception e) + catch (Exception e) { m_log.ErrorFormat("[RADMIN] Shutdown: failed: {0}", e.Message); m_log.DebugFormat("[RADMIN] Shutdown: failed: {0}", e.ToString()); @@ -284,9 +272,9 @@ namespace OpenSim.ApplicationPlugins.RemoteController Hashtable requestData = (Hashtable) request.Params[0]; foreach (string p in param) { - if (!requestData.Contains(p)) + if (!requestData.Contains(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)); } } @@ -296,7 +284,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController Hashtable requestData = (Hashtable) request.Params[0]; foreach (string p in param) { - if (!requestData.Contains(p)) + if (!requestData.Contains(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 responseData = new Hashtable(); - try - { - checkStringParameters(request, new[] - { - "password", - "region_name", - "region_master_first", "region_master_last", - "region_master_password", - "listen_ip", "external_address" - }); - checkIntegerParams(request, new[] {"region_x", "region_y", "listen_port"}); + try { + checkStringParameters(request, new string[] { "password", + "region_name", + "region_master_first", "region_master_last", + "region_master_password", + "listen_ip", "external_address"}); + checkIntegerParams(request, new string[] { "region_x", "region_y", "listen_port"}); // check password 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 Scene scene = null; LLUUID regionID = LLUUID.Zero; - if (requestData.ContainsKey("region_id") && - !String.IsNullOrEmpty((string) requestData["region_id"])) + if (requestData.ContainsKey("region_id") && + !String.IsNullOrEmpty((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}>", scene.RegionInfo.RegionName, scene.RegionInfo.RegionID, scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY)); - } - else + } + else { regionID = LLUUID.Random(); 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, // 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}>", scene.RegionInfo.RegionName, scene.RegionInfo.RegionID, scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY)); @@ -411,46 +395,46 @@ namespace OpenSim.ApplicationPlugins.RemoteController region.RegionLocX, region.RegionLocY, scene.RegionInfo.RegionName, scene.RegionInfo.RegionID, scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY)); - + // Security risk [and apparently not used] // if (requestData.ContainsKey("datastore")) // region.DataStore = (string) requestData["datastore"]; - region.InternalEndPoint = + region.InternalEndPoint = new IPEndPoint(IPAddress.Parse((string) requestData["listen_ip"]), 0); - + region.InternalEndPoint.Port = (Int32) requestData["listen_port"]; if (0 == region.InternalEndPoint.Port) throw new Exception("listen_port is 0"); 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}>", - region.InternalEndPoint.Address, + region.InternalEndPoint.Address, region.InternalEndPoint.Port, scene.RegionInfo.RegionName, scene.RegionInfo.RegionID, scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY)); - + region.ExternalHostName = (string) requestData["external_address"]; - + region.MasterAvatarFirstName = (string) requestData["region_master_first"]; region.MasterAvatarLastName = (string) requestData["region_master_last"]; region.MasterAvatarSandboxPassword = (string) requestData["region_master_password"]; - bool persist = Convert.ToBoolean((string) requestData["persist"]); - if (persist) + bool persist = Convert.ToBoolean((string)requestData["persist"]); + if (persist) { string regionConfigPath = Path.Combine(Path.Combine(Util.configDir(), "Regions"), String.Format("{0}x{1}-{2}.xml", - region.RegionLocX, - region.RegionLocY, - regionID)); - m_log.DebugFormat("[RADMIN] CreateRegion: persisting region {0} to {1}", + region.RegionLocX.ToString(), + region.RegionLocY.ToString(), + regionID.ToString())); + m_log.DebugFormat("[RADMIN] CreateRegion: persisting region {0} to {1}", region.RegionID, regionConfigPath); region.SaveRegionToFile("dynamic region", regionConfigPath); } - + m_app.CreateRegion(region); - responseData["success"] = "true"; + responseData["success"] = "true"; responseData["region_name"] = region.RegionName; responseData["region_uuid"] = region.RegionID.ToString(); @@ -513,52 +497,48 @@ namespace OpenSim.ApplicationPlugins.RemoteController Hashtable requestData = (Hashtable) request.Params[0]; Hashtable responseData = new Hashtable(); - try + try { // check completeness - checkStringParameters(request, new[] - { - "password", "user_firstname", - "user_lastname", "user_password" - }); - checkIntegerParams(request, new[] {"start_region_x", "start_region_y"}); + checkStringParameters(request, new string[] { "password", "user_firstname", + "user_lastname", "user_password" }); + checkIntegerParams(request, new string[] { "start_region_x", "start_region_y" }); // check password 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 string firstname = (string) requestData["user_firstname"]; - string lastname = (string) requestData["user_lastname"]; - string passwd = (string) requestData["user_password"]; - uint regX = Convert.ToUInt32((Int32) requestData["start_region_x"]); - uint regY = Convert.ToUInt32((Int32) requestData["start_region_y"]); - + string lastname = (string) requestData["user_lastname"]; + string passwd = (string) requestData["user_password"]; + uint regX = Convert.ToUInt32((Int32)requestData["start_region_x"]); + uint regY = Convert.ToUInt32((Int32)requestData["start_region_y"]); + 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)); LLUUID userID = m_app.CreateUser(firstname, lastname, passwd, regX, regY); - - if (userID == LLUUID.Zero) - throw new Exception(String.Format("failed to create new user {0} {1}", - firstname, lastname)); - - responseData["success"] = "true"; + + if (userID == LLUUID.Zero) throw new Exception(String.Format("failed to create new user {0} {1}", + firstname, lastname)); + + responseData["success"] = "true"; responseData["avatar_uuid"] = userID.ToString(); response.Value = responseData; 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.DebugFormat("[RADMIN] CreateUser: failed: {0}", e.ToString()); - responseData["success"] = "false"; + responseData["success"] = "false"; responseData["avatar_uuid"] = LLUUID.Zero.ToString(); - responseData["error"] = e.Message; + responseData["error"] = e.Message; response.Value = responseData; } @@ -573,33 +553,33 @@ namespace OpenSim.ApplicationPlugins.RemoteController Hashtable requestData = (Hashtable) request.Params[0]; Hashtable responseData = new Hashtable(); - try + try { // 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)); - if (String.IsNullOrEmpty((string) requestData[p])) + if (String.IsNullOrEmpty((string)requestData[p])) throw new Exception(String.Format("parameter {0} is empty")); } - + // check password if (!String.IsNullOrEmpty(requiredPassword) && - (string) requestData["password"] != requiredPassword) throw new Exception("wrong password"); - - string filename = (string) requestData["filename"]; + (string)requestData["password"] != requiredPassword) throw new Exception("wrong password"); + + string filename = (string)requestData["filename"]; if (requestData.Contains("region_uuid")) { - LLUUID region_uuid = (string) requestData["region_uuid"]; - if (!m_app.SceneManager.TrySetCurrentScene(region_uuid)) - throw new Exception(String.Format("failed to switch to region {0}", region_uuid)); + LLUUID region_uuid = (string)requestData["region_uuid"]; + if (!m_app.SceneManager.TrySetCurrentScene(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()); } else if (requestData.Contains("region_name")) { - string region_name = (string) requestData["region_name"]; - if (!m_app.SceneManager.TrySetCurrentScene(region_name)) + string region_name = (string)requestData["region_name"]; + if (!m_app.SceneManager.TrySetCurrentScene(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); } @@ -608,23 +588,27 @@ namespace OpenSim.ApplicationPlugins.RemoteController responseData["switched"] = "true"; m_app.SceneManager.LoadCurrentSceneFromXml(filename, true, new LLVector3(0, 0, 0)); - responseData["loaded"] = "true"; - - response.Value = responseData; + responseData["loaded"] = "true"; + + response.Value = responseData; } catch (Exception e) { m_log.InfoFormat("[RADMIN] LoadXml: {0}", e.Message); m_log.DebugFormat("[RADMIN] LoadXml: {0}", e.ToString()); - responseData["loaded"] = "false"; + responseData["loaded"] = "false"; responseData["switched"] = "false"; - responseData["error"] = e.Message; - - response.Value = responseData; + responseData["error"] = e.Message; + + response.Value = responseData; } - + return response; } + + public void Close() + { + } } } \ No newline at end of file diff --git a/OpenSim/Data/MSSQL/MSSQLAssetData.cs b/OpenSim/Data/MSSQL/MSSQLAssetData.cs index 5b4fa4e3fa..5ae60a1fb9 100644 --- a/OpenSim/Data/MSSQL/MSSQLAssetData.cs +++ b/OpenSim/Data/MSSQL/MSSQLAssetData.cs @@ -70,7 +70,7 @@ namespace OpenSim.Data.MSSQL override public AssetBase FetchAsset(LLUUID assetID) { - AssetBase asset; + AssetBase asset = null; Dictionary param = new Dictionary(); param["id"] = assetID.ToString(); diff --git a/OpenSim/Grid/AssetServer/Main.cs b/OpenSim/Grid/AssetServer/Main.cs index c26c50666d..26f4bc8c42 100644 --- a/OpenSim/Grid/AssetServer/Main.cs +++ b/OpenSim/Grid/AssetServer/Main.cs @@ -46,48 +46,14 @@ namespace OpenSim.Grid.AssetServer { 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 OpenAsset_Main() - { - m_console = new ConsoleBase("OpenAsset", 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 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 + public static OpenAsset_Main assetserver; + + // Temporarily hardcoded - should be a plugin + protected IAssetLoader assetLoader = new AssetLoaderFileSystem(); + + private IAssetProvider m_assetProvider; [STAThread] 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() { m_config = new AssetConfig("ASSET SERVER", (Path.Combine(Util.configDir(), "AssetServer_Config.xml"))); @@ -187,18 +160,42 @@ namespace OpenSim.Grid.AssetServer catch (Exception e) { m_log.Warn("[ASSET]: setupDB() - Exception occured"); - m_log.Warn("[ASSET]: " + e); + m_log.Warn("[ASSET]: " + e.ToString()); } } public void LoadDefaultAssets() { - assetLoader.ForEachDefaultXmlAsset(StoreAsset); + assetLoader.ForEachDefaultXmlAsset(StoreAsset); } protected void StoreAsset(AssetBase 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; + } + } } -} \ No newline at end of file +} diff --git a/OpenSim/Grid/AssetServer/Properties/AssemblyInfo.cs b/OpenSim/Grid/AssetServer/Properties/AssemblyInfo.cs index 3bae064217..6f219a6d39 100644 --- a/OpenSim/Grid/AssetServer/Properties/AssemblyInfo.cs +++ b/OpenSim/Grid/AssetServer/Properties/AssemblyInfo.cs @@ -60,4 +60,4 @@ using System.Runtime.InteropServices; // [assembly : AssemblyVersion("1.0.0.0")] -[assembly : AssemblyFileVersion("1.0.0.0")] \ No newline at end of file +[assembly : AssemblyFileVersion("1.0.0.0")] diff --git a/OpenSim/Grid/AssetServer/RestService.cs b/OpenSim/Grid/AssetServer/RestService.cs index 93f86b834e..ece826e8ef 100644 --- a/OpenSim/Grid/AssetServer/RestService.cs +++ b/OpenSim/Grid/AssetServer/RestService.cs @@ -43,8 +43,8 @@ namespace OpenSim.Grid.AssetServer { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private readonly IAssetProvider m_assetProvider; private OpenAsset_Main m_assetManager; + private IAssetProvider m_assetProvider; /// /// Constructor. @@ -58,28 +58,28 @@ namespace OpenSim.Grid.AssetServer m_assetManager = assetManager; m_assetProvider = assetProvider; } - + public override byte[] Handle(string path, Stream request) { string param = GetParam(path); byte[] result = new byte[] {}; - string[] p = param.Split(new[] {'/', '?', '&'}, StringSplitOptions.RemoveEmptyEntries); + string[] p = param.Split(new char[] {'/', '?', '&'}, StringSplitOptions.RemoveEmptyEntries); if (p.Length > 0) { - LLUUID assetID = null; - + LLUUID assetID = null; + if (!LLUUID.TryParse(p[0], out assetID)) { m_log.InfoFormat( "[REST]: GET:/asset ignoring request with malformed UUID {0}", p[0]); return result; - } + } if (StatsManager.AssetStats != null) StatsManager.AssetStats.AddRequest(); - + AssetBase asset = m_assetProvider.FetchAsset(assetID); if (asset != null) { @@ -94,39 +94,32 @@ namespace OpenSim.Grid.AssetServer //StreamReader sr = new StreamReader(ms); result = ms.GetBuffer(); - + m_log.InfoFormat( "[REST]: GET:/asset found {0} with name {1}, size {2} bytes", assetID, asset.Name, result.Length); - Array.Resize(ref result, (int) ms.Length); + Array.Resize(ref result, (int) ms.Length); } else { if (StatsManager.AssetStats != null) StatsManager.AssetStats.AddNotFoundRequest(); - + m_log.InfoFormat("[REST]: GET:/asset failed to find {0}", assetID); } } - return result; - } + return result; + } } public class PostAssetStreamHandler : BaseStreamHandler { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private readonly IAssetProvider m_assetProvider; private OpenAsset_Main m_assetManager; - - public PostAssetStreamHandler(OpenAsset_Main assetManager, IAssetProvider assetProvider) - : base("POST", "/assets") - { - m_assetManager = assetManager; - m_assetProvider = assetProvider; - } + private IAssetProvider m_assetProvider; public override byte[] Handle(string path, Stream request) { @@ -146,5 +139,12 @@ namespace OpenSim.Grid.AssetServer return new byte[] {}; } + + public PostAssetStreamHandler(OpenAsset_Main assetManager, IAssetProvider assetProvider) + : base("POST", "/assets") + { + m_assetManager = assetManager; + m_assetProvider = assetProvider; + } } -} \ No newline at end of file +} diff --git a/OpenSim/Grid/GridServer/GridManager.cs b/OpenSim/Grid/GridServer/GridManager.cs index 32f002a4f3..7eb9c3474f 100644 --- a/OpenSim/Grid/GridServer/GridManager.cs +++ b/OpenSim/Grid/GridServer/GridManager.cs @@ -44,11 +44,11 @@ namespace OpenSim.Grid.GridServer { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private readonly Dictionary _logplugins = new Dictionary(); + private Dictionary _plugins = new Dictionary(); + private Dictionary _logplugins = new Dictionary(); // This is here so that the grid server can hand out MessageServer settings to regions on registration - private readonly List _MessageServers = new List(); - private readonly Dictionary _plugins = new Dictionary(); + private List _MessageServers = new List(); public GridConfig Config; @@ -72,7 +72,7 @@ namespace OpenSim.Grid.GridServer if (typeInterface != null) { IGridData plug = - (IGridData) Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); + (IGridData)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); plug.Initialise(); _plugins.Add(plug.getName(), plug); m_log.Info("[DATA]: Added IGridData Interface"); @@ -84,7 +84,7 @@ namespace OpenSim.Grid.GridServer if (typeInterface != null) { ILogData plug = - (ILogData) Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); + (ILogData)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); plug.Initialise(); _logplugins.Add(plug.getName(), plug); m_log.Info("[DATA]: Added ILogData Interface"); @@ -152,7 +152,7 @@ namespace OpenSim.Grid.GridServer } 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; @@ -218,20 +218,20 @@ namespace OpenSim.Grid.GridServer { if ( GetRegion( - Util.UIntsToLong((uint) ((central_region.regionLocX + x) * Constants.RegionSize), - (uint) (central_region.regionLocY + y) * Constants.RegionSize)) != null) + Util.UIntsToLong((uint)((central_region.regionLocX + x) * Constants.RegionSize), + (uint)(central_region.regionLocY + y) * Constants.RegionSize)) != null) { neighbour = GetRegion( - Util.UIntsToLong((uint) ((central_region.regionLocX + x) * Constants.RegionSize), - (uint) (central_region.regionLocY + y) * Constants.RegionSize)); + Util.UIntsToLong((uint)((central_region.regionLocX + x) * Constants.RegionSize), + (uint)(central_region.regionLocY + y) * Constants.RegionSize)); response += ""; response += "" + neighbour.serverIP + ""; - response += "" + neighbour.serverPort + ""; - response += "" + neighbour.regionLocX + ""; - response += "" + neighbour.regionLocY + ""; - response += "" + neighbour.regionHandle + ""; + response += "" + neighbour.serverPort.ToString() + ""; + response += "" + neighbour.regionLocX.ToString() + ""; + response += "" + neighbour.regionLocY.ToString() + ""; + response += "" + neighbour.regionHandle.ToString() + ""; response += ""; } } @@ -287,10 +287,10 @@ namespace OpenSim.Grid.GridServer RegionProfileData sim; RegionProfileData existingSim; - Hashtable requestData = (Hashtable) request.Params[0]; + Hashtable requestData = (Hashtable)request.Params[0]; 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."); return ErrorResponse("No UUID passed to grid server - unable to connect you"); @@ -303,7 +303,7 @@ namespace OpenSim.Grid.GridServer catch (FormatException e) { 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); @@ -329,7 +329,7 @@ namespace OpenSim.Grid.GridServer { DataResponse insertResponse; - if (existingSim == null) + if( existingSim == null ) { insertResponse = kvp.Value.AddProfile(sim); } @@ -348,20 +348,20 @@ namespace OpenSim.Grid.GridServer break; case DataResponse.RESPONSE_INVALIDCREDENTIALS: m_log.Warn("[storage]: " + - "New sim creation failed (Invalid Credentials): " + sim.regionName); + "New sim creation failed (Invalid Credentials): " + sim.regionName); break; case DataResponse.RESPONSE_AUTHREQUIRED: m_log.Warn("[storage]: " + - "New sim creation failed (Authentication Required): " + - sim.regionName); + "New sim creation failed (Authentication Required): " + + sim.regionName); break; } } catch (Exception e) { m_log.Warn("[storage]: " + - "Unable to add region " + sim.UUID + " via " + kvp.Key); - m_log.Warn("[storage]: " + e); + "Unable to add region " + sim.UUID.ToString() + " via " + kvp.Key); + 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 + " at location " + sim.regionLocX + - " " + sim.regionLocY + " with TheSim.regionRecvKey " + sim.regionRecvKey + "(" + Config.SimSendKey + - ") and TheSim.regionRecvKey " + sim.regionSendKey + "(" + Config.SimRecvKey + ") "); + " " + sim.regionLocY + " with TheSim.regionRecvKey " + sim.regionRecvKey + "(" + Config.SimSendKey + ") and TheSim.regionRecvKey " + sim.regionSendKey + "(" + Config.SimRecvKey + ") "); } else { @@ -390,8 +389,7 @@ namespace OpenSim.Grid.GridServer } else { - m_log.Warn("[grid]: Failed to add new region " + sim.regionName + " at location " + sim.regionLocX + " " + sim.regionLocY + - " currently occupied by " + existingSim.regionName); + m_log.Warn("[grid]: Failed to add new region " + sim.regionName + " at location " + sim.regionLocX + " " + sim.regionLocY + " currently occupied by " + existingSim.regionName); return ErrorResponse("Another region already exists at that location. Try another"); } } @@ -466,7 +464,7 @@ namespace OpenSim.Grid.GridServer foreach (KeyValuePair aSim in neighbours) { 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["region_locx"] = aSim.Value.regionLocX.ToString(); NeighbourBlock["region_locy"] = aSim.Value.regionLocY.ToString(); @@ -487,13 +485,13 @@ namespace OpenSim.Grid.GridServer { if ( GetRegion( - Helpers.UIntsToLong((uint) ((sim.regionLocX + x) * Constants.RegionSize), - (uint) (sim.regionLocY + y) * Constants.RegionSize)) != null) + Helpers.UIntsToLong((uint)((sim.regionLocX + x) * Constants.RegionSize), + (uint)(sim.regionLocY + y) * Constants.RegionSize)) != null) { neighbour = GetRegion( - Helpers.UIntsToLong((uint) ((sim.regionLocX + x) * Constants.RegionSize), - (uint) (sim.regionLocY + y) * Constants.RegionSize)); + Helpers.UIntsToLong((uint)((sim.regionLocX + x) * Constants.RegionSize), + (uint)(sim.regionLocY + y) * Constants.RegionSize)); NeighbourBlock = new Hashtable(); NeighbourBlock["sim_ip"] = Util.GetHostFromDNS(neighbour.serverIP).ToString(); @@ -521,26 +519,27 @@ namespace OpenSim.Grid.GridServer RegionProfileData sim; sim = new RegionProfileData(); - sim.UUID = new LLUUID((string) requestData["UUID"]); - sim.originUUID = new LLUUID((string) requestData["originUUID"]); + sim.UUID = new LLUUID((string)requestData["UUID"]); + sim.originUUID = new LLUUID((string)requestData["originUUID"]); sim.regionRecvKey = String.Empty; sim.regionSendKey = String.Empty; - + if (requestData.ContainsKey("region_secret")) { - string regionsecret = (string) requestData["region_secret"]; + string regionsecret = (string)requestData["region_secret"]; if (regionsecret.Length > 0) sim.regionSecret = regionsecret; else sim.regionSecret = Config.SimRecvKey; + } else { sim.regionSecret = Config.SimRecvKey; } - - + + sim.regionDataURI = String.Empty; sim.regionAssetURI = Config.DefaultAssetServer; sim.regionAssetRecvKey = Config.AssetRecvKey; @@ -549,16 +548,16 @@ namespace OpenSim.Grid.GridServer sim.regionUserSendKey = Config.UserSendKey; sim.regionUserRecvKey = Config.UserRecvKey; - sim.serverIP = (string) requestData["sim_ip"]; - sim.serverPort = Convert.ToUInt32((string) requestData["sim_port"]); - sim.httpPort = Convert.ToUInt32((string) requestData["http_port"]); - sim.remotingPort = Convert.ToUInt32((string) requestData["remoting_port"]); - sim.regionLocX = Convert.ToUInt32((string) requestData["region_locx"]); - sim.regionLocY = Convert.ToUInt32((string) requestData["region_locy"]); + sim.serverIP = (string)requestData["sim_ip"]; + sim.serverPort = Convert.ToUInt32((string)requestData["sim_port"]); + sim.httpPort = Convert.ToUInt32((string)requestData["http_port"]); + sim.remotingPort = Convert.ToUInt32((string)requestData["remoting_port"]); + sim.regionLocX = Convert.ToUInt32((string)requestData["region_locx"]); + sim.regionLocY = Convert.ToUInt32((string)requestData["region_locy"]); sim.regionLocZ = 0; 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; } @@ -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 // OSG1GridServices for the region's owner - sim.owner_uuid = (string) requestData["master_avatar_uuid"]; + sim.owner_uuid = (string)requestData["master_avatar_uuid"]; try { - sim.regionRecvKey = (string) requestData["recvkey"]; - sim.regionSendKey = (string) requestData["authkey"]; - } - catch (KeyNotFoundException) - { + sim.regionRecvKey = (string)requestData["recvkey"]; + sim.regionSendKey = (string)requestData["authkey"]; } + catch (KeyNotFoundException) { } 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.regionName = (string) requestData["sim_name"]; + sim.regionName = (string)requestData["sim_name"]; return sim; } @@ -607,7 +604,7 @@ namespace OpenSim.Grid.GridServer //RegionProfileData TheSim = null; string uuid; - Hashtable requestData = (Hashtable) request.Params[0]; + Hashtable requestData = (Hashtable)request.Params[0]; if (requestData.ContainsKey("UUID")) { @@ -627,7 +624,7 @@ namespace OpenSim.Grid.GridServer //OpenSim.Data.MySQL.MySQLGridData dbengine = new OpenSim.Data.MySQL.MySQLGridData(); try { - MySQLGridData mysqldata = (MySQLGridData) (kvp.Value); + MySQLGridData mysqldata = (MySQLGridData)(kvp.Value); //DataResponse insertResponse = mysqldata.DeleteProfile(TheSim); DataResponse insertResponse = mysqldata.DeleteProfile(uuid); switch (insertResponse) @@ -667,22 +664,22 @@ namespace OpenSim.Grid.GridServer /// public XmlRpcResponse XmlRpcSimulatorDataRequestMethod(XmlRpcRequest request) { - Hashtable requestData = (Hashtable) request.Params[0]; + Hashtable requestData = (Hashtable)request.Params[0]; Hashtable responseData = new Hashtable(); RegionProfileData simData = null; 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")) { //CFK: The if/else below this makes this message redundant. //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")) { - simData = GetRegion((string) requestData["region_name_search"]); + simData = GetRegion((string)requestData["region_name_search"]); } if (simData == null) @@ -693,8 +690,8 @@ namespace OpenSim.Grid.GridServer } else { - m_log.Info("[DATA]: found " + simData.regionName + " regionHandle = " + - (string) requestData["region_handle"]); + m_log.Info("[DATA]: found " + (string)simData.regionName + " regionHandle = " + + (string)requestData["region_handle"]); responseData["sim_ip"] = Util.GetHostFromDNS(simData.serverIP).ToString(); responseData["sim_port"] = simData.serverPort.ToString(); responseData["server_uri"] = simData.serverURI; @@ -716,22 +713,22 @@ namespace OpenSim.Grid.GridServer { 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")) { - xmin = (Int32) requestData["xmin"]; + xmin = (Int32)requestData["xmin"]; } if (requestData.ContainsKey("ymin")) { - ymin = (Int32) requestData["ymin"]; + ymin = (Int32)requestData["ymin"]; } if (requestData.ContainsKey("xmax")) { - xmax = (Int32) requestData["xmax"]; + xmax = (Int32)requestData["xmax"]; } 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: m_log.Info("[MAP]: World map request for range (" + xmin + "," + ymin + ")..(" + xmax + "," + ymax + ")"); @@ -746,15 +743,15 @@ namespace OpenSim.Grid.GridServer if (fastMode) { Dictionary neighbours = - GetRegions((uint) xmin, (uint) ymin, (uint) xmax, (uint) ymax); + GetRegions((uint)xmin, (uint)ymin, (uint)xmax, (uint)ymax); foreach (KeyValuePair aSim in neighbours) { Hashtable simProfileBlock = new Hashtable(); simProfileBlock["x"] = aSim.Value.regionLocX.ToString(); simProfileBlock["y"] = aSim.Value.regionLocY.ToString(); - Console.WriteLine("send neighbour info for " + aSim.Value.regionLocX + " , " + - aSim.Value.regionLocY); + Console.WriteLine("send neighbour info for " + aSim.Value.regionLocX.ToString() + " , " + + aSim.Value.regionLocY.ToString()); simProfileBlock["name"] = aSim.Value.regionName; simProfileBlock["access"] = 21; simProfileBlock["region-flags"] = 512; @@ -764,15 +761,15 @@ namespace OpenSim.Grid.GridServer // For Sugilite compatibility 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_uri"] = aSim.Value.serverURI; + simProfileBlock["sim_uri"] = aSim.Value.serverURI.ToString(); simProfileBlock["uuid"] = aSim.Value.UUID.ToString(); simProfileBlock["remoting_port"] = aSim.Value.remotingPort; 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 + ")"); } else @@ -782,7 +779,7 @@ namespace OpenSim.Grid.GridServer { 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); if (simProfile != null) { @@ -798,16 +795,16 @@ namespace OpenSim.Grid.GridServer // For Sugilite compatibility simProfileBlock["regionhandle"] = simProfile.regionHandle.ToString(); - simProfileBlock["sim_ip"] = simProfile.serverIP; + simProfileBlock["sim_ip"] = simProfile.serverIP.ToString(); simProfileBlock["sim_port"] = simProfile.serverPort.ToString(); - simProfileBlock["sim_uri"] = simProfile.serverURI; + simProfileBlock["sim_uri"] = simProfile.serverURI.ToString(); simProfileBlock["uuid"] = simProfile.UUID.ToString(); 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 + ")"); } @@ -863,12 +860,12 @@ namespace OpenSim.Grid.GridServer respstring = ""; respstring += "" + TheSim.regionSendKey + ""; respstring += ""; - respstring += "" + TheSim.UUID + ""; + respstring += "" + TheSim.UUID.ToString() + ""; respstring += "" + TheSim.regionName + ""; - respstring += "" + Util.GetHostFromDNS(TheSim.serverIP) + ""; - respstring += "" + TheSim.serverPort + ""; - respstring += "" + TheSim.regionLocX + ""; - respstring += "" + TheSim.regionLocY + ""; + respstring += "" + Util.GetHostFromDNS(TheSim.serverIP).ToString() + ""; + respstring += "" + TheSim.serverPort.ToString() + ""; + respstring += "" + TheSim.regionLocX.ToString() + ""; + respstring += "" + TheSim.regionLocY.ToString() + ""; respstring += "1"; respstring += ""; respstring += ""; @@ -949,12 +946,12 @@ namespace OpenSim.Grid.GridServer break; 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)); break; 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)); break; } @@ -1008,28 +1005,28 @@ namespace OpenSim.Grid.GridServer catch (Exception e) { m_log.Warn("[GRID]: GetRegionPlugin Handle " + kvp.Key + " unable to add new sim: " + - e); + e.ToString()); } } return "OK"; } 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) { XmlRpcResponse response = new XmlRpcResponse(); - Hashtable requestData = (Hashtable) request.Params[0]; + Hashtable requestData = (Hashtable)request.Params[0]; Hashtable responseData = new Hashtable(); if (requestData.Contains("uri")) { - string URI = (string) requestData["URI"]; - string sendkey = (string) requestData["sendkey"]; - string recvkey = (string) requestData["recvkey"]; + string URI = (string)requestData["URI"]; + string sendkey = (string)requestData["sendkey"]; + string recvkey = (string)requestData["recvkey"]; MessageServerInfo m = new MessageServerInfo(); m.URI = URI; m.sendkey = sendkey; @@ -1045,14 +1042,14 @@ namespace OpenSim.Grid.GridServer public XmlRpcResponse XmlRPCDeRegisterMessageServer(XmlRpcRequest request) { XmlRpcResponse response = new XmlRpcResponse(); - Hashtable requestData = (Hashtable) request.Params[0]; + Hashtable requestData = (Hashtable)request.Params[0]; Hashtable responseData = new Hashtable(); if (requestData.Contains("uri")) { - string URI = (string) requestData["uri"]; - string sendkey = (string) requestData["sendkey"]; - string recvkey = (string) requestData["recvkey"]; + string URI = (string)requestData["uri"]; + string sendkey = (string)requestData["sendkey"]; + string recvkey = (string)requestData["recvkey"]; MessageServerInfo m = new MessageServerInfo(); m.URI = URI; m.sendkey = sendkey; @@ -1065,4 +1062,4 @@ namespace OpenSim.Grid.GridServer return response; } } -} \ No newline at end of file +} diff --git a/OpenSim/Grid/GridServer/GridServerBase.cs b/OpenSim/Grid/GridServer/GridServerBase.cs index ac33a6c848..2feaac37fb 100644 --- a/OpenSim/Grid/GridServer/GridServerBase.cs +++ b/OpenSim/Grid/GridServer/GridServerBase.cs @@ -44,34 +44,6 @@ namespace OpenSim.Grid.GridServer protected GridManager m_gridManager; protected List m_plugins = new List(); - 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() { 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) { switch (cmd) @@ -105,14 +83,14 @@ namespace OpenSim.Grid.GridServer AddHttpHandlers(); - LoadGridPlugins(); + LoadGridPlugins( ); m_httpServer.Start(); m_console.Status("[GRID]: Starting sim status checker"); Timer simCheckTimer = new Timer(3600000 * 3); // 3 Hours between updates. - simCheckTimer.Elapsed += CheckSims; + simCheckTimer.Elapsed += new ElapsedEventHandler(CheckSims); simCheckTimer.Enabled = true; } @@ -144,7 +122,7 @@ namespace OpenSim.Grid.GridServer foreach (TypeExtensionNode node in nodes) { m_console.Status("[GRIDPLUGINS]: Loading OpenSim plugin " + node.Path); - IGridPlugin plugin = (IGridPlugin) node.CreateInstance(); + IGridPlugin plugin = (IGridPlugin)node.CreateInstance(); plugin.Initialise(this); 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; + } + } } -} \ No newline at end of file +} diff --git a/OpenSim/Grid/GridServer/IGridPlugin.cs b/OpenSim/Grid/GridServer/IGridPlugin.cs index 40d208c336..fbadfce298 100644 --- a/OpenSim/Grid/GridServer/IGridPlugin.cs +++ b/OpenSim/Grid/GridServer/IGridPlugin.cs @@ -38,4 +38,4 @@ namespace OpenSim.Grid.GridServer void Initialise(GridServerBase gridServer); void Close(); } -} \ No newline at end of file +} diff --git a/OpenSim/Grid/GridServer/Program.cs b/OpenSim/Grid/GridServer/Program.cs index 06d8e3d8aa..6eb4e1534f 100644 --- a/OpenSim/Grid/GridServer/Program.cs +++ b/OpenSim/Grid/GridServer/Program.cs @@ -50,4 +50,4 @@ namespace OpenSim.Grid.GridServer } } } -} \ No newline at end of file +} diff --git a/OpenSim/Grid/GridServer/Properties/AssemblyInfo.cs b/OpenSim/Grid/GridServer/Properties/AssemblyInfo.cs index 2b07547de1..1468edd912 100644 --- a/OpenSim/Grid/GridServer/Properties/AssemblyInfo.cs +++ b/OpenSim/Grid/GridServer/Properties/AssemblyInfo.cs @@ -60,4 +60,4 @@ using System.Runtime.InteropServices; // [assembly : AssemblyVersion("1.0.0.0")] -[assembly : AssemblyFileVersion("1.0.0.0")] \ No newline at end of file +[assembly : AssemblyFileVersion("1.0.0.0")] diff --git a/OpenSim/Grid/InventoryServer/GridInventoryService.cs b/OpenSim/Grid/InventoryServer/GridInventoryService.cs index c3e3a287c0..db9a864eb2 100644 --- a/OpenSim/Grid/InventoryServer/GridInventoryService.cs +++ b/OpenSim/Grid/InventoryServer/GridInventoryService.cs @@ -40,7 +40,7 @@ namespace OpenSim.Grid.InventoryServer /// public class GridInventoryService : InventoryServiceBase { - private static readonly ILog m_log + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); public override void RequestInventoryForUser(LLUUID userID, InventoryReceiptCallback callback) @@ -55,7 +55,7 @@ namespace OpenSim.Grid.InventoryServer /// /// true if the inventory was retrieved, false otherwise private bool GetUsersInventory(LLUUID userID, out List folderList, - out List itemsList) + out List itemsList) { List allFolders = GetInventorySkeleton(userID); List allItems = new List(); @@ -109,28 +109,28 @@ namespace OpenSim.Grid.InventoryServer { // uncomment me to simulate an overloaded inventory server //Thread.Sleep(20000); - + 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(); - + List allFolders = GetInventorySkeleton(userID); - + if (null == allFolders) { m_log.WarnFormat("[GRID AGENT INVENTORY]: No inventory found for user {0}", rawUserID); - + return invCollection; } - + List allItems = new List(); foreach (InventoryFolderBase folder in allFolders) { List items = RequestFolderItems(folder.ID); - + if (items != null) { allItems.InsertRange(0, items); @@ -138,9 +138,9 @@ namespace OpenSim.Grid.InventoryServer } invCollection.UserID = userID; - invCollection.Folders = allFolders; - invCollection.Items = allItems; - + invCollection.Folders = allFolders; + invCollection.Items = allItems; + // foreach (InventoryFolderBase folder in invCollection.Folders) // { // 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.InfoFormat( "[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; } - + /// /// Guid to UUID wrapper for same name IInventoryServices method /// @@ -166,10 +166,10 @@ namespace OpenSim.Grid.InventoryServer public List GetInventorySkeleton(Guid rawUserID) { //Thread.Sleep(10000); - + LLUUID userID = new LLUUID(rawUserID); return GetInventorySkeleton(userID); - } + } /// /// Create an inventory for the given user. @@ -196,11 +196,11 @@ namespace OpenSim.Grid.InventoryServer { MoveFolder(folder); } - + public override void PurgeInventoryFolder(LLUUID userID, InventoryFolderBase folder) { - PurgeFolder(folder); - } + PurgeFolder(folder); + } public override void AddNewInventoryItem(LLUUID userID, InventoryItemBase item) { @@ -230,15 +230,15 @@ namespace OpenSim.Grid.InventoryServer MoveExistingInventoryFolder(folder); return true; } - + public bool PurgeInventoryFolder(InventoryFolderBase folder) { m_log.InfoFormat( "[GRID AGENT INVENTORY]: Purging folder {0} {1} of its contents", folder.Name, folder.ID); - + PurgeInventoryFolder(folder.Owner, folder); return true; - } + } public bool AddInventoryItem(InventoryItemBase item) { @@ -267,4 +267,4 @@ namespace OpenSim.Grid.InventoryServer return true; } } -} \ No newline at end of file +} diff --git a/OpenSim/Grid/InventoryServer/InventoryManager.cs b/OpenSim/Grid/InventoryServer/InventoryManager.cs index 350a61846f..5c65317a6c 100644 --- a/OpenSim/Grid/InventoryServer/InventoryManager.cs +++ b/OpenSim/Grid/InventoryServer/InventoryManager.cs @@ -54,7 +54,7 @@ namespace OpenSim.Grid.InventoryServer Assembly pluginAssembly = Assembly.LoadFrom(FileName); m_log.Info("[" + OpenInventory_Main.LogName + "]: " + - "Invenstorage: Found " + pluginAssembly.GetTypes().Length + " interfaces."); + "Invenstorage: Found " + pluginAssembly.GetTypes().Length + " interfaces."); foreach (Type pluginType in pluginAssembly.GetTypes()) { if (!pluginType.IsAbstract) @@ -68,7 +68,7 @@ namespace OpenSim.Grid.InventoryServer plug.Initialise(dbconnect); _databasePlugin = plug; m_log.Info("[" + OpenInventory_Main.LogName + "]: " + - "Invenstorage: Added IInventoryData Interface"); + "Invenstorage: Added IInventoryData Interface"); break; } } @@ -136,12 +136,10 @@ namespace OpenSim.Grid.InventoryServer return fixupFolder(inventory.root, null); } - #region Nested type: GetInventory - public class GetInventory : BaseStreamHandler { - private readonly SerializableInventory _inventory; - private readonly InventoryManager _manager; + private SerializableInventory _inventory; + private InventoryManager _manager; public GetInventory(InventoryManager manager) : base("GET", "/inventory") @@ -183,7 +181,7 @@ namespace OpenSim.Grid.InventoryServer { byte[] result = new byte[] {}; - string[] parms = path.Split(new[] {'/'}, StringSplitOptions.RemoveEmptyEntries); + string[] parms = path.Split(new char[] {'/'}, StringSplitOptions.RemoveEmptyEntries); if (parms.Length > 1) { if (string.Compare(parms[1], "library", true) == 0) @@ -192,7 +190,7 @@ namespace OpenSim.Grid.InventoryServer saveInventoryToStream(_inventory, ms); result = ms.GetBuffer(); - Array.Resize(ref result, (int) ms.Length); + Array.Resize(ref result, (int) ms.Length); } else if (string.Compare(parms[1], "user", true) == 0) { @@ -205,7 +203,5 @@ namespace OpenSim.Grid.InventoryServer return result; } } - - #endregion } -} \ No newline at end of file +} diff --git a/OpenSim/Grid/InventoryServer/Main.cs b/OpenSim/Grid/InventoryServer/Main.cs index 453d64dd66..870997b6a4 100644 --- a/OpenSim/Grid/InventoryServer/Main.cs +++ b/OpenSim/Grid/InventoryServer/Main.cs @@ -40,38 +40,13 @@ namespace OpenSim.Grid.InventoryServer { public class OpenInventory_Main : BaseOpenSimServer, conscmd_callback { - public const string LogName = "INVENTORY"; private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private InventoryConfig m_config; private InventoryManager m_inventoryManager; + private InventoryConfig m_config; private GridInventoryService m_inventoryService; - public OpenInventory_Main() - { - 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 + public const string LogName = "INVENTORY"; [STAThread] public static void Main(string[] args) @@ -84,6 +59,12 @@ namespace OpenSim.Grid.InventoryServer theServer.Work(); } + public OpenInventory_Main() + { + m_console = new ConsoleBase(LogName, this); + MainConsole.Instance = m_console; + } + public void Startup() { m_log.Info("Initialising inventory manager..."); @@ -94,7 +75,7 @@ namespace OpenSim.Grid.InventoryServer m_inventoryService.AddPlugin(m_config.DatabaseProvider, m_config.DatabaseConnect); m_log.Info("[" + LogName + "]: Starting HTTP server ..."); - + m_httpServer = new BaseHttpServer(m_config.HttpPort); AddHttpHandlers(); m_httpServer.Start(); @@ -107,11 +88,11 @@ namespace OpenSim.Grid.InventoryServer m_httpServer.AddStreamHandler( new RestDeserialisehandler( "POST", "/GetInventory/", m_inventoryService.GetUserInventory)); - + m_httpServer.AddStreamHandler( new RestDeserialisehandler( "POST", "/CreateInventory/", m_inventoryService.CreateUsersInventory)); - + m_httpServer.AddStreamHandler( new RestDeserialisehandler( "POST", "/NewFolder/", m_inventoryService.AddInventoryFolder)); @@ -119,15 +100,15 @@ namespace OpenSim.Grid.InventoryServer m_httpServer.AddStreamHandler( new RestDeserialisehandler( "POST", "/MoveFolder/", m_inventoryService.MoveInventoryFolder)); - + m_httpServer.AddStreamHandler( new RestDeserialisehandler( - "POST", "/PurgeFolder/", m_inventoryService.PurgeInventoryFolder)); + "POST", "/PurgeFolder/", m_inventoryService.PurgeInventoryFolder)); m_httpServer.AddStreamHandler( new RestDeserialisehandler( "POST", "/NewItem/", m_inventoryService.AddInventoryItem)); - + m_httpServer.AddStreamHandler( new RestDeserialisehandler( "POST", "/DeleteItem/", m_inventoryService.DeleteInvItem)); @@ -153,5 +134,21 @@ namespace OpenSim.Grid.InventoryServer 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; + } + } } -} \ No newline at end of file +} diff --git a/OpenSim/Grid/MessagingServer/Main.cs b/OpenSim/Grid/MessagingServer/Main.cs index e6e18d47d5..bf793bf1bc 100644 --- a/OpenSim/Grid/MessagingServer/Main.cs +++ b/OpenSim/Grid/MessagingServer/Main.cs @@ -44,42 +44,9 @@ namespace OpenSim.Grid.MessagingServer private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private MessageServerConfig Cfg; - - private LLUUID m_lastCreatedUser = LLUUID.Random(); private MessageService msgsvc; - - private OpenMessage_Main() - { - 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 + + private LLUUID m_lastCreatedUser = LLUUID.Random(); [STAThread] public static void Main(string[] args) @@ -88,6 +55,7 @@ namespace OpenSim.Grid.MessagingServer m_log.Info("Launching MessagingServer..."); + OpenMessage_Main messageserver = new OpenMessage_Main(); @@ -95,6 +63,12 @@ namespace OpenSim.Grid.MessagingServer messageserver.Work(); } + private OpenMessage_Main() + { + m_console = new ConsoleBase("OpenMessage", this); + MainConsole.Instance = m_console; + } + private void Work() { m_console.Notice("Enter help for a list of commands\n"); @@ -144,13 +118,12 @@ namespace OpenSim.Grid.MessagingServer switch (what) { case "user": - + try { //userID = - //m_userManager.AddUserProfile(tempfirstname, templastname, tempMD5Passwd, regX, regY); - } - catch (Exception ex) + //m_userManager.AddUserProfile(tempfirstname, templastname, tempMD5Passwd, regX, regY); + } catch (Exception ex) { m_console.Error("[SERVER]: Error creating user: {0}", ex.ToString()); } @@ -158,7 +131,7 @@ namespace OpenSim.Grid.MessagingServer try { //RestObjectPoster.BeginPostObject(m_userManager._config.InventoryUrl + "CreateInventory/", - //userID.UUID); + //userID.UUID); } catch (Exception ex) { @@ -168,5 +141,28 @@ namespace OpenSim.Grid.MessagingServer 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); + } } -} \ No newline at end of file +} diff --git a/OpenSim/Grid/MessagingServer/MessageService.cs b/OpenSim/Grid/MessagingServer/MessageService.cs index 33c133d21b..50e06afc3f 100644 --- a/OpenSim/Grid/MessagingServer/MessageService.cs +++ b/OpenSim/Grid/MessagingServer/MessageService.cs @@ -45,16 +45,16 @@ namespace OpenSim.Grid.MessagingServer { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private readonly MessageServerConfig m_cfg; - private readonly Hashtable m_presence_BackReferences = new Hashtable(); + private MessageServerConfig m_cfg; //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 - 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 + private Hashtable m_presence_BackReferences = new Hashtable(); // Hashtable containing work units that need to be processed private Hashtable m_unProcessedWorkUnits = new Hashtable(); @@ -63,13 +63,13 @@ namespace OpenSim.Grid.MessagingServer { m_cfg = cfg; } - + #region RegionComms Methods #endregion #region FriendList Methods - + /// /// Process Friendlist subscriptions 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++) { //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)) { - UserPresenceData friendup = (UserPresenceData) m_presences[uFriendList[i].Friend]; + UserPresenceData friendup = (UserPresenceData)m_presences[uFriendList[i].Friend]; // Add backreference - - SubscribeToPresenceUpdates(userpresence, friendup, uFriendList[i], i); + + SubscribeToPresenceUpdates(userpresence, friendup, uFriendList[i],i); } } } @@ -108,10 +108,10 @@ namespace OpenSim.Grid.MessagingServer /// P2 /// /// - public void SubscribeToPresenceUpdates(UserPresenceData userpresence, UserPresenceData friendpresence, - FriendListItem uFriendListItem, int uFriendListIndex) + public void SubscribeToPresenceUpdates(UserPresenceData userpresence, UserPresenceData friendpresence, + FriendListItem uFriendListItem, int uFriendListIndex) { - if ((uFriendListItem.FriendListOwnerPerms & (uint) FriendRights.CanSeeOnline) != 0) + if ((uFriendListItem.FriendListOwnerPerms & (uint)FriendRights.CanSeeOnline) != 0) { // Subscribe and Send Out updates if (!friendpresence.subscriptionData.Contains(friendpresence.agentData.AgentID)) @@ -126,13 +126,13 @@ namespace OpenSim.Grid.MessagingServer PresenceInformer friendlistupdater = new PresenceInformer(); friendlistupdater.presence1 = friendpresence; friendlistupdater.presence2 = userpresence; - WaitCallback cb = friendlistupdater.go; + WaitCallback cb = new WaitCallback(friendlistupdater.go); ThreadPool.QueueUserWorkItem(cb); //SendRegionPresenceUpdate(friendpresence, userpresence); } - if ((uFriendListItem.FriendPerms & (uint) FriendRights.CanSeeOnline) != 0) + if ((uFriendListItem.FriendPerms & (uint)FriendRights.CanSeeOnline) != 0) { if (!friendpresence.subscriptionData.Contains(userpresence.agentData.AgentID)) { @@ -147,9 +147,9 @@ namespace OpenSim.Grid.MessagingServer friendlistupdater.presence1 = userpresence; friendlistupdater.presence2 = friendpresence; - WaitCallback cb2 = friendlistupdater.go; + WaitCallback cb2 = new WaitCallback(friendlistupdater.go); ThreadPool.QueueUserWorkItem(cb2); - + //SendRegionPresenceUpdate(userpresence, friendpresence); } } @@ -164,7 +164,7 @@ namespace OpenSim.Grid.MessagingServer { if (m_presence_BackReferences.Contains(friendID)) { - List presenseBackReferences = (List) m_presence_BackReferences[friendID]; + List presenseBackReferences = (List)m_presence_BackReferences[friendID]; if (!presenseBackReferences.Contains(agentID)) { presenseBackReferences.Add(agentID); @@ -188,7 +188,7 @@ namespace OpenSim.Grid.MessagingServer { if (m_presence_BackReferences.Contains(friendID)) { - List presenseBackReferences = (List) m_presence_BackReferences[friendID]; + List presenseBackReferences = (List)m_presence_BackReferences[friendID]; if (presenseBackReferences.Contains(agentID)) { presenseBackReferences.Remove(agentID); @@ -216,29 +216,29 @@ namespace OpenSim.Grid.MessagingServer { if (m_presences.Contains(AgentID)) { - AgentData = (UserPresenceData) m_presences[AgentID]; + AgentData = (UserPresenceData)m_presences[AgentID]; } } if (AgentData != null) { - AgentsNeedingNotification = AgentData.subscriptionData; + AgentsNeedingNotification = AgentData.subscriptionData; //lock (m_presence_BackReferences) //{ - //if (m_presence_BackReferences.Contains(AgentID)) - //{ - //AgentsNeedingNotification = (List)m_presence_BackReferences[AgentID]; - //} + //if (m_presence_BackReferences.Contains(AgentID)) + //{ + //AgentsNeedingNotification = (List)m_presence_BackReferences[AgentID]; + //} //} for (int i = 0; i < AgentsNeedingNotification.Count; i++) { // TODO: Do Region Notifications - lock (m_presences) + lock(m_presences) { 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.presence2 = friendd; - WaitCallback cb3 = friendlistupdater.go; + WaitCallback cb3 = new WaitCallback(friendlistupdater.go); ThreadPool.QueueUserWorkItem(cb3); //SendRegionPresenceUpdate(AgentData, friendd); @@ -276,7 +276,7 @@ namespace OpenSim.Grid.MessagingServer } } } - + #endregion #region UserServer Comms @@ -298,17 +298,18 @@ namespace OpenSim.Grid.MessagingServer parameters.Add(param); XmlRpcRequest req = new XmlRpcRequest("get_user_friend_list", parameters); XmlRpcResponse resp = req.Send(m_cfg.UserServerURL, 3000); - Hashtable respData = (Hashtable) resp.Value; + Hashtable respData = (Hashtable)resp.Value; if (respData.Contains("avcount")) { buddylist = ConvertXMLRPCDataToFriendListItemList(respData); } + } catch (WebException e) { m_log.Warn("Error when trying to fetch Avatar's friends list: " + - e.Message); + e.Message); // Return Empty list (no friends) } return buddylist; @@ -322,16 +323,16 @@ namespace OpenSim.Grid.MessagingServer public List ConvertXMLRPCDataToFriendListItemList(Hashtable data) { List buddylist = new List(); - int buddycount = Convert.ToInt32((string) data["avcount"]); + int buddycount = Convert.ToInt32((string)data["avcount"]); for (int i = 0; i < buddycount; i++) { FriendListItem buddylistitem = new FriendListItem(); - buddylistitem.FriendListOwner = new LLUUID((string) data["ownerID" + i]); - buddylistitem.Friend = new LLUUID((string) data["friendID" + i]); - buddylistitem.FriendListOwnerPerms = (uint) Convert.ToInt32((string) data["ownerPerms" + i]); - buddylistitem.FriendPerms = (uint) Convert.ToInt32((string) data["friendPerms" + i]); + buddylistitem.FriendListOwner = new LLUUID((string)data["ownerID" + i.ToString()]); + buddylistitem.Friend = new LLUUID((string)data["friendID" + i.ToString()]); + buddylistitem.FriendListOwnerPerms = (uint)Convert.ToInt32((string)data["ownerPerms" + i.ToString()]); + buddylistitem.FriendPerms = (uint)Convert.ToInt32((string)data["friendPerms" + i.ToString()]); buddylist.Add(buddylistitem); } @@ -349,7 +350,7 @@ namespace OpenSim.Grid.MessagingServer public XmlRpcResponse UserLoggedOn(XmlRpcRequest request) { 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["agentid"] = agentID.ToString(); @@ -363,13 +364,13 @@ namespace OpenSim.Grid.MessagingServer //requestData["lastname"] = lastname; AgentCircuitData agentData = new AgentCircuitData(); - agentData.SessionID = new LLUUID((string) requestData["sessionid"]); - agentData.SecureSessionID = new LLUUID((string) requestData["secure_session_id"]); - agentData.firstname = (string) requestData["firstname"]; - agentData.lastname = (string) requestData["lastname"]; - agentData.AgentID = new LLUUID((string) requestData["agentid"]); + agentData.SessionID = new LLUUID((string)requestData["sessionid"]); + agentData.SecureSessionID = new LLUUID((string)requestData["secure_session_id"]); + agentData.firstname = (string)requestData["firstname"]; + agentData.lastname = (string)requestData["lastname"]; + agentData.AgentID = new LLUUID((string)requestData["agentid"]); 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")) { @@ -378,13 +379,13 @@ namespace OpenSim.Grid.MessagingServer else { agentData.startpos = - new LLVector3(Convert.ToUInt32(requestData["positionx"]), + new LLVector3(Convert.ToUInt32(requestData["positionx"]), Convert.ToUInt32(requestData["positiony"]), Convert.ToUInt32(requestData["positionz"])); agentData.child = false; } - ulong regionHandle = Convert.ToUInt64((string) requestData["regionhandle"]); + ulong regionHandle = Convert.ToUInt64((string)requestData["regionhandle"]); UserPresenceData up = new UserPresenceData(); up.agentData = agentData; @@ -397,7 +398,7 @@ namespace OpenSim.Grid.MessagingServer return new XmlRpcResponse(); } - + /// /// The UserServer got a Logoff message /// Cleanup time for that user. Send out presence notifications @@ -406,9 +407,9 @@ namespace OpenSim.Grid.MessagingServer /// public XmlRpcResponse UserLoggedOff(XmlRpcRequest request) { - Hashtable requestData = (Hashtable) request.Params[0]; - - LLUUID AgentID = new LLUUID((string) requestData["agentid"]); + Hashtable requestData = (Hashtable)request.Params[0]; + + LLUUID AgentID = new LLUUID((string)requestData["agentid"]); ProcessLogOff(AgentID); @@ -430,9 +431,9 @@ namespace OpenSim.Grid.MessagingServer RegionProfileData regionInfo = null; if (m_regionInfoCache.Contains(regionhandle)) { - regionInfo = (RegionProfileData) m_regionInfoCache[regionhandle]; + regionInfo = (RegionProfileData)m_regionInfoCache[regionhandle]; } - else + else { regionInfo = RequestRegionInfo(regionhandle); } @@ -446,8 +447,7 @@ namespace OpenSim.Grid.MessagingServer /// /// public RegionProfileData RequestRegionInfo(ulong regionHandle) - { - RegionProfileData regionProfile = null; + { RegionProfileData regionProfile = null; try { Hashtable requestData = new Hashtable(); @@ -457,8 +457,8 @@ namespace OpenSim.Grid.MessagingServer SendParams.Add(requestData); XmlRpcRequest GridReq = new XmlRpcRequest("simulator_data_request", SendParams); XmlRpcResponse GridResp = GridReq.Send(m_cfg.GridServerURL, 3000); - - Hashtable responseData = (Hashtable) GridResp.Value; + + Hashtable responseData = (Hashtable)GridResp.Value; if (responseData.ContainsKey("error")) { @@ -466,23 +466,23 @@ namespace OpenSim.Grid.MessagingServer return null; } - uint regX = Convert.ToUInt32((string) responseData["region_locx"]); - uint regY = Convert.ToUInt32((string) responseData["region_locy"]); - string internalIpStr = (string) responseData["sim_ip"]; + uint regX = Convert.ToUInt32((string)responseData["region_locx"]); + uint regY = Convert.ToUInt32((string)responseData["region_locy"]); + string internalIpStr = (string)responseData["sim_ip"]; uint port = Convert.ToUInt32(responseData["sim_port"]); - string externalUri = (string) responseData["sim_uri"]; + string externalUri = (string)responseData["sim_uri"]; string neighbourExternalUri = externalUri; 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.regionHandle = Helpers.UIntsToLong((regX * Constants.RegionSize), (regY * Constants.RegionSize)); regionProfile.regionLocX = regX; regionProfile.regionLocY = regY; - - regionProfile.remotingPort = Convert.ToUInt32((string) responseData["remoting_port"]); - regionProfile.UUID = new LLUUID((string) responseData["region_UUID"]); - regionProfile.regionName = (string) responseData["region_name"]; + + regionProfile.remotingPort = Convert.ToUInt32((string)responseData["remoting_port"]); + regionProfile.UUID = new LLUUID((string)responseData["region_UUID"]); + regionProfile.regionName = (string)responseData["region_name"]; lock (m_regionInfoCache) { if (!m_regionInfoCache.Contains(regionHandle)) @@ -494,31 +494,31 @@ namespace OpenSim.Grid.MessagingServer catch (WebException) { m_log.Error("[GRID]: " + - "Region lookup failed for: " + regionHandle + + "Region lookup failed for: " + regionHandle.ToString() + " - Is the GridServer down?"); return null; } - + return regionProfile; } - public bool registerWithUserServer() + public bool registerWithUserServer () { Hashtable UserParams = new Hashtable(); // Login / Authentication - + if (m_cfg.HttpSSL) { UserParams["uri"] = "https://" + m_cfg.MessageServerIP + ":" + m_cfg.HttpPort; } - else + else { UserParams["uri"] = "http://" + m_cfg.MessageServerIP + ":" + m_cfg.HttpPort; } UserParams["recvkey"] = m_cfg.UserRecvKey; UserParams["sendkey"] = m_cfg.UserRecvKey; - + // Package into an XMLRPC Request ArrayList SendParams = new ArrayList(); SendParams.Add(UserParams); @@ -530,13 +530,12 @@ namespace OpenSim.Grid.MessagingServer { UserReq = new XmlRpcRequest("register_messageserver", SendParams); 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?"); - throw (ex); + throw(ex); } - Hashtable GridRespData = (Hashtable) UserResp.Value; + Hashtable GridRespData = (Hashtable)UserResp.Value; Hashtable griddatahash = GridRespData; // Process Response @@ -584,7 +583,7 @@ namespace OpenSim.Grid.MessagingServer m_log.Error("Unable to connect to grid. Grid server not running?"); throw (ex); } - Hashtable UserRespData = (Hashtable) UserResp.Value; + Hashtable UserRespData = (Hashtable)UserResp.Value; Hashtable userdatahash = UserRespData; // Process Response @@ -600,4 +599,4 @@ namespace OpenSim.Grid.MessagingServer #endregion } -} \ No newline at end of file +} diff --git a/OpenSim/Grid/MessagingServer/PresenceInformer.cs b/OpenSim/Grid/MessagingServer/PresenceInformer.cs index dd2fa5b96c..59d0e130cf 100644 --- a/OpenSim/Grid/MessagingServer/PresenceInformer.cs +++ b/OpenSim/Grid/MessagingServer/PresenceInformer.cs @@ -35,16 +35,21 @@ namespace OpenSim.Grid.MessagingServer { public class PresenceInformer { + public UserPresenceData presence1 = null; + public UserPresenceData presence2 = null; private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - public UserPresenceData presence1; - public UserPresenceData presence2; + public PresenceInformer() + { + + } public void go(object o) { if (presence1 != null && presence2 != null) { SendRegionPresenceUpdate(presence1, presence2); } + } /// @@ -69,4 +74,4 @@ namespace OpenSim.Grid.MessagingServer XmlRpcResponse RegionResp = RegionReq.Send(whichRegion.httpServerURI, 6000); } } -} \ No newline at end of file +} diff --git a/OpenSim/Grid/MessagingServer/UserPresenceData.cs b/OpenSim/Grid/MessagingServer/UserPresenceData.cs index 790e99985e..71882011fa 100644 --- a/OpenSim/Grid/MessagingServer/UserPresenceData.cs +++ b/OpenSim/Grid/MessagingServer/UserPresenceData.cs @@ -36,9 +36,13 @@ namespace OpenSim.Grid.MessagingServer public class UserPresenceData { public AgentCircuitData agentData = new AgentCircuitData(); - public List friendData = new List(); - public string httpURI = String.Empty; public RegionProfileData regionData = new RegionProfileData(); + public string httpURI = String.Empty; + public List friendData = new List (); public List subscriptionData = new List(); + + public UserPresenceData() + { + } } -} \ No newline at end of file +} diff --git a/OpenSim/Grid/MessagingServer/WorkUnitBase.cs b/OpenSim/Grid/MessagingServer/WorkUnitBase.cs index 1c1503b9e2..d25f0440c8 100644 --- a/OpenSim/Grid/MessagingServer/WorkUnitBase.cs +++ b/OpenSim/Grid/MessagingServer/WorkUnitBase.cs @@ -30,4 +30,4 @@ namespace OpenSim.Grid.MessagingServer public class WorkUnitBase { } -} \ No newline at end of file +} diff --git a/OpenSim/Grid/MessagingServer/WorkUnitPresenceUpdate.cs b/OpenSim/Grid/MessagingServer/WorkUnitPresenceUpdate.cs index 625a9f6146..c31f0c749b 100644 --- a/OpenSim/Grid/MessagingServer/WorkUnitPresenceUpdate.cs +++ b/OpenSim/Grid/MessagingServer/WorkUnitPresenceUpdate.cs @@ -30,4 +30,4 @@ namespace OpenSim.Grid.MessagingServer public class WorkUnitPresenceUpdate : WorkUnitBase { } -} \ No newline at end of file +} diff --git a/OpenSim/Grid/MessagingServer/XMPPHTTPService.cs b/OpenSim/Grid/MessagingServer/XMPPHTTPService.cs index 257e802a48..df3bc2291e 100644 --- a/OpenSim/Grid/MessagingServer/XMPPHTTPService.cs +++ b/OpenSim/Grid/MessagingServer/XMPPHTTPService.cs @@ -48,26 +48,28 @@ namespace OpenSim.Grid.MessagingServer : base("GET", "/presence") { m_log.Info("[REST]: In Get Request"); + } - + public override byte[] Handle(string path, Stream request) { string param = GetParam(path); byte[] result = new byte[] {}; try { - string[] p = param.Split(new[] {'/', '?', '&'}, StringSplitOptions.RemoveEmptyEntries); + string[] p = param.Split(new char[] {'/', '?', '&'}, StringSplitOptions.RemoveEmptyEntries); if (p.Length > 0) { - LLUUID assetID = null; - + LLUUID assetID = null; + if (!LLUUID.TryParse(p[0], out assetID)) { m_log.InfoFormat( "[REST]: GET:/presence ignoring request with malformed UUID {0}", p[0]); return result; } + } } catch (Exception e) @@ -82,11 +84,6 @@ namespace OpenSim.Grid.MessagingServer { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - public PostXMPPStreamHandler() - : base("POST", "/presence") - { - } - public override byte[] Handle(string path, Stream request) { string param = GetParam(path); @@ -100,5 +97,12 @@ namespace OpenSim.Grid.MessagingServer return new byte[] {}; } + + public PostXMPPStreamHandler() + : base("POST", "/presence") + { + + } + } -} \ No newline at end of file +} diff --git a/OpenSim/Grid/ScriptServer/Application.cs b/OpenSim/Grid/ScriptServer/Application.cs index dc0bf626ce..ef93f65eb0 100644 --- a/OpenSim/Grid/ScriptServer/Application.cs +++ b/OpenSim/Grid/ScriptServer/Application.cs @@ -39,7 +39,7 @@ namespace OpenSim.Grid.ScriptServer XmlConfigurator.Configure(); AppDomain.CurrentDomain.UnhandledException += - CurrentDomain_UnhandledException; + new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); // Application is starting SE = new ScriptServerMain(); @@ -50,9 +50,9 @@ namespace OpenSim.Grid.ScriptServer Console.WriteLine(String.Empty); Console.WriteLine("APPLICATION EXCEPTION DETECTED"); Console.WriteLine(String.Empty); - Console.WriteLine("Application is terminating: " + e.IsTerminating); + Console.WriteLine("Application is terminating: " + e.IsTerminating.ToString()); //Console.WriteLine("Exception:"); //Console.WriteLine(e.ExceptionObject.ToString()); } } -} \ No newline at end of file +} diff --git a/OpenSim/Grid/ScriptServer/FakeScene.cs b/OpenSim/Grid/ScriptServer/FakeScene.cs index e037698ca2..480050dd24 100644 --- a/OpenSim/Grid/ScriptServer/FakeScene.cs +++ b/OpenSim/Grid/ScriptServer/FakeScene.cs @@ -34,7 +34,7 @@ using OpenSim.Region.Environment.Scenes; namespace OpenSim.Grid.ScriptServer { - public class FakeScene : Scene + public class FakeScene: Scene { public FakeScene(RegionInfo regInfo, AgentCircuitManager authen, PermissionManager permissionManager, CommunicationsManager commsMan, SceneCommunicationService sceneGridService, @@ -48,4 +48,4 @@ namespace OpenSim.Grid.ScriptServer // What does a scene have to do? :P } -} \ No newline at end of file +} diff --git a/OpenSim/Grid/ScriptServer/Properties/AssemblyInfo.cs b/OpenSim/Grid/ScriptServer/Properties/AssemblyInfo.cs index bb33e02f70..e4161d3f67 100644 --- a/OpenSim/Grid/ScriptServer/Properties/AssemblyInfo.cs +++ b/OpenSim/Grid/ScriptServer/Properties/AssemblyInfo.cs @@ -60,4 +60,4 @@ using System.Runtime.InteropServices; // [assembly : AssemblyVersion("1.0.0.0")] -[assembly : AssemblyFileVersion("1.0.0.0")] \ No newline at end of file +[assembly : AssemblyFileVersion("1.0.0.0")] diff --git a/OpenSim/Grid/ScriptServer/RemotingObject.cs b/OpenSim/Grid/ScriptServer/RemotingObject.cs index 6686b265e1..9d3065b19c 100644 --- a/OpenSim/Grid/ScriptServer/RemotingObject.cs +++ b/OpenSim/Grid/ScriptServer/RemotingObject.cs @@ -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. - #region ServerRemotingObject Members - ScriptServerInterfaces.RemoteEvents ScriptServerInterfaces.ServerRemotingObject.Events() { return ScriptServerMain.Engine.EventManager(); } - - #endregion } -} \ No newline at end of file +} diff --git a/OpenSim/Grid/ScriptServer/RemotingServer.cs b/OpenSim/Grid/ScriptServer/RemotingServer.cs index 9d75a83c38..7d0e334be9 100644 --- a/OpenSim/Grid/ScriptServer/RemotingServer.cs +++ b/OpenSim/Grid/ScriptServer/RemotingServer.cs @@ -31,10 +31,9 @@ using System.Runtime.Remoting.Channels.Tcp; namespace OpenSim.Grid.ScriptServer { - internal class RemotingServer + class RemotingServer { - private readonly TcpChannel channel; - + TcpChannel channel; public RemotingServer(int port, string instanceName) { // Create an instance of a channel @@ -43,9 +42,9 @@ namespace OpenSim.Grid.ScriptServer // Register as an available service with the name HelloWorld RemotingConfiguration.RegisterWellKnownServiceType( - typeof (RemotingObject), + typeof(RemotingObject), instanceName, WellKnownObjectMode.Singleton); } } -} \ No newline at end of file +} diff --git a/OpenSim/Grid/ScriptServer/ScriptServer/Region/RegionBase.cs b/OpenSim/Grid/ScriptServer/ScriptServer/Region/RegionBase.cs index 4f9f2e76f9..a02429c92e 100644 --- a/OpenSim/Grid/ScriptServer/ScriptServer/Region/RegionBase.cs +++ b/OpenSim/Grid/ScriptServer/ScriptServer/Region/RegionBase.cs @@ -32,13 +32,8 @@ namespace OpenSim.Grid.ScriptServer.ScriptServer.Region // These are events that the region needs to have // TEMP: Using System.Delegate -- needs replacing with a real delegate - - #region Delegates - public delegate void DefaultDelegate(); - #endregion - public event DefaultDelegate onScriptRez; public event DefaultDelegate onstate_entry; public event DefaultDelegate onstate_exit; diff --git a/OpenSim/Grid/ScriptServer/ScriptServer/Region/RegionConnectionManager.cs b/OpenSim/Grid/ScriptServer/ScriptServer/Region/RegionConnectionManager.cs index 3c202721f9..8c31b9bff3 100644 --- a/OpenSim/Grid/ScriptServer/ScriptServer/Region/RegionConnectionManager.cs +++ b/OpenSim/Grid/ScriptServer/ScriptServer/Region/RegionConnectionManager.cs @@ -29,8 +29,8 @@ namespace OpenSim.Grid.ScriptServer.ScriptServer.Region { public class RegionConnectionManager : RegionBase { - private object m_Connection; private ScriptServerMain m_ScriptServerMain; + private object m_Connection; public RegionConnectionManager(ScriptServerMain scm, object Connection) { diff --git a/OpenSim/Grid/ScriptServer/ScriptServer/RegionCommManager.cs b/OpenSim/Grid/ScriptServer/ScriptServer/RegionCommManager.cs index c1449bf16f..8422bea668 100644 --- a/OpenSim/Grid/ScriptServer/ScriptServer/RegionCommManager.cs +++ b/OpenSim/Grid/ScriptServer/ScriptServer/RegionCommManager.cs @@ -34,10 +34,12 @@ namespace OpenSim.Grid.ScriptServer.ScriptServer { internal class RegionCommManager { - private readonly ScriptServerMain m_ScriptServerMain; - private readonly List Regions = new List(); private Thread listenThread; + private List Regions = new List(); + + private ScriptServerMain m_ScriptServerMain; + public RegionCommManager(ScriptServerMain scm) { m_ScriptServerMain = scm; diff --git a/OpenSim/Grid/ScriptServer/ScriptServer/ScriptEngineLoader.cs b/OpenSim/Grid/ScriptServer/ScriptServer/ScriptEngineLoader.cs index dce92ce66a..4d8c559f91 100644 --- a/OpenSim/Grid/ScriptServer/ScriptServer/ScriptEngineLoader.cs +++ b/OpenSim/Grid/ScriptServer/ScriptServer/ScriptEngineLoader.cs @@ -51,7 +51,7 @@ namespace OpenSim.Grid.ScriptServer.ScriptServer { m_log.Error("[ScriptEngine]: " + "Error loading assembly \"" + EngineName + "\": " + e.Message + ", " + - e.StackTrace); + e.StackTrace.ToString()); } return ret; } @@ -104,7 +104,7 @@ namespace OpenSim.Grid.ScriptServer.ScriptServer ScriptServerInterfaces.ScriptEngine ret; //try //{ - ret = (ScriptServerInterfaces.ScriptEngine) Activator.CreateInstance(t); + ret = (ScriptServerInterfaces.ScriptEngine)Activator.CreateInstance(t); //} //catch (Exception e) //{ @@ -114,4 +114,4 @@ namespace OpenSim.Grid.ScriptServer.ScriptServer return ret; } } -} \ No newline at end of file +} diff --git a/OpenSim/Grid/ScriptServer/ScriptServer/ScriptEnginesManager.cs b/OpenSim/Grid/ScriptServer/ScriptServer/ScriptEnginesManager.cs index 9ecd179076..9d67602fde 100644 --- a/OpenSim/Grid/ScriptServer/ScriptServer/ScriptEnginesManager.cs +++ b/OpenSim/Grid/ScriptServer/ScriptServer/ScriptEnginesManager.cs @@ -32,8 +32,8 @@ namespace OpenSim.Grid.ScriptServer.ScriptServer { internal class ScriptEngineManager { - private readonly ScriptEngineLoader ScriptEngineLoader; - private readonly List scriptEngines = new List(); + private ScriptEngineLoader ScriptEngineLoader; + private List scriptEngines = new List(); private ScriptServerMain m_ScriptServerMain; // Initialize @@ -58,4 +58,4 @@ namespace OpenSim.Grid.ScriptServer.ScriptServer return sei; } } -} \ No newline at end of file +} diff --git a/OpenSim/Grid/ScriptServer/ScriptServerMain.cs b/OpenSim/Grid/ScriptServer/ScriptServerMain.cs index 131ff343d1..528b51c2d6 100644 --- a/OpenSim/Grid/ScriptServer/ScriptServerMain.cs +++ b/OpenSim/Grid/ScriptServer/ScriptServerMain.cs @@ -44,20 +44,20 @@ namespace OpenSim.Grid.ScriptServer // // Root object. Creates objects used. // + private int listenPort = 8010; // TEMP 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); // Objects we use + internal RegionCommManager RegionScriptDaemon; // Listen for incoming from region + internal ScriptEngineManager ScriptEngines; // Loads scriptengines //internal RemotingServer m_RemotingServer; internal TCPServer m_TCPServer; - internal RegionCommManager RegionScriptDaemon; // Listen for incoming from region internal TRPC_Remote RPC; - internal ScriptEngineManager ScriptEngines; // Loads scriptengines - public ScriptServerMain() + public ScriptServerMain() { m_console = CreateConsole(); @@ -68,13 +68,13 @@ namespace OpenSim.Grid.ScriptServer Engine = ScriptEngines.LoadEngine("DotNetEngine"); Engine.InitializeEngine(null, null, false, Engine.GetScriptManager()); - + // Set up server //m_RemotingServer = new RemotingServer(listenPort, "DotNetEngine"); m_TCPServer = new TCPServer(listenPort); RPC = new TRPC_Remote(m_TCPServer); - RPC.ReceiveCommand += RPC_ReceiveCommand; + RPC.ReceiveCommand += new TRPC_Remote.ReceiveCommandDelegate(RPC_ReceiveCommand); m_TCPServer.StartListen(); Console.ReadLine(); @@ -93,7 +93,7 @@ namespace OpenSim.Grid.ScriptServer 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); } } -} \ No newline at end of file +} diff --git a/OpenSim/Grid/UserServer/Main.cs b/OpenSim/Grid/UserServer/Main.cs index 25e1585618..0534e3b428 100644 --- a/OpenSim/Grid/UserServer/Main.cs +++ b/OpenSim/Grid/UserServer/Main.cs @@ -48,61 +48,12 @@ namespace OpenSim.Grid.UserServer private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private UserConfig Cfg; - private LLUUID m_lastCreatedUser = LLUUID.Random(); - - public UserLoginService m_loginService; - public MessageServersConnector m_messagesService; + public UserManager m_userManager; + public UserLoginService m_loginService; + public MessageServersConnector m_messagesService; - private OpenUser_Main() - { - 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> requester = new RestObjectPosterResponse>(); - // requester.ReturnResponseVal = TestResponse; - // requester.BeginPostObject(m_userManager._config.InventoryUrl + "RootFolders/", m_lastCreatedUser); - SynchronousRestObjectPoster.BeginPostObject>("POST", - m_userManager. - _config. - InventoryUrl + - "RootFolders/", - m_lastCreatedUser); - break; - } - } - - #endregion + private LLUUID m_lastCreatedUser = LLUUID.Random(); [STAThread] public static void Main(string[] args) @@ -117,6 +68,12 @@ namespace OpenSim.Grid.UserServer userserver.Work(); } + private OpenUser_Main() + { + m_console = new ConsoleBase("OpenUser", this); + MainConsole.Instance = m_console; + } + private void Work() { m_console.Notice("Enter help for a list of commands\n"); @@ -130,16 +87,16 @@ namespace OpenSim.Grid.UserServer public void Startup() { Cfg = new UserConfig("USER SERVER", (Path.Combine(Util.configDir(), "UserServer_Config.xml"))); - + StatsManager.StartCollectingUserStats(); m_log.Info("[REGION]: Establishing data connection"); - m_userManager = new UserManager(); + m_userManager = new UserManager(); m_userManager._config = Cfg; - m_userManager.AddPlugin(Cfg.DatabaseProvider); + m_userManager.AddPlugin(Cfg.DatabaseProvider); m_loginService = new UserLoginService( - m_userManager, new LibraryRootFolder(), Cfg, Cfg.DefaultStartupMsg); + m_userManager, new LibraryRootFolder(), Cfg, Cfg.DefaultStartupMsg); m_messagesService = new MessageServersConnector(); @@ -147,7 +104,7 @@ namespace OpenSim.Grid.UserServer m_userManager.OnLogOffUser += NotifyMessageServersUserLoggOff; m_log.Info("[REGION]: Starting HTTP process"); - + m_httpServer = new BaseHttpServer(Cfg.HttpPort); AddHttpHandlers(); m_httpServer.Start(); @@ -160,7 +117,7 @@ namespace OpenSim.Grid.UserServer m_httpServer.AddXmlRPCHandler("login_to_simulator", m_loginService.XmlRpcLoginMethod); m_httpServer.AddHTTPHandler("login", m_loginService.ProcessHTMLLogin); - + m_httpServer.SetLLSDHandler(m_loginService.LLSDLoginMethod); 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("get_user_friend_list", m_userManager.XmlRpcResponseXmlRPCGetUserFriendList); m_httpServer.AddXmlRPCHandler("logout_of_simulator", m_userManager.XmlRPCLogOffUserMethodUUID); - + // Message Server ---> User Server m_httpServer.AddXmlRPCHandler("register_messageserver", m_messagesService.XmlRPCRegisterMessageServer); m_httpServer.AddXmlRPCHandler("agent_change_region", m_messagesService.XmlRPCUserMovedtoRegion); @@ -206,17 +163,17 @@ namespace OpenSim.Grid.UserServer { m_log.ErrorFormat( "[USERS]: A user with the name {0} {1} already exists!", tempfirstname, templastname); - + break; } - + tempMD5Passwd = Util.Md5Hash(Util.Md5Hash(tempMD5Passwd) + ":" + String.Empty); LLUUID userID = new LLUUID(); try { userID = m_userManager.AddUserProfile(tempfirstname, templastname, tempMD5Passwd, regX, regY); - } + } catch (Exception ex) { m_log.ErrorFormat("[USERS]: Error creating user: {0}", ex.ToString()); @@ -224,35 +181,76 @@ namespace OpenSim.Grid.UserServer try { - bool created + bool created = SynchronousRestObjectPoster.BeginPostObject( "POST", m_userManager._config.InventoryUrl + "CreateInventory/", userID.UUID); - + if (!created) { throw new Exception( String.Format( "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)); } + } catch (WebException e) { 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); } catch (Exception e) { m_log.ErrorFormat("[USERS]: Error creating inventory for user: {0}", e); } - + m_lastCreatedUser = userID; 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> requester = new RestObjectPosterResponse>(); + // requester.ReturnResponseVal = TestResponse; + // requester.BeginPostObject(m_userManager._config.InventoryUrl + "RootFolders/", m_lastCreatedUser); + SynchronousRestObjectPoster.BeginPostObject>("POST", + m_userManager. + _config. + InventoryUrl + + "RootFolders/", + m_lastCreatedUser); + break; + } + } + public void TestResponse(List resp) { m_console.Notice("response got"); @@ -264,11 +262,12 @@ namespace OpenSim.Grid.UserServer } public void NotifyMessageServersUserLoggedInToLocation(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) { - m_messagesService.TellMessageServersAboutUser(agentID, sessionID, RegionID, regionhandle, positionX, - positionY, positionZ, firstname, lastname); + + m_messagesService.TellMessageServersAboutUser( agentID, sessionID, RegionID, regionhandle, positionX, + positionY, positionZ, firstname, lastname); } } -} \ No newline at end of file +} diff --git a/OpenSim/Grid/UserServer/MessageServersConnector.cs b/OpenSim/Grid/UserServer/MessageServersConnector.cs index 70068e0a71..28f5c4cecc 100644 --- a/OpenSim/Grid/UserServer/MessageServersConnector.cs +++ b/OpenSim/Grid/UserServer/MessageServersConnector.cs @@ -41,12 +41,12 @@ namespace OpenSim.Grid.UserServer private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); public Dictionary MessageServers; - + public MessageServersConnector() { MessageServers = new Dictionary(); } - + public void RegisterMessageServer(string URI, MessageServerInfo serverData) { lock (MessageServers) @@ -55,7 +55,7 @@ namespace OpenSim.Grid.UserServer MessageServers.Add(URI, serverData); } } - + public void DeRegisterMessageServer(string URI) { lock (MessageServers) @@ -64,7 +64,7 @@ namespace OpenSim.Grid.UserServer MessageServers.Remove(URI); } } - + public void AddResponsibleRegion(string URI, ulong regionhandle) { if (!MessageServers.ContainsKey(URI)) @@ -76,9 +76,8 @@ namespace OpenSim.Grid.UserServer MessageServerInfo msginfo = MessageServers["URI"]; msginfo.responsibleForRegions.Add(regionhandle); MessageServers["URI"] = msginfo; - } + } } - public void RemoveResponsibleRegion(string URI, ulong regionhandle) { if (!MessageServers.ContainsKey(URI)) @@ -93,20 +92,20 @@ namespace OpenSim.Grid.UserServer msginfo.responsibleForRegions.Remove(regionhandle); MessageServers["URI"] = msginfo; } - } - } + } + } public XmlRpcResponse XmlRPCRegisterMessageServer(XmlRpcRequest request) { XmlRpcResponse response = new XmlRpcResponse(); - Hashtable requestData = (Hashtable) request.Params[0]; + Hashtable requestData = (Hashtable)request.Params[0]; Hashtable responseData = new Hashtable(); if (requestData.Contains("uri")) { - string URI = (string) requestData["uri"]; - string sendkey = (string) requestData["sendkey"]; - string recvkey = (string) requestData["recvkey"]; + string URI = (string)requestData["uri"]; + string sendkey=(string)requestData["sendkey"]; + string recvkey=(string)requestData["recvkey"]; MessageServerInfo m = new MessageServerInfo(); m.URI = URI; m.sendkey = sendkey; @@ -117,16 +116,15 @@ namespace OpenSim.Grid.UserServer } return response; } - public XmlRpcResponse XmlRPCDeRegisterMessageServer(XmlRpcRequest request) { XmlRpcResponse response = new XmlRpcResponse(); - Hashtable requestData = (Hashtable) request.Params[0]; + Hashtable requestData = (Hashtable)request.Params[0]; Hashtable responseData = new Hashtable(); if (requestData.Contains("uri")) { - string URI = (string) requestData["uri"]; + string URI = (string)requestData["uri"]; DeRegisterMessageServer(URI); responseData["responsestring"] = "TRUE"; @@ -134,24 +132,23 @@ namespace OpenSim.Grid.UserServer } return response; } - public XmlRpcResponse XmlRPCUserMovedtoRegion(XmlRpcRequest request) { XmlRpcResponse response = new XmlRpcResponse(); - Hashtable requestData = (Hashtable) request.Params[0]; + Hashtable requestData = (Hashtable)request.Params[0]; Hashtable responseData = new Hashtable(); if (requestData.Contains("fromuri")) { - string sURI = (string) requestData["fromuri"]; - string sagentID = (string) requestData["agentid"]; - string ssessionID = (string) requestData["sessionid"]; - string scurrentRegionID = (string) requestData["regionid"]; - string sregionhandle = (string) requestData["regionhandle"]; - string scurrentpos = (string) requestData["currentpos"]; + string sURI = (string)requestData["fromuri"]; + string sagentID = (string)requestData["agentid"]; + string ssessionID = (string)requestData["sessionid"]; + string scurrentRegionID = (string)requestData["regionid"]; + string sregionhandle = (string)requestData["regionhandle"]; + string scurrentpos = (string)requestData["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 - + responseData["responsestring"] = "TRUE"; response.Value = responseData; } @@ -159,7 +156,7 @@ namespace OpenSim.Grid.UserServer } 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) { // 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) { NotifyMessageServerAboutUser(serv, agentID, sessionID, RegionID, - regionhandle, positionX, positionY, positionZ, - firstname, lastname); + regionhandle, positionX, positionY, positionZ, + firstname, lastname); } } } @@ -194,10 +191,10 @@ namespace OpenSim.Grid.UserServer // { // m_log.Debug("[MSGCONNECTOR]: No Message Servers registered, ignoring"); // } - foreach (MessageServerInfo serv in MessageServers.Values) - { - NotifyMessageServerAboutUserLogoff(serv, agentID); - } + foreach (MessageServerInfo serv in MessageServers.Values) + { + NotifyMessageServerAboutUserLogoff(serv,agentID); + } } } @@ -221,10 +218,10 @@ namespace OpenSim.Grid.UserServer m_log.Info("[LOGOUT]: Notified : " + serv.URI + " about user logout"); } - private void NotifyMessageServerAboutUser(MessageServerInfo serv, - LLUUID agentID, LLUUID sessionID, LLUUID RegionID, - ulong regionhandle, float positionX, float positionY, float positionZ, - string firstname, string lastname) + private void NotifyMessageServerAboutUser(MessageServerInfo serv, + LLUUID agentID, LLUUID sessionID, LLUUID RegionID, + ulong regionhandle, float positionX, float positionY, float positionZ, + string firstname, string lastname) { Hashtable reqparams = new Hashtable(); 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"); } + } } -} \ No newline at end of file +} diff --git a/OpenSim/Grid/UserServer/Properties/AssemblyInfo.cs b/OpenSim/Grid/UserServer/Properties/AssemblyInfo.cs index eb60f11cc6..680b357f87 100644 --- a/OpenSim/Grid/UserServer/Properties/AssemblyInfo.cs +++ b/OpenSim/Grid/UserServer/Properties/AssemblyInfo.cs @@ -60,4 +60,4 @@ using System.Runtime.InteropServices; // [assembly : AssemblyVersion("1.0.0.0")] -[assembly : AssemblyFileVersion("1.0.0.0")] \ No newline at end of file +[assembly : AssemblyFileVersion("1.0.0.0")] diff --git a/OpenSim/Grid/UserServer/UserLoginService.cs b/OpenSim/Grid/UserServer/UserLoginService.cs index b19b74d419..b123b8ccb6 100644 --- a/OpenSim/Grid/UserServer/UserLoginService.cs +++ b/OpenSim/Grid/UserServer/UserLoginService.cs @@ -41,26 +41,26 @@ using OpenSim.Framework.Servers; namespace OpenSim.Grid.UserServer { 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 { 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 UserLoginService( - UserManagerBase userManager, LibraryRootFolder libraryRootFolder, + UserManagerBase userManager, LibraryRootFolder libraryRootFolder, UserConfig config, string welcomeMess) : base(userManager, libraryRootFolder, welcomeMess) { m_config = config; } - public event UserLoggedInAtLocation OnUserLoggedInAtLocation; - /// /// Customises the login response and fills in missing values. /// @@ -95,8 +95,7 @@ namespace OpenSim.Grid.UserServer else { string[] startLocationRequestParsed = Util.ParseStartLocationRequest(startLocationRequest); - m_log.Info("[DEBUGLOGINPARSE]: 1:" + startLocationRequestParsed[0] + ", 2:" + startLocationRequestParsed[1] + ", 3:" + - startLocationRequestParsed[2] + ", 4:" + startLocationRequestParsed[3]); + m_log.Info("[DEBUGLOGINPARSE]: 1:" + startLocationRequestParsed[0] + ", 2:" + startLocationRequestParsed[1] + ", 3:" + startLocationRequestParsed[2] + ", 4:" + startLocationRequestParsed[3]); if (startLocationRequestParsed[0] == "last") { // 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]); SimInfo = - RegionProfileData.RequestSimProfileData( - startLocationRequestParsed[0], m_config.GridServerURL, - m_config.GridSendKey, m_config.GridRecvKey); + RegionProfileData.RequestSimProfileData( + startLocationRequestParsed[0], m_config.GridServerURL, + m_config.GridSendKey, m_config.GridRecvKey); if (SimInfo == null) { @@ -120,9 +119,7 @@ namespace OpenSim.Grid.UserServer RegionProfileData.RequestSimProfileData( theUser.HomeRegion, m_config.GridServerURL, m_config.GridSendKey, m_config.GridRecvKey); - } - else - { + } else { start_x = Convert.ToInt32(startLocationRequestParsed[1]); start_y = Convert.ToInt32(startLocationRequestParsed[2]); start_z = Convert.ToInt32(startLocationRequestParsed[3]); @@ -133,30 +130,30 @@ namespace OpenSim.Grid.UserServer // Customise the response //CFK: This is redundant and the next message should always appear. //CFK: m_log.Info("[LOGIN]: Home Location"); - response.Home = "{'region_handle':[r" + (SimInfo.regionLocX * Constants.RegionSize) + ",r" + - (SimInfo.regionLocY * Constants.RegionSize) + "], " + - "'position':[r" + theUser.HomeLocation.X + ",r" + - theUser.HomeLocation.Y + ",r" + theUser.HomeLocation.Z + "], " + - "'look_at':[r" + theUser.HomeLocation.X + ",r" + - theUser.HomeLocation.Y + ",r" + theUser.HomeLocation.Z + "]}"; + response.Home = "{'region_handle':[r" + (SimInfo.regionLocX * Constants.RegionSize).ToString() + ",r" + + (SimInfo.regionLocY * Constants.RegionSize).ToString() + "], " + + "'position':[r" + theUser.HomeLocation.X.ToString() + ",r" + + theUser.HomeLocation.Y.ToString() + ",r" + theUser.HomeLocation.Z.ToString() + "], " + + "'look_at':[r" + theUser.HomeLocation.X.ToString() + ",r" + + theUser.HomeLocation.Y.ToString() + ",r" + theUser.HomeLocation.Z.ToString() + "]}"; // Destination //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: m_log.Info("[LOGIN]: CUSTOMISERESPONSE: Region X: " + SimInfo.regionLocX + //CFK: "; Region Y: " + SimInfo.regionLocY); - response.SimAddress = Util.GetHostFromDNS(SimInfo.serverURI.Split(new[] {'/', ':'})[3]).ToString(); - response.SimPort = uint.Parse(SimInfo.serverURI.Split(new[] {'/', ':'})[4]); + response.SimAddress = Util.GetHostFromDNS(SimInfo.serverURI.Split(new char[] { '/', ':' })[3]).ToString(); + response.SimPort = uint.Parse(SimInfo.serverURI.Split(new char[] { '/', ':' })[4]); response.RegionX = SimInfo.regionLocX; response.RegionY = SimInfo.regionLocY; //Not sure if the + "/CAPS/" should in fact be +"CAPS/" depending if there is already a / as part of httpServerURI string capsPath = Util.GetRandomCapsPath(); response.SeedCapability = SimInfo.httpServerURI + "CAPS/" + capsPath + "0000/"; - + m_log.DebugFormat( - "[LOGIN]: Sending new CAPS seed url {0} to client {1}", - response.SeedCapability, response.AgentID); + "[LOGIN]: Sending new CAPS seed url {0} to client {1}", + response.SeedCapability, response.AgentID); // Notify the target of an incoming user //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.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); theUser.CurrentAgent.Position = tmp_v; } @@ -190,43 +186,42 @@ namespace OpenSim.Grid.UserServer // Update agent with target sim m_log.InfoFormat( - "[LOGIN]: Telling region {0} @ {1},{2} ({3}) to expect user connection", - SimInfo.regionName, response.RegionX, response.RegionY, SimInfo.httpServerURI); + "[LOGIN]: Telling region {0} @ {1},{2} ({3}) to expect user connection", + 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); - + if (GridResp.IsFault) { 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); } handlerUserLoggedInAtLocation = OnUserLoggedInAtLocation; if (handlerUserLoggedInAtLocation != null) { //m_log.Info("[LOGIN]: Letting other objects know about login"); - handlerUserLoggedInAtLocation(theUser.ID, theUser.CurrentAgent.SessionID, theUser.CurrentAgent.Region, - theUser.CurrentAgent.Handle, theUser.CurrentAgent.Position.X, theUser.CurrentAgent.Position.Y, - theUser.CurrentAgent.Position.Z, - theUser.FirstName, theUser.SurName); + handlerUserLoggedInAtLocation(theUser.ID, theUser.CurrentAgent.SessionID, theUser.CurrentAgent.Region, + theUser.CurrentAgent.Handle, theUser.CurrentAgent.Position.X,theUser.CurrentAgent.Position.Y,theUser.CurrentAgent.Position.Z, + theUser.FirstName,theUser.SurName); } } catch (Exception) - //catch (System.AccessViolationException) + //catch (System.AccessViolationException) { tryDefault = true; } - + if (tryDefault) { // Send him to default region instead // 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( - "[LOGIN]: Home region not available: sending to default " + defaultHandle); + "[LOGIN]: Home region not available: sending to default " + defaultHandle.ToString()); try { @@ -236,19 +231,19 @@ namespace OpenSim.Grid.UserServer // Customise the response m_log.Info("[LOGIN]: Home Location"); - response.Home = "{'region_handle':[r" + (SimInfo.regionLocX * Constants.RegionSize) + ",r" + - (SimInfo.regionLocY * Constants.RegionSize) + "], " + - "'position':[r" + theUser.HomeLocation.X + ",r" + - theUser.HomeLocation.Y + ",r" + theUser.HomeLocation.Z + "], " + - "'look_at':[r" + theUser.HomeLocation.X + ",r" + - theUser.HomeLocation.Y + ",r" + theUser.HomeLocation.Z + "]}"; + response.Home = "{'region_handle':[r" + (SimInfo.regionLocX * Constants.RegionSize).ToString() + ",r" + + (SimInfo.regionLocY * Constants.RegionSize).ToString() + "], " + + "'position':[r" + theUser.HomeLocation.X.ToString() + ",r" + + theUser.HomeLocation.Y.ToString() + ",r" + theUser.HomeLocation.Z.ToString() + "], " + + "'look_at':[r" + theUser.HomeLocation.X.ToString() + ",r" + + theUser.HomeLocation.Y.ToString() + ",r" + theUser.HomeLocation.Z.ToString() + "]}"; // Destination m_log.Info("[LOGIN]: " + "CUSTOMISERESPONSE: Region X: " + SimInfo.regionLocX + "; Region Y: " + SimInfo.regionLocY); - response.SimAddress = Util.GetHostFromDNS(SimInfo.serverURI.Split(new[] {'/', ':'})[3]).ToString(); - response.SimPort = uint.Parse(SimInfo.serverURI.Split(new[] {'/', ':'})[4]); + response.SimAddress = Util.GetHostFromDNS(SimInfo.serverURI.Split(new char[] { '/', ':' })[3]).ToString(); + response.SimPort = uint.Parse(SimInfo.serverURI.Split(new char[] { '/', ':' })[4]); response.RegionX = SimInfo.regionLocX; response.RegionY = SimInfo.regionLocY; @@ -288,16 +283,15 @@ namespace OpenSim.Grid.UserServer { m_log.Info("[LOGIN]: Letting other objects know about login"); handlerUserLoggedInAtLocation(theUser.ID, theUser.CurrentAgent.SessionID, theUser.CurrentAgent.Region, - theUser.CurrentAgent.Handle, theUser.CurrentAgent.Position.X, theUser.CurrentAgent.Position.Y, - theUser.CurrentAgent.Position.Z, - theUser.FirstName, theUser.SurName); + theUser.CurrentAgent.Handle, theUser.CurrentAgent.Position.X, theUser.CurrentAgent.Position.Y, theUser.CurrentAgent.Position.Z, + theUser.FirstName, theUser.SurName); } } catch (Exception e) { 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) { m_log.DebugFormat( - "[LOGIN]: Contacting inventory service at {0} for inventory skeleton of user {1}", - m_config.InventoryUrl, userID); + "[LOGIN]: Contacting inventory service at {0} for inventory skeleton of user {1}", + m_config.InventoryUrl, userID); List folders = SynchronousRestObjectPoster.BeginPostObject>( @@ -322,23 +316,23 @@ namespace OpenSim.Grid.UserServer // 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 // exist. - bool created = + bool created = SynchronousRestObjectPoster.BeginPostObject( "POST", m_config.InventoryUrl + "CreateInventory/", userID.UUID); - + if (!created) { throw new Exception( String.Format( "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)); } else { m_log.InfoFormat("[LOGIN]: A new inventory skeleton was successfully created for user {0}", userID); } - + folders = SynchronousRestObjectPoster.BeginPostObject>( "POST", m_config.InventoryUrl + "RootFolders/", userID.UUID); } @@ -348,11 +342,11 @@ namespace OpenSim.Grid.UserServer LLUUID rootID = LLUUID.Zero; ArrayList AgentInventoryArray = new ArrayList(); Hashtable TempHash; - + foreach (InventoryFolderBase InvFolder in folders) { // m_log.DebugFormat("[LOGIN]: Received agent inventory folder {0}", InvFolder.name); - + if (InvFolder.ParentID == LLUUID.Zero) { rootID = InvFolder.ID; @@ -365,16 +359,16 @@ namespace OpenSim.Grid.UserServer TempHash["folder_id"] = InvFolder.ID.ToString(); AgentInventoryArray.Add(TempHash); } - + return new InventoryData(AgentInventoryArray, rootID); } else { throw new Exception( 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)); } } } -} \ No newline at end of file +} diff --git a/OpenSim/Grid/UserServer/UserManager.cs b/OpenSim/Grid/UserServer/UserManager.cs index 0122ad07bd..5d0e1d6211 100644 --- a/OpenSim/Grid/UserServer/UserManager.cs +++ b/OpenSim/Grid/UserServer/UserManager.cs @@ -41,11 +41,11 @@ namespace OpenSim.Grid.UserServer public delegate void logOffUser(LLUUID AgentID); public class UserManager : UserManagerBase - { + { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private logOffUser handlerLogOffUser; public event logOffUser OnLogOffUser; + private logOffUser handlerLogOffUser = null; /// /// Deletes an active agent session @@ -81,17 +81,17 @@ namespace OpenSim.Grid.UserServer XmlRpcResponse response = new XmlRpcResponse(); Hashtable responseData = new Hashtable(); // Query Result Information - responseData["queryid"] = queryID.ToString(); - responseData["avcount"] = returnUsers.Count.ToString(); + responseData["queryid"] = (string) queryID.ToString(); + responseData["avcount"] = (string) returnUsers.Count.ToString(); for (int i = 0; i < returnUsers.Count; i++) { - responseData["avatarid" + i] = returnUsers[i].AvatarID.ToString(); - responseData["firstname" + i] = returnUsers[i].firstName; - responseData["lastname" + i] = returnUsers[i].lastName; + responseData["avatarid" + i.ToString()] = returnUsers[i].AvatarID.ToString(); + responseData["firstname" + i.ToString()] = returnUsers[i].firstName; + responseData["lastname" + i.ToString()] = returnUsers[i].lastName; } response.Value = responseData; - + return response; } @@ -101,14 +101,14 @@ namespace OpenSim.Grid.UserServer Hashtable responseData = new Hashtable(); // Query Result Information - responseData["avcount"] = returnUsers.Count.ToString(); + responseData["avcount"] = (string)returnUsers.Count.ToString(); for (int i = 0; i < returnUsers.Count; i++) { - responseData["ownerID" + i] = returnUsers[i].FriendListOwner.UUID.ToString(); - responseData["friendID" + i] = returnUsers[i].Friend.UUID.ToString(); - responseData["ownerPerms" + i] = returnUsers[i].FriendListOwnerPerms.ToString(); - responseData["friendPerms" + i] = returnUsers[i].FriendPerms.ToString(); + responseData["ownerID" + i.ToString()] = returnUsers[i].FriendListOwner.UUID.ToString(); + responseData["friendID" + i.ToString()] = returnUsers[i].Friend.UUID.ToString(); + responseData["ownerPerms" + i.ToString()] = returnUsers[i].FriendListOwnerPerms.ToString(); + responseData["friendPerms" + i.ToString()] = returnUsers[i].FriendPerms.ToString(); } response.Value = responseData; @@ -156,21 +156,6 @@ namespace OpenSim.Grid.UserServer 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 public XmlRpcResponse XmlRPCGetAvatarPickerAvatar(XmlRpcRequest request) @@ -193,16 +178,15 @@ namespace OpenSim.Grid.UserServer public XmlRpcResponse XmlRpcResponseXmlRPCAddUserFriend(XmlRpcRequest request) { XmlRpcResponse response = new XmlRpcResponse(); - Hashtable requestData = (Hashtable) request.Params[0]; + Hashtable requestData = (Hashtable)request.Params[0]; Hashtable responseData = new Hashtable(); string returnString = "FALSE"; // Query Result Information - + if (requestData.Contains("ownerID") && requestData.Contains("friendID") && requestData.Contains("friendPerms")) { // UserManagerBase.AddNewuserFriend - AddNewUserFriend(new LLUUID((string) requestData["ownerID"]), new LLUUID((string) requestData["friendID"]), - (uint) Convert.ToInt32((string) requestData["friendPerms"])); + AddNewUserFriend(new LLUUID((string)requestData["ownerID"]), new LLUUID((string)requestData["friendID"]), (uint)Convert.ToInt32((string)requestData["friendPerms"])); returnString = "TRUE"; } responseData["returnString"] = returnString; @@ -213,15 +197,15 @@ namespace OpenSim.Grid.UserServer public XmlRpcResponse XmlRpcResponseXmlRPCRemoveUserFriend(XmlRpcRequest request) { XmlRpcResponse response = new XmlRpcResponse(); - Hashtable requestData = (Hashtable) request.Params[0]; + Hashtable requestData = (Hashtable)request.Params[0]; Hashtable responseData = new Hashtable(); string returnString = "FALSE"; // Query Result Information - + if (requestData.Contains("ownerID") && requestData.Contains("friendID")) { // 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"; } responseData["returnString"] = returnString; @@ -232,14 +216,13 @@ namespace OpenSim.Grid.UserServer public XmlRpcResponse XmlRpcResponseXmlRPCUpdateUserFriendPerms(XmlRpcRequest request) { XmlRpcResponse response = new XmlRpcResponse(); - Hashtable requestData = (Hashtable) request.Params[0]; + Hashtable requestData = (Hashtable)request.Params[0]; Hashtable responseData = new Hashtable(); string returnString = "FALSE"; - + if (requestData.Contains("ownerID") && requestData.Contains("friendID") && requestData.Contains("friendPerms")) { - UpdateUserFriendPerms(new LLUUID((string) requestData["ownerID"]), new LLUUID((string) requestData["friendID"]), - (uint) Convert.ToInt32((string) requestData["friendPerms"])); + UpdateUserFriendPerms(new LLUUID((string)requestData["ownerID"]), new LLUUID((string)requestData["friendID"]), (uint)Convert.ToInt32((string)requestData["friendPerms"])); // UserManagerBase. returnString = "TRUE"; } @@ -251,16 +234,16 @@ namespace OpenSim.Grid.UserServer public XmlRpcResponse XmlRpcResponseXmlRPCGetUserFriendList(XmlRpcRequest request) { XmlRpcResponse response = new XmlRpcResponse(); - Hashtable requestData = (Hashtable) request.Params[0]; + Hashtable requestData = (Hashtable)request.Params[0]; Hashtable responseData = new Hashtable(); List returndata = new List(); if (requestData.Contains("ownerID")) { - returndata = GetUserFriendList(new LLUUID((string) requestData["ownerID"])); + returndata = this.GetUserFriendList(new LLUUID((string)requestData["ownerID"])); } - + return FriendListItemListtoXmlRPCResponse(returndata); } @@ -338,7 +321,7 @@ namespace OpenSim.Grid.UserServer { m_log.Debug("[UserManager]: Got request to update user profile"); XmlRpcResponse response = new XmlRpcResponse(); - Hashtable requestData = (Hashtable) request.Params[0]; + Hashtable requestData = (Hashtable)request.Params[0]; Hashtable responseData = new Hashtable(); UserProfileData userProfile; @@ -347,7 +330,7 @@ namespace OpenSim.Grid.UserServer return CreateUnknownUserErrorResponse(); } - LLUUID UserUUID = new LLUUID((string) requestData["avatar_uuid"]); + LLUUID UserUUID = new LLUUID((string)requestData["avatar_uuid"]); userProfile = GetUserProfile(UserUUID); if (null == userProfile) { @@ -359,33 +342,33 @@ namespace OpenSim.Grid.UserServer } if (requestData.Contains("FLImageID")) { - userProfile.FirstLifeImage = new LLUUID((string) requestData["FLImageID"]); + userProfile.FirstLifeImage = new LLUUID((string)requestData["FLImageID"]); } if (requestData.Contains("ImageID")) { - userProfile.Image = new LLUUID((string) requestData["ImageID"]); + userProfile.Image = new LLUUID((string)requestData["ImageID"]); } // dont' know how yet if (requestData.Contains("MaturePublish")) - { + { } if (requestData.Contains("AboutText")) { - userProfile.AboutText = (string) requestData["AboutText"]; + userProfile.AboutText = (string)requestData["AboutText"]; } if (requestData.Contains("FLAboutText")) { - userProfile.FirstLifeAboutText = (string) requestData["FLAboutText"]; + userProfile.FirstLifeAboutText = (string)requestData["FLAboutText"]; } // not in DB yet. if (requestData.Contains("ProfileURL")) - { + { } if (requestData.Contains("home_region")) { try { - userProfile.HomeRegion = Convert.ToUInt64((string) requestData["home_region"]); + userProfile.HomeRegion = Convert.ToUInt64((string)requestData["home_region"]); } catch (ArgumentException) { @@ -399,23 +382,25 @@ namespace OpenSim.Grid.UserServer { m_log.Error("[PROFILE]:Failed to set home region, Value was too large"); } + } if (requestData.Contains("home_pos_x")) { try { - userProfile.HomeLocationX = (float) Convert.ToDecimal((string) requestData["home_pos_x"]); + userProfile.HomeLocationX = (float)Convert.ToDecimal((string)requestData["home_pos_x"]); } catch (InvalidCastException) { m_log.Error("[PROFILE]:Failed to set home postion x"); } + } if (requestData.Contains("home_pos_y")) { try { - userProfile.HomeLocationY = (float) Convert.ToDecimal((string) requestData["home_pos_y"]); + userProfile.HomeLocationY = (float)Convert.ToDecimal((string)requestData["home_pos_y"]); } catch (InvalidCastException) { @@ -426,7 +411,7 @@ namespace OpenSim.Grid.UserServer { try { - userProfile.HomeLocationZ = (float) Convert.ToDecimal((string) requestData["home_pos_z"]); + userProfile.HomeLocationZ = (float)Convert.ToDecimal((string)requestData["home_pos_z"]); } catch (InvalidCastException) { @@ -437,7 +422,7 @@ namespace OpenSim.Grid.UserServer { try { - userProfile.HomeLookAtX = (float) Convert.ToDecimal((string) requestData["home_look_x"]); + userProfile.HomeLookAtX = (float)Convert.ToDecimal((string)requestData["home_look_x"]); } catch (InvalidCastException) { @@ -448,7 +433,7 @@ namespace OpenSim.Grid.UserServer { try { - userProfile.HomeLookAtY = (float) Convert.ToDecimal((string) requestData["home_look_y"]); + userProfile.HomeLookAtY = (float)Convert.ToDecimal((string)requestData["home_look_y"]); } catch (InvalidCastException) { @@ -457,9 +442,9 @@ namespace OpenSim.Grid.UserServer } 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) { @@ -476,18 +461,18 @@ namespace OpenSim.Grid.UserServer public XmlRpcResponse XmlRPCLogOffUserMethodUUID(XmlRpcRequest request) { XmlRpcResponse response = new XmlRpcResponse(); - Hashtable requestData = (Hashtable) request.Params[0]; + Hashtable requestData = (Hashtable)request.Params[0]; if (requestData.Contains("avatar_uuid")) { try { - LLUUID userUUID = new LLUUID((string) requestData["avatar_uuid"]); - LLUUID RegionID = new LLUUID((string) requestData["region_uuid"]); - ulong regionhandle = (ulong) Convert.ToInt64((string) requestData["region_handle"]); - float posx = (float) Convert.ToDecimal((string) requestData["region_pos_x"]); - float posy = (float) Convert.ToDecimal((string) requestData["region_pos_y"]); - float posz = (float) Convert.ToDecimal((string) requestData["region_pos_z"]); + LLUUID userUUID = new LLUUID((string)requestData["avatar_uuid"]); + LLUUID RegionID = new LLUUID((string)requestData["region_uuid"]); + ulong regionhandle = (ulong)Convert.ToInt64((string)requestData["region_handle"]); + float posx = (float)Convert.ToDecimal((string)requestData["region_pos_x"]); + float posy = (float)Convert.ToDecimal((string)requestData["region_pos_y"]); + float posz = (float)Convert.ToDecimal((string)requestData["region_pos_z"]); handlerLogOffUser = OnLogOffUser; if (handlerLogOffUser != null) @@ -510,5 +495,20 @@ namespace OpenSim.Grid.UserServer } #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."); + } } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/InstantMessageReceiver.cs b/OpenSim/Region/Environment/InstantMessageReceiver.cs index cc7880d6ba..b82b4aa1dc 100644 --- a/OpenSim/Region/Environment/InstantMessageReceiver.cs +++ b/OpenSim/Region/Environment/InstantMessageReceiver.cs @@ -32,10 +32,13 @@ namespace OpenSim.Region.Environment /// /// Bit Vector for Which Modules to send an instant message to from the Scene or an Associated Module /// + // This prevents the Modules from sending Instant messages to other modules through the scene // and then receiving the same messages + // This is mostly here because on LLSL and the SecondLife Client, IMs,Groups and friends are linked // inseparably + [Flags] public enum InstantMessageReceiver : uint { @@ -48,4 +51,4 @@ namespace OpenSim.Region.Environment /// The Groups Module GroupsModule = 0x00000004 } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Interfaces/IAgentAssetTransactions.cs b/OpenSim/Region/Environment/Interfaces/IAgentAssetTransactions.cs index 5d2ec89b9a..c099fa1139 100644 --- a/OpenSim/Region/Environment/Interfaces/IAgentAssetTransactions.cs +++ b/OpenSim/Region/Environment/Interfaces/IAgentAssetTransactions.cs @@ -41,4 +41,4 @@ namespace OpenSim.Region.Environment.Interfaces void RemoveAgentAssetTransactions(LLUUID userID); } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Interfaces/IAvatarFactory.cs b/OpenSim/Region/Environment/Interfaces/IAvatarFactory.cs index d5473fb2d8..3ebbaab843 100644 --- a/OpenSim/Region/Environment/Interfaces/IAvatarFactory.cs +++ b/OpenSim/Region/Environment/Interfaces/IAvatarFactory.cs @@ -30,9 +30,9 @@ using OpenSim.Region.Environment.Scenes; namespace OpenSim.Region.Environment.Interfaces { - public interface IAvatarFactory + public interface IAvatarFactory { bool TryGetAvatarAppearance(LLUUID avatarId, out AvatarAppearance appearance); void UpdateDatabase(LLUUID userID, AvatarAppearance avatAppearance); } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Interfaces/IHttpRequests.cs b/OpenSim/Region/Environment/Interfaces/IHttpRequests.cs index 8e2c978d4c..46ba9b2694 100644 --- a/OpenSim/Region/Environment/Interfaces/IHttpRequests.cs +++ b/OpenSim/Region/Environment/Interfaces/IHttpRequests.cs @@ -39,4 +39,4 @@ namespace OpenSim.Region.Environment.Interfaces HttpRequestClass GetNextCompletedRequest(); void RemoveCompletedRequest(LLUUID id); } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Interfaces/ILandChannel.cs b/OpenSim/Region/Environment/Interfaces/ILandChannel.cs index 8486f701b6..464a213691 100644 --- a/OpenSim/Region/Environment/Interfaces/ILandChannel.cs +++ b/OpenSim/Region/Environment/Interfaces/ILandChannel.cs @@ -70,8 +70,7 @@ namespace OpenSim.Region.Environment.Interfaces void handleSignificantClientMovement(IClientAPI remote_client); void handleAnyClientMovement(ScenePresence avatar); 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 entries, IClientAPI remote_client); - void handleParcelAccessUpdateRequest(LLUUID agentID, LLUUID sessionID, uint flags, int landLocalID, List entries, - IClientAPI remote_client); } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Interfaces/IRegionDataStore.cs b/OpenSim/Region/Environment/Interfaces/IRegionDataStore.cs index e7af0a99ed..c757461e17 100644 --- a/OpenSim/Region/Environment/Interfaces/IRegionDataStore.cs +++ b/OpenSim/Region/Environment/Interfaces/IRegionDataStore.cs @@ -48,7 +48,7 @@ namespace OpenSim.Region.Environment.Interfaces /// /// void StoreObject(SceneObjectGroup obj, LLUUID regionUUID); - + /// /// Entirely removes the object, including inventory /// @@ -56,7 +56,7 @@ namespace OpenSim.Region.Environment.Interfaces /// /// void RemoveObject(LLUUID uuid, LLUUID regionUUID); - + /// /// Store a prim's inventory /// @@ -74,4 +74,4 @@ namespace OpenSim.Region.Environment.Interfaces void Shutdown(); } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Interfaces/IRegionModule.cs b/OpenSim/Region/Environment/Interfaces/IRegionModule.cs index 80698d51e1..ffa4f32cd7 100644 --- a/OpenSim/Region/Environment/Interfaces/IRegionModule.cs +++ b/OpenSim/Region/Environment/Interfaces/IRegionModule.cs @@ -32,10 +32,10 @@ namespace OpenSim.Region.Environment.Interfaces { public interface IRegionModule { - string Name { get; } - bool IsSharedModule { get; } void Initialise(Scene scene, IConfigSource source); void PostInitialise(); void Close(); + string Name { get; } + bool IsSharedModule { get; } } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Interfaces/ISimChat.cs b/OpenSim/Region/Environment/Interfaces/ISimChat.cs index 9335b00826..d52e58b513 100644 --- a/OpenSim/Region/Environment/Interfaces/ISimChat.cs +++ b/OpenSim/Region/Environment/Interfaces/ISimChat.cs @@ -34,4 +34,4 @@ namespace OpenSim.Region.Environment.Interfaces { void SimChat(Object sender, ChatFromViewerArgs e); } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Interfaces/IWorldComm.cs b/OpenSim/Region/Environment/Interfaces/IWorldComm.cs index 992db19f21..8a63c54ebe 100644 --- a/OpenSim/Region/Environment/Interfaces/IWorldComm.cs +++ b/OpenSim/Region/Environment/Interfaces/IWorldComm.cs @@ -43,4 +43,4 @@ namespace OpenSim.Region.Environment.Interfaces uint PeekNextMessageLocalID(); LLUUID PeekNextMessageItemID(); } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Interfaces/IXMLRPC.cs b/OpenSim/Region/Environment/Interfaces/IXMLRPC.cs index 959b0b793c..6c1d0256c2 100644 --- a/OpenSim/Region/Environment/Interfaces/IXMLRPC.cs +++ b/OpenSim/Region/Environment/Interfaces/IXMLRPC.cs @@ -45,4 +45,4 @@ namespace OpenSim.Region.Environment.Interfaces void RemoveCompletedSRDRequest(LLUUID id); void CancelSRDRequests(LLUUID itemID); } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Interfaces/IXfer.cs b/OpenSim/Region/Environment/Interfaces/IXfer.cs index bb2caca44b..bad1833ead 100644 --- a/OpenSim/Region/Environment/Interfaces/IXfer.cs +++ b/OpenSim/Region/Environment/Interfaces/IXfer.cs @@ -31,4 +31,4 @@ namespace OpenSim.Region.Environment.Interfaces { bool AddNewFile(string fileName, byte[] data); } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/ModuleLoader.cs b/OpenSim/Region/Environment/ModuleLoader.cs index caaa28f4a4..3f8b9ff5d3 100644 --- a/OpenSim/Region/Environment/ModuleLoader.cs +++ b/OpenSim/Region/Environment/ModuleLoader.cs @@ -47,11 +47,12 @@ namespace OpenSim.Region.Environment public class ModuleLoader { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private readonly IConfigSource m_config; + + public Dictionary LoadedAssemblys = new Dictionary(); private readonly List m_loadedModules = new List(); private readonly Dictionary m_loadedSharedModules = new Dictionary(); - public Dictionary LoadedAssemblys = new Dictionary(); + private readonly IConfigSource m_config; public ModuleLoader(IConfigSource config) { @@ -85,8 +86,7 @@ namespace OpenSim.Region.Environment DynamicTextureModule dynamicModule = new DynamicTextureModule(); 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, - "DynamicTextureModule"); + m_log.ErrorFormat("[MODULES]: Module name \"{0}\" already exists in module list. Module type {1} not added!", dynamicModule.Name, "DynamicTextureModule"); } else { @@ -123,15 +123,15 @@ namespace OpenSim.Region.Environment m_loadedSharedModules.Add(loadMod.Name, loadMod); } - // AvatarFactoryModule avatarFactory = new AvatarFactoryModule(); - // 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"); - // } - // else - // { - // m_loadedSharedModules.Add(avatarFactory.Name, avatarFactory); - // } + // AvatarFactoryModule avatarFactory = new AvatarFactoryModule(); + // 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"); + // } + // else + // { + // m_loadedSharedModules.Add(avatarFactory.Name, avatarFactory); + // } XMLRPCModule xmlRpcMod = new XMLRPCModule(); if (m_loadedSharedModules.ContainsKey(xmlRpcMod.Name)) @@ -149,13 +149,13 @@ namespace OpenSim.Region.Environment AssetTransactionModule transactionsModule = new AssetTransactionModule(); 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, - "TransactionModule"); + m_log.ErrorFormat("[MODULES]: Module name \"{0}\" already exists in module list. Module type {1} not added!", transactionsModule.Name, "TransactionModule"); } else { m_loadedSharedModules.Add(transactionsModule.Name, transactionsModule); } + } public void InitialiseSharedModules(Scene scene) @@ -284,7 +284,7 @@ namespace OpenSim.Region.Environment { 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) { rm.Close(); - + m_loadedModules.Remove(rm); } } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Modules/Agent/AssetDownload/AssetDownloadModule.cs b/OpenSim/Region/Environment/Modules/Agent/AssetDownload/AssetDownloadModule.cs index 550b673b4e..48db51b622 100644 --- a/OpenSim/Region/Environment/Modules/Agent/AssetDownload/AssetDownloadModule.cs +++ b/OpenSim/Region/Environment/Modules/Agent/AssetDownload/AssetDownloadModule.cs @@ -40,16 +40,15 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetDownload /// /// Asset requests with data which are ready to be sent back to requesters. This includes textures. /// - private readonly List AssetRequests; + private List AssetRequests; - private readonly Dictionary RegisteredScenes = new Dictionary(); + private Scene m_scene; + private Dictionary RegisteredScenes = new Dictionary(); /// /// Assets requests (for each user) which are waiting for asset server data. This includes texture requests /// - private readonly Dictionary> RequestedAssets; - - private Scene m_scene; + private Dictionary> RequestedAssets; public AssetDownloadModule() { @@ -206,18 +205,22 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetDownload { public AssetBase AssetInf; public byte AssetRequestSource = 2; - public long DataPointer; + public long DataPointer = 0; public int DiscardLevel = -1; public AssetBase ImageInfo; public bool IsTextureRequest; - public int NumPackets; - public int PacketCounter; - public byte[] Params; + public int NumPackets = 0; + public int PacketCounter = 0; + public byte[] Params = null; public LLUUID RequestAssetID; public IClientAPI RequestUser; public LLUUID TransferRequestID; //public bool AssetInCache; //public int TimeRequested; + + public AssetRequest() + { + } } #endregion diff --git a/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AgentAssetsTransactions.cs b/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AgentAssetsTransactions.cs index 008daa2cb5..555d5f4650 100644 --- a/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AgentAssetsTransactions.cs +++ b/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AgentAssetsTransactions.cs @@ -44,7 +44,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction // = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); // Fields - private readonly bool m_dumpAssetsToFile; + private bool m_dumpAssetsToFile; public AgentAssetTransactionsManager Manager; public LLUUID UserID; public Dictionary XferUploaders = new Dictionary(); @@ -141,23 +141,23 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction public class AssetXferUploader { // Fields - private readonly bool m_dumpAssetToFile; - private readonly AgentAssetTransactions m_userTransactions; public bool AddToInventory; public AssetBase Asset; public LLUUID InventFolder = LLUUID.Zero; - private sbyte invType; - private bool m_createItem; + private sbyte invType = 0; + private bool m_createItem = false; 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 bool m_storeLocal; - private uint nextPerm; + private AgentAssetTransactions m_userTransactions; + private uint nextPerm = 0; private IClientAPI ourClient; public LLUUID TransactionID = LLUUID.Zero; - private sbyte type; + private sbyte type = 0; public bool UploadComplete; - private byte wearableType; + private byte wearableType = 0; public ulong XferID; public AssetXferUploader(AgentAssetTransactions transactions, bool dumpAssetToFile) @@ -390,7 +390,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction item.BasePermissions = 2147483647; item.CurrentPermissions = 2147483647; item.NextPermissions = nextPerm; - item.Flags = wearableType; + item.Flags = (uint) wearableType; userInfo.AddItem(ourClient.AgentId, item); ourClient.SendInventoryItemCreateUpdate(item); diff --git a/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AssetTransactionModule.cs b/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AssetTransactionModule.cs index d7f5804338..fcd0e0c010 100644 --- a/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AssetTransactionModule.cs +++ b/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AssetTransactionModule.cs @@ -40,11 +40,16 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction public class AssetTransactionModule : IRegionModule, IAgentAssetTransactions { private readonly Dictionary RegisteredScenes = new Dictionary(); - private bool m_dumpAssetsToFile; - private Scene m_scene; + private bool m_dumpAssetsToFile = false; + private Scene m_scene = null; private AgentAssetTransactionsManager m_transactionManager; + public AssetTransactionModule() + { + // System.Console.WriteLine("creating AgentAssetTransactionModule"); + } + #region IAgentAssetTransactions Members public void HandleItemCreationFromTransaction(IClientAPI remoteClient, LLUUID transactionID, LLUUID folderID, @@ -140,13 +145,13 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction /// /// Each agent has its own singleton collection of transactions /// - private readonly Dictionary AgentTransactions = + private Dictionary AgentTransactions = new Dictionary(); /// /// Should we dump uploaded assets to the filesystem? /// - private readonly bool m_dumpAssetsToFile; + private bool m_dumpAssetsToFile; public Scene MyScene; diff --git a/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureDownloadModule.cs b/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureDownloadModule.cs index 96ef61f30c..474ac75d99 100644 --- a/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureDownloadModule.cs +++ b/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureDownloadModule.cs @@ -47,8 +47,6 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload private readonly BlockingQueue m_queueSenders = new BlockingQueue(); - private readonly List m_scenes = new List(); - /// /// Each user has their own texture download service. /// @@ -56,9 +54,14 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload new Dictionary(); private Scene m_scene; + private List m_scenes = new List(); private Thread m_thread; + public TextureDownloadModule() + { + } + #region IRegionModule Members public void Initialise(Scene scene, IConfigSource config) @@ -66,7 +69,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload if (m_scene == null) { //Console.WriteLine("Creating Texture download module"); - m_thread = new Thread(ProcessTextureSenders); + m_thread = new Thread(new ThreadStart(ProcessTextureSenders)); m_thread.Name = "ProcessTextureSenderThread"; m_thread.IsBackground = true; m_thread.Start(); diff --git a/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureNotFoundSender.cs b/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureNotFoundSender.cs index 7d4c919c75..70e44d4f66 100644 --- a/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureNotFoundSender.cs +++ b/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureNotFoundSender.cs @@ -40,13 +40,13 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload //private static readonly log4net.ILog m_log // = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); - private readonly LLUUID m_textureId; - private bool m_cancel; + private bool m_cancel = false; private IClientAPI m_client; // See ITextureSender - private bool m_sending; + private bool m_sending = false; + private LLUUID m_textureId; // See ITextureSender diff --git a/OpenSim/Region/Environment/Modules/Agent/TextureSender/TextureSender.cs b/OpenSim/Region/Environment/Modules/Agent/TextureSender/TextureSender.cs index 44b9a2372b..02c541b2b0 100644 --- a/OpenSim/Region/Environment/Modules/Agent/TextureSender/TextureSender.cs +++ b/OpenSim/Region/Environment/Modules/Agent/TextureSender/TextureSender.cs @@ -43,14 +43,12 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureSender private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private readonly IClientAPI RequestUser; - /// /// Records the number of times texture send has been called. /// - public int counter; + public int counter = 0; - public bool ImageLoaded; + public bool ImageLoaded = false; /// /// 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; } } - private bool m_cancel; + private bool m_cancel = false; // See ITextureSender - private bool m_sending; + private bool m_sending = false; /// /// This is actually the number of extra packets required to send the texture data! We always assume /// at least one is required. /// - private int NumPackets; + private int NumPackets = 0; /// /// Holds the packet number to send next. In this case, each packet is 1000 bytes long and starts /// at the 600th byte (0th indexed). /// - private int PacketCounter; + private int PacketCounter = 0; private int RequestedDiscardLevel = -1; - private uint StartPacketNumber; + private IClientAPI RequestUser; + private uint StartPacketNumber = 0; public TextureSender(IClientAPI client, int discardLevel, uint packetNumber) { @@ -191,7 +190,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureSender catch (ArgumentOutOfRangeException) { 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; } RequestUser.OutPacket(im, ThrottleOutPacketType.Texture); diff --git a/OpenSim/Region/Environment/Modules/Agent/Xfer/XferModule.cs b/OpenSim/Region/Environment/Modules/Agent/Xfer/XferModule.cs index eaf2198597..8e90d1798f 100644 --- a/OpenSim/Region/Environment/Modules/Agent/Xfer/XferModule.cs +++ b/OpenSim/Region/Environment/Modules/Agent/Xfer/XferModule.cs @@ -41,6 +41,10 @@ namespace OpenSim.Region.Environment.Modules.Agent.Xfer public Dictionary NewFiles = new Dictionary(); public Dictionary Transfers = new Dictionary(); + public XferModule() + { + } + #region IRegionModule Members public void Initialise(Scene scene, IConfigSource config) @@ -145,11 +149,11 @@ namespace OpenSim.Region.Environment.Modules.Agent.Xfer public IClientAPI Client; private bool complete; public byte[] Data = new byte[0]; - public int DataPointer; + public int DataPointer = 0; public string FileName = String.Empty; - public uint Packet; + public uint Packet = 0; public uint Serial = 1; - public ulong XferID; + public ulong XferID = 0; 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]; Array.Copy(Data, DataPointer, transferData, 0, Data.Length - DataPointer); - uint endPacket = Packet |= 0x80000000; + uint endPacket = Packet |= (uint) 0x80000000; Client.SendXferPacket(XferID, endPacket, transferData); Packet++; DataPointer += (Data.Length - DataPointer); diff --git a/OpenSim/Region/Environment/Modules/Avatar/Chat/ChatModule.cs b/OpenSim/Region/Environment/Modules/Avatar/Chat/ChatModule.cs index 8d42681431..15720fc469 100644 --- a/OpenSim/Region/Environment/Modules/Avatar/Chat/ChatModule.cs +++ b/OpenSim/Region/Environment/Modules/Avatar/Chat/ChatModule.cs @@ -44,15 +44,15 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat public class ChatModule : IRegionModule, ISimChat { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private readonly List m_scenes = new List(); - private string m_defaultzone; + private string m_defaultzone = null; - private IRCChatModule m_irc; - private Thread m_irc_connector; + private IRCChatModule m_irc = null; + private Thread m_irc_connector = null; - private string m_last_leaving_user; - private string m_last_new_user; + private string m_last_leaving_user = null; + private string m_last_new_user = null; private int m_saydistance = 30; + private List m_scenes = new List(); private int m_shoutdistance = 100; internal object m_syncInit = new object(); internal object m_syncLogout = new object(); @@ -257,7 +257,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat } 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) { - 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 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 bool m_connected; - private List m_last_scenes; - private string m_nick; + + private string m_basenick = null; + private string m_channel = null; + private bool m_connected = false; + private bool m_enabled = false; + private List 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 List m_scenes; - private string m_server; + private List m_scenes = null; + private string m_server = null; private NetworkStream m_stream; internal object m_syncConnect = new object(); private TcpClient m_tcp; + private string m_user = "USER OpenSimBot 8 * :I'm a OpenSim to irc bot"; private StreamWriter m_writer; private Thread pingSender; @@ -478,13 +478,13 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat m_reader = new StreamReader(m_stream); m_writer = new StreamWriter(m_stream); - pingSender = new Thread(PingRun); + pingSender = new Thread(new ThreadStart(PingRun)); pingSender.Name = "PingSenderThread"; pingSender.IsBackground = true; pingSender.Start(); ThreadTracker.Add(pingSender); - listener = new Thread(ListenerRun); + listener = new Thread(new ThreadStart(ListenerRun)); listener.Name = "IRCChatModuleListenerThread"; listener.IsBackground = true; listener.Start(); @@ -545,7 +545,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat } 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 { - if (m_connected) + if (m_connected == true) { m_writer.WriteLine("PING :" + m_server); m_writer.Flush(); @@ -602,7 +602,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat } 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 { - while (m_connected && ((inputLine = m_reader.ReadLine()) != null)) + while ((m_connected == true) && ((inputLine = m_reader.ReadLine()) != null)) { // Console.WriteLine(inputLine); if (inputLine.Contains(m_channel)) @@ -659,7 +659,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Chat } 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 { - m_log.Error("[IRC]: BroadcastSim Exception Trap:" + ex + "\n" + ex.StackTrace); + m_log.Error("[IRC]: BroadcastSim Exception Trap:" + ex.ToString() + "\n" + ex.StackTrace); } } diff --git a/OpenSim/Region/Environment/Modules/Avatar/Currency/SampleMoney/SampleMoneyModule.cs b/OpenSim/Region/Environment/Modules/Avatar/Currency/SampleMoney/SampleMoneyModule.cs index cc6fd771eb..966c5e2093 100644 --- a/OpenSim/Region/Environment/Modules/Avatar/Currency/SampleMoney/SampleMoneyModule.cs +++ b/OpenSim/Region/Environment/Modules/Avatar/Currency/SampleMoney/SampleMoneyModule.cs @@ -65,55 +65,55 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney public class SampleMoneyModule : IMoneyModule { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private readonly Dictionary m_KnownClientFunds = new Dictionary(); - - /// - /// Region UUIDS indexed by AgentID - /// - private readonly Dictionary m_rootAgents = new Dictionary(); - - /// - /// Scenes by Region Handle - /// - private readonly Dictionary m_scenel = new Dictionary(); /// /// Where Stipends come from and Fees go to. /// private LLUUID EconomyBaseAccount = LLUUID.Zero; - private float EnergyEfficiency; - private bool gridmode; + private float EnergyEfficiency = 0f; + private bool gridmode = false; private ObjectPaid handerOnObjectPaid; private bool m_enabled = true; private IConfigSource m_gConfig; private bool m_keepMoneyAcrossLogins = true; + private Dictionary m_KnownClientFunds = new Dictionary(); private string m_LandAddress = String.Empty; private int m_minFundsBeforeRefresh = 100; private string m_MoneyAddress = String.Empty; + /// + /// Region UUIDS indexed by AgentID + /// + private Dictionary m_rootAgents = new Dictionary(); + + /// + /// Scenes by Region Handle + /// + private Dictionary m_scenel = new Dictionary(); + private int m_stipend = 1000; private int ObjectCapacity = 45000; - private int ObjectCount; - private int PriceEnergyUnit; - private int PriceGroupCreate; - private int PriceObjectClaim; - private float PriceObjectRent; - private float PriceObjectScaleFactor; - private int PriceParcelClaim; - private float PriceParcelClaimFactor; - private int PriceParcelRent; - private int PricePublicObjectDecay; - private int PricePublicObjectDelete; - private int PriceRentLight; - private int PriceUpload; - private int TeleportMinPrice; + private int ObjectCount = 0; + private int PriceEnergyUnit = 0; + private int PriceGroupCreate = 0; + private int PriceObjectClaim = 0; + private float PriceObjectRent = 0f; + private float PriceObjectScaleFactor = 0f; + private int PriceParcelClaim = 0; + private float PriceParcelClaimFactor = 0f; + private int PriceParcelRent = 0; + private int PricePublicObjectDecay = 0; + private int PricePublicObjectDelete = 0; + private int PriceRentLight = 0; + private int PriceUpload = 0; + private int TeleportMinPrice = 0; - private float TeleportPriceExponent; + private float TeleportPriceExponent = 0f; private int UserLevelPaysFees = 2; private Scene XMLRPCHandler; @@ -305,7 +305,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney Hashtable hbinfo = GetBalanceForUserFromMoneyServer(client.AgentId, client.SecureSessionId, s.RegionInfo.originRegionID.ToString(), s.RegionInfo.regionSecret); - if ((bool) hbinfo["success"]) + if ((bool) hbinfo["success"] == true) { Helpers.TryParse((string) hbinfo["agentId"], out agentID); try @@ -333,7 +333,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney else { 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"]); } SendMoneyBalance(client, agentID, client.SessionId, LLUUID.Zero); @@ -660,7 +660,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney Hashtable hresult = genericCurrencyXMLRPCRequest(ht, "regionMoveMoney"); - if ((bool) hresult["success"]) + if ((bool) hresult["success"] == true) { int funds1 = 0; int funds2 = 0; @@ -718,7 +718,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney Hashtable hbinfo = GetBalanceForUserFromMoneyServer(aClient.AgentId, aClient.SecureSessionId, s.RegionInfo.originRegionID.ToString(), s.RegionInfo.regionSecret); - if ((bool) hbinfo["success"]) + if ((bool) hbinfo["success"] == true) { try { @@ -743,7 +743,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney else { 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"]); } } @@ -812,7 +812,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney string secret = (string) requestData["secret"]; Scene userScene = GetRandomScene(); - if (userScene.RegionInfo.regionSecret == secret) + if (userScene.RegionInfo.regionSecret.ToString() == secret) { IClientAPI client = LocateClientObject(agentId); @@ -1238,7 +1238,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney { lock (e) { - if (e.economyValidated && e.transactionID == 0) + if (e.economyValidated == true && e.transactionID == 0) { e.transactionID = Util.UnixTimeSinceEpoch(); @@ -1328,7 +1328,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney else { 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 = claim_user(avatar.UUID, avatar.ControllingClient.SecureSessionId, regionID, RegionItem.RegionInfo.regionSecret); - if ((bool) hresult["success"]) + if ((bool) hresult["success"] == true) { int funds = 0; try @@ -1432,7 +1432,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney if (RegionItem != null) { 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; try @@ -1460,7 +1460,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney #endregion } - public enum TransactionType + public enum TransactionType : int { SystemGenerated = 0, RegionMoneyRequest = 1, diff --git a/OpenSim/Region/Environment/Modules/Avatar/Friends/FriendsModule.cs b/OpenSim/Region/Environment/Modules/Avatar/Friends/FriendsModule.cs index 1dffc62604..dd6a92e70b 100644 --- a/OpenSim/Region/Environment/Modules/Avatar/Friends/FriendsModule.cs +++ b/OpenSim/Region/Environment/Modules/Avatar/Friends/FriendsModule.cs @@ -42,10 +42,10 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private readonly Dictionary> FriendLists = new Dictionary>(); - private readonly Dictionary m_pendingFriendRequests = new Dictionary(); - private readonly Dictionary m_rootAgents = new Dictionary(); - private readonly List m_scene = new List(); + private Dictionary> FriendLists = new Dictionary>(); + private Dictionary m_pendingFriendRequests = new Dictionary(); + private Dictionary m_rootAgents = new Dictionary(); + private List m_scene = new List(); #region IRegionModule Members @@ -213,7 +213,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends List updateUsers = new List(); foreach (FriendListItem fli in lfli) { - if (fli.onlinestatus) + if (fli.onlinestatus == true) { updateUsers.Add(fli.Friend); } @@ -357,20 +357,20 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends // https://wiki.secondlife.com/wiki/ImprovedInstantMessage // 38 == Offer friendship - if (dialog == 38) + if (dialog == (byte) 38) { LLUUID friendTransactionID = LLUUID.Random(); 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); GridInstantMessage msg = new GridInstantMessage(); msg.fromAgentID = fromAgentID.UUID; msg.fromAgentSession = fromAgentSession.UUID; msg.toAgentID = toAgentID.UUID; 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; if (client != null) { @@ -393,16 +393,16 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends } // 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); } // 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); } } @@ -433,14 +433,14 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends msg.ParentEstateID = 0; msg.timestamp = (uint) Util.UnixTimeSinceEpoch(); msg.RegionID = SceneAgentIn.RegionInfo.RegionID.UUID; - msg.dialog = 39; // Approved friend request + msg.dialog = (byte) 39; // Approved friend request msg.Position = new sLLVector3(); - msg.offline = 0; + msg.offline = (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 SceneAgentIn.TriggerGridInstantMessage(msg, InstantMessageReceiver.IMModule); - SceneAgentIn.StoreAddFriendship(m_pendingFriendRequests[transactionID], agentID, 1); + SceneAgentIn.StoreAddFriendship(m_pendingFriendRequests[transactionID], agentID, (uint) 1); m_pendingFriendRequests.Remove(transactionID); // TODO: Inform agent that the friend is online @@ -471,9 +471,9 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Friends msg.ParentEstateID = 0; msg.timestamp = (uint) Util.UnixTimeSinceEpoch(); msg.RegionID = SceneAgentIn.RegionInfo.RegionID.UUID; - msg.dialog = 40; // Deny friend request + msg.dialog = (byte) 40; // Deny friend request msg.Position = new sLLVector3(); - msg.offline = 0; + msg.offline = (byte) 0; msg.binaryBucket = new byte[0]; SceneAgentIn.TriggerGridInstantMessage(msg, InstantMessageReceiver.IMModule); m_pendingFriendRequests.Remove(transactionID); diff --git a/OpenSim/Region/Environment/Modules/Avatar/Groups/GroupsModule.cs b/OpenSim/Region/Environment/Modules/Avatar/Groups/GroupsModule.cs index 858cf213b8..6edc44de4a 100644 --- a/OpenSim/Region/Environment/Modules/Avatar/Groups/GroupsModule.cs +++ b/OpenSim/Region/Environment/Modules/Avatar/Groups/GroupsModule.cs @@ -41,10 +41,10 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Groups { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private readonly Dictionary m_grouplistmap = new Dictionary(); - private readonly Dictionary m_groupmap = new Dictionary(); - private readonly Dictionary m_iclientmap = new Dictionary(); - private readonly List m_scene = new List(); + private Dictionary m_grouplistmap = new Dictionary(); + private Dictionary m_groupmap = new Dictionary(); + private Dictionary m_iclientmap = new Dictionary(); + private List m_scene = new List(); #region IRegionModule Members @@ -214,7 +214,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Groups } 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); } diff --git a/OpenSim/Region/Environment/Modules/Avatar/Inventory/InventoryModule.cs b/OpenSim/Region/Environment/Modules/Avatar/Inventory/InventoryModule.cs index 9f2d461d48..624f307055 100644 --- a/OpenSim/Region/Environment/Modules/Avatar/Inventory/InventoryModule.cs +++ b/OpenSim/Region/Environment/Modules/Avatar/Inventory/InventoryModule.cs @@ -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 /// IM Session Ids to ItemIds /// - private readonly IDictionary m_pendingOffers = new Dictionary(); + private IDictionary m_pendingOffers = new Dictionary(); private Scene m_scene; diff --git a/OpenSim/Region/Environment/Modules/Avatar/Profiles/AvatarProfilesModule.cs b/OpenSim/Region/Environment/Modules/Avatar/Profiles/AvatarProfilesModule.cs index 87f0177f06..15825b6206 100644 --- a/OpenSim/Region/Environment/Modules/Avatar/Profiles/AvatarProfilesModule.cs +++ b/OpenSim/Region/Environment/Modules/Avatar/Profiles/AvatarProfilesModule.cs @@ -41,6 +41,10 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Profiles private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private Scene m_scene; + public AvatarProfilesModule() + { + } + #region IRegionModule Members public void Initialise(Scene scene, IConfigSource config) @@ -100,7 +104,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Profiles } else { - m_log.Debug("[AvatarProfilesModule]: Got null for profile for " + avatarID); + m_log.Debug("[AvatarProfilesModule]: Got null for profile for " + avatarID.ToString()); } } diff --git a/OpenSim/Region/Environment/Modules/Framework/Commander.cs b/OpenSim/Region/Environment/Modules/Framework/Commander.cs index d226c3da2d..4430c10d40 100644 --- a/OpenSim/Region/Environment/Modules/Framework/Commander.cs +++ b/OpenSim/Region/Environment/Modules/Framework/Commander.cs @@ -42,11 +42,11 @@ namespace OpenSim.Region.Environment.Modules.Framework public class Command : ICommand { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private readonly List m_args = new List(); + private List m_args = new List(); - private readonly Action m_command; - private readonly string m_help; - private readonly string m_name; + private Action m_command; + private string m_help; + private string m_name; public Command(string name, Action command, string help) { @@ -164,9 +164,9 @@ namespace OpenSim.Region.Environment.Modules.Framework /// public class CommandArgument { - private readonly string m_help; - private readonly string m_name; - private readonly string m_type; + private string m_help; + private string m_name; + private string m_type; private Object m_val; public CommandArgument(string name, string help, string type) @@ -204,8 +204,8 @@ namespace OpenSim.Region.Environment.Modules.Framework public class Commander : ICommander { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private readonly Dictionary m_commands = new Dictionary(); - private readonly string m_name; + private Dictionary m_commands = new Dictionary(); + private string m_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 += " )\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; foreach (KeyValuePair arg in com.Arguments) { - classSrc += "\t\targs[" + i + "] = " + Util.Md5Hash(arg.Key) + " " + ";\n"; + classSrc += "\t\targs[" + i.ToString() + "] = " + Util.Md5Hash(arg.Key) + " " + ";\n"; i++; } classSrc += "\t\tGetCommander(\"" + m_name + "\").Run(\"" + com.Name + "\", args);\n"; diff --git a/OpenSim/Region/Environment/Modules/Framework/CommanderTestModule.cs b/OpenSim/Region/Environment/Modules/Framework/CommanderTestModule.cs index 3df9129a06..7b5c98181f 100644 --- a/OpenSim/Region/Environment/Modules/Framework/CommanderTestModule.cs +++ b/OpenSim/Region/Environment/Modules/Framework/CommanderTestModule.cs @@ -34,7 +34,7 @@ namespace OpenSim.Region.Environment.Modules.Framework { public class CommanderTestModule : IRegionModule, ICommandableModule { - private readonly Commander m_commander = new Commander("CommanderTest"); + private Commander m_commander = new Commander("CommanderTest"); private Scene m_scene; #region ICommandableModule Members diff --git a/OpenSim/Region/Environment/Modules/Grid/Interregion/InterregionModule.cs b/OpenSim/Region/Environment/Modules/Grid/Interregion/InterregionModule.cs index ac2ac0bf16..2ca4df9ba8 100644 --- a/OpenSim/Region/Environment/Modules/Grid/Interregion/InterregionModule.cs +++ b/OpenSim/Region/Environment/Modules/Grid/Interregion/InterregionModule.cs @@ -29,14 +29,14 @@ namespace OpenSim.Region.Environment.Modules.Grid.Interregion #endregion private readonly Dictionary m_interfaces = new Dictionary(); - private readonly Object m_lockObject = new object(); private readonly List m_myLocations = new List(); private readonly Dictionary m_neighbourInterfaces = new Dictionary(); private readonly Dictionary m_neighbourRemote = new Dictionary(); private IConfigSource m_config; - private bool m_enabled; + private bool m_enabled = false; + private Object m_lockObject = new object(); private RemotingObject m_myRemote; private TcpChannel m_tcpChannel; private int m_tcpPort = 10101; diff --git a/OpenSim/Region/Environment/Modules/Scripting/DynamicTexture/DynamicTextureModule.cs b/OpenSim/Region/Environment/Modules/Scripting/DynamicTexture/DynamicTextureModule.cs index d926714eef..c0e3d3b97b 100644 --- a/OpenSim/Region/Environment/Modules/Scripting/DynamicTexture/DynamicTextureModule.cs +++ b/OpenSim/Region/Environment/Modules/Scripting/DynamicTexture/DynamicTextureModule.cs @@ -40,12 +40,12 @@ namespace OpenSim.Region.Environment.Modules.Scripting.DynamicTexture { public class DynamicTextureModule : IRegionModule, IDynamicTextureManager { - private readonly Dictionary RegisteredScenes = new Dictionary(); + private Dictionary RegisteredScenes = new Dictionary(); - private readonly Dictionary RenderPlugins = + private Dictionary RenderPlugins = new Dictionary(); - private readonly Dictionary Updaters = new Dictionary(); + private Dictionary Updaters = new Dictionary(); #region IDynamicTextureManager Members @@ -176,14 +176,14 @@ namespace OpenSim.Region.Environment.Modules.Scripting.DynamicTexture public class DynamicTextureUpdater { - public bool BlendWithOldTexture; + public bool BlendWithOldTexture = false; public string BodyData; public string ContentType; public byte FrontAlpha = 255; public LLUUID LastAssetID; public string Params; public LLUUID PrimID; - public bool SetNewFrontAlpha; + public bool SetNewFrontAlpha = false; public LLUUID SimUUID; public LLUUID UpdaterID; public int UpdateTimer; diff --git a/OpenSim/Region/Environment/Modules/Scripting/HttpRequest/ScriptsHttpRequests.cs b/OpenSim/Region/Environment/Modules/Scripting/HttpRequest/ScriptsHttpRequests.cs index 4bde33b048..e1339a36d9 100644 --- a/OpenSim/Region/Environment/Modules/Scripting/HttpRequest/ScriptsHttpRequests.cs +++ b/OpenSim/Region/Environment/Modules/Scripting/HttpRequest/ScriptsHttpRequests.cs @@ -84,7 +84,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.HttpRequest { public class HttpRequestModule : IRegionModule, IHttpRequests { - private readonly object HttpListLock = new object(); + private object HttpListLock = new object(); private int httpTimeout = 30000; private string m_name = "HttpScriptRequests"; @@ -93,6 +93,10 @@ namespace OpenSim.Region.Environment.Modules.Scripting.HttpRequest private Scene m_scene; private Queue rpcQueue = new Queue(); + public HttpRequestModule() + { + } + #region IHttpRequests Members public LLUUID MakeHttpRequest(string url, string parameters, string body) diff --git a/OpenSim/Region/Environment/Modules/Scripting/LoadImageURL/LoadImageURLModule.cs b/OpenSim/Region/Environment/Modules/Scripting/LoadImageURL/LoadImageURLModule.cs index f39f16d6f6..c828ef05f7 100644 --- a/OpenSim/Region/Environment/Modules/Scripting/LoadImageURL/LoadImageURLModule.cs +++ b/OpenSim/Region/Environment/Modules/Scripting/LoadImageURL/LoadImageURLModule.cs @@ -120,9 +120,9 @@ namespace OpenSim.Region.Environment.Modules.Scripting.LoadImageURL private void MakeHttpRequest(string url, LLUUID requestID) { - WebRequest request = WebRequest.Create(url); + WebRequest request = HttpWebRequest.Create(url); 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)); state.TimeOfRequest = (int) t.TotalSeconds; @@ -131,7 +131,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.LoadImageURL private void HttpRequestReturn(IAsyncResult result) { RequestState state = (RequestState) result.AsyncState; - WebRequest request = state.Request; + WebRequest request = (WebRequest) state.Request; HttpWebResponse response = (HttpWebResponse) request.EndGetResponse(result); if (response.StatusCode == HttpStatusCode.OK) { @@ -175,9 +175,9 @@ namespace OpenSim.Region.Environment.Modules.Scripting.LoadImageURL public class RequestState { - public HttpWebRequest Request; + public HttpWebRequest Request = null; public LLUUID RequestID = LLUUID.Zero; - public int TimeOfRequest; + public int TimeOfRequest = 0; public RequestState(HttpWebRequest request, LLUUID requestID) { diff --git a/OpenSim/Region/Environment/Modules/Scripting/VectorRender/VectorRenderModule.cs b/OpenSim/Region/Environment/Modules/Scripting/VectorRender/VectorRenderModule.cs index 8e434c757d..626c60fc78 100644 --- a/OpenSim/Region/Environment/Modules/Scripting/VectorRender/VectorRenderModule.cs +++ b/OpenSim/Region/Environment/Modules/Scripting/VectorRender/VectorRenderModule.cs @@ -48,6 +48,10 @@ namespace OpenSim.Region.Environment.Modules.Scripting.VectorRender private Scene m_scene; private IDynamicTextureManager m_textureManager; + public VectorRenderModule() + { + } + #region IDynamicTextureRender Members public string GetContentType() @@ -134,7 +138,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.VectorRender catch (Exception e) { //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)) @@ -256,7 +260,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.VectorRender endPoint.X = (int) x; endPoint.Y = (int) y; 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.Y += endPoint.Y; } @@ -349,7 +353,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.VectorRender 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 Stream str = null; HttpWebResponse response = (HttpWebResponse) (request).GetResponse(); diff --git a/OpenSim/Region/Environment/Modules/Scripting/WorldComm/WorldCommModule.cs b/OpenSim/Region/Environment/Modules/Scripting/WorldComm/WorldCommModule.cs index c4c1718861..e79b2bdb94 100644 --- a/OpenSim/Region/Environment/Modules/Scripting/WorldComm/WorldCommModule.cs +++ b/OpenSim/Region/Environment/Modules/Scripting/WorldComm/WorldCommModule.cs @@ -75,6 +75,10 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm private Queue m_pendingQ; private Scene m_scene; + public WorldCommModule() + { + } + #region IRegionModule Members public void Initialise(Scene scene, IConfigSource config) @@ -320,8 +324,8 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm public class ListenerManager { //private Dictionary m_listeners; - private readonly Hashtable m_listeners = Hashtable.Synchronized(new Hashtable()); private object ListenersLock = new object(); + private Hashtable m_listeners = Hashtable.Synchronized(new Hashtable()); private int m_MaxListeners = 100; 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 { - 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 int m_channel; // Channel 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 string m_message; // The message 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) { diff --git a/OpenSim/Region/Environment/Modules/Scripting/XMLRPC/XMLRPCModule.cs b/OpenSim/Region/Environment/Modules/Scripting/XMLRPC/XMLRPCModule.cs index 4f6808e1f9..a039d423cb 100644 --- a/OpenSim/Region/Environment/Modules/Scripting/XMLRPC/XMLRPCModule.cs +++ b/OpenSim/Region/Environment/Modules/Scripting/XMLRPC/XMLRPCModule.cs @@ -78,20 +78,20 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC public class XMLRPCModule : IRegionModule, IXMLRPC { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private readonly List m_scenes = new List(); - private readonly object XMLRPCListLock = new object(); private string m_name = "XMLRPCModule"; // private Dictionary m_openChannels; private Dictionary m_pendingSRDResponses; - private int m_remoteDataPort; + private int m_remoteDataPort = 0; private Dictionary m_rpcPending; private Dictionary m_rpcPendingResponses; + private List m_scenes = new List(); private int RemoteReplyScriptTimeout = 9000; private int RemoteReplyScriptWait = 300; + private object XMLRPCListLock = new object(); #region IRegionModule Members @@ -428,15 +428,15 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC public class RPCRequestInfo { - private readonly LLUUID m_ChannelKey; - private readonly string m_IntVal; - private readonly LLUUID m_ItemID; - private readonly uint m_localID; - private readonly LLUUID m_MessageID; - private readonly string m_StrVal; + private LLUUID m_ChannelKey; + private string m_IntVal; + private LLUUID m_ItemID; + private uint m_localID; + private LLUUID m_MessageID; private bool m_processed; private int m_respInt; private string m_respStr; + private string m_StrVal; 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 { - private readonly LLUUID m_ChannelKey; - private readonly LLUUID m_itemID; - private readonly uint m_localID; + private LLUUID m_ChannelKey; + private LLUUID m_itemID; + private uint m_localID; public RPCChannelInfo(uint localID, LLUUID itemID, LLUUID channelID) { diff --git a/OpenSim/Region/Environment/Modules/World/Land/LandChannel.cs b/OpenSim/Region/Environment/Modules/World/Land/LandChannel.cs index 20d02c42b5..9ac3cc3eac 100644 --- a/OpenSim/Region/Environment/Modules/World/Land/LandChannel.cs +++ b/OpenSim/Region/Environment/Modules/World/Land/LandChannel.cs @@ -44,8 +44,8 @@ namespace OpenSim.Region.Environment.Modules.World.Land //Land types set with flags in ParcelOverlay. //Only one of these can be used. 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_WEST = 64; //Equals 01000000 + public const byte LAND_FLAG_PROPERTY_BORDER_SOUTH = (byte) 128; //Equals 10000000 + public const byte LAND_FLAG_PROPERTY_BORDER_WEST = (byte) 64; //Equals 01000000 //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 @@ -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_OTHER = 8; 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_FOR_SALE = 4; //Equals 00000100 - public const byte LAND_TYPE_OWNED_BY_GROUP = 2; //Equals 00000010 - public const byte LAND_TYPE_OWNED_BY_OTHER = 1; //Equals 00000001 - public const byte LAND_TYPE_OWNED_BY_REQUESTER = 3; //Equals 00000011 - public const byte LAND_TYPE_PUBLIC = 0; //Equals 00000000 + public const byte LAND_TYPE_IS_BEING_AUCTIONED = (byte) 5; //Equals 00000101 + public const byte LAND_TYPE_IS_FOR_SALE = (byte) 4; //Equals 00000100 + public const byte LAND_TYPE_OWNED_BY_GROUP = (byte) 2; //Equals 00000010 + public const byte LAND_TYPE_OWNED_BY_OTHER = (byte) 1; //Equals 00000001 + public const byte LAND_TYPE_OWNED_BY_REQUESTER = (byte) 3; //Equals 00000011 + public const byte LAND_TYPE_PUBLIC = (byte) 0; //Equals 00000000 //These are other constants. Yay! public const int START_LAND_LOCAL_ID = 1; #endregion - private readonly int[,] landIDList = new int[64,64]; - private readonly Dictionary landList = new Dictionary(); - private readonly Scene m_scene; + private int[,] landIDList = new int[64,64]; + private Dictionary landList = new Dictionary(); - private bool landPrimCountTainted; + private bool landPrimCountTainted = false; private int lastLandLocalID = START_LAND_LOCAL_ID - 1; private bool m_allowedForcefulBans = true; + private Scene m_scene; public LandChannel(Scene scene) { @@ -192,7 +192,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land { lastLandLocalID++; new_land.landData.localID = lastLandLocalID; - landList.Add(lastLandLocalID, new_land.Copy()); + landList.Add(lastLandLocalID, (LandObject) new_land.Copy()); bool[,] landBitmap = new_land.getLandBitmap(); @@ -532,7 +532,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land { 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; try @@ -611,7 +611,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land packet = (ParcelOverlayPacket) PacketPool.Instance.GetPacket(PacketType.ParcelOverlay); packet.ParcelData.Data = byteArray; packet.ParcelData.SequenceID = sequenceID; - remote_client.OutPacket(packet, ThrottleOutPacketType.Task); + remote_client.OutPacket((Packet) packet, ThrottleOutPacketType.Task); sequenceID++; byteArray = new byte[LAND_BLOCKS_PER_PACKET]; } diff --git a/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs b/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs index e6e1ae44eb..877bed5d71 100644 --- a/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs @@ -45,14 +45,14 @@ namespace OpenSim.Region.Environment.Modules.World.Land m_scene.EventManager.OnParcelPrimCountAdd += landChannel.addPrimToLandPrimCounts; m_scene.EventManager.OnParcelPrimCountUpdate += landChannel.updateLandPrimCounts; - m_scene.EventManager.OnAvatarEnteringNewParcel += landChannel.handleAvatarChangingParcel; - m_scene.EventManager.OnClientMovement += landChannel.handleAnyClientMovement; + m_scene.EventManager.OnAvatarEnteringNewParcel += new EventManager.AvatarEnteringNewParcel(landChannel.handleAvatarChangingParcel); + m_scene.EventManager.OnClientMovement += new EventManager.ClientMovement(landChannel.handleAnyClientMovement); m_scene.EventManager.OnValidateLandBuy += landChannel.handleLandValidationRequest; m_scene.EventManager.OnLandBuy += landChannel.handleLandBuyRequest; lock (m_scene) { - m_scene.LandChannel = landChannel; + m_scene.LandChannel = (ILandChannel) landChannel; } } diff --git a/OpenSim/Region/Environment/Modules/World/Land/LandObject.cs b/OpenSim/Region/Environment/Modules/World/Land/LandObject.cs index 54fe9ae6c5..e297b10f71 100644 --- a/OpenSim/Region/Environment/Modules/World/Land/LandObject.cs +++ b/OpenSim/Region/Environment/Modules/World/Land/LandObject.cs @@ -73,8 +73,6 @@ namespace OpenSim.Region.Environment.Modules.World.Land get { return m_scene.RegionInfo.RegionID; } } - #endregion - #region Constructors 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) { - return landBitmap[x / 4, y / 4]; + return (landBitmap[x / 4, y / 4] == true); } else { @@ -150,7 +148,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land updatePacket.ParcelData.GroupID = landData.groupID; updatePacket.ParcelData.GroupPrims = landData.groupPrims; updatePacket.ParcelData.IsGroupOwned = landData.isGroupOwned; - updatePacket.ParcelData.LandingType = landData.landingType; + updatePacket.ParcelData.LandingType = (byte) landData.landingType; updatePacket.ParcelData.LocalID = landData.localID; if (landData.area > 0) { @@ -214,7 +212,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land landData.selectedPrims; updatePacket.ParcelData.UserLocation = landData.userLocation; 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) @@ -357,7 +355,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land { ParcelAccessListReplyPacket.ListBlock listBlock = new ParcelAccessListReplyPacket.ListBlock(); - listBlock.Flags = 0; + listBlock.Flags = (uint) 0; listBlock.ID = entry.AgentID; listBlock.Time = 0; @@ -369,7 +367,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land { ParcelAccessListReplyPacket.ListBlock listBlock = new ParcelAccessListReplyPacket.ListBlock(); - listBlock.Flags = 0; + listBlock.Flags = (uint) 0; listBlock.ID = LLUUID.Zero; listBlock.Time = 0; @@ -392,7 +390,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land replyPacket.Data.SequenceID = 0; 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) @@ -404,7 +402,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land replyPacket.Data.SequenceID = 0; 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++) { - if (landBitmap[x, y]) + if (landBitmap[x, y] == true) { if (min_x > x) min_x = x; if (min_y > y) min_y = y; @@ -501,7 +499,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land if (ty > 255) ty = 255; 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]); tx = max_x * 4; @@ -511,7 +509,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land if (ty > 255) ty = 255; 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]); landData.area = tempArea; } @@ -659,7 +657,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land if (i % 8 == 0) { tempConvertArr[byteNum] = tempByte; - tempByte = 0; + tempByte = (byte) 0; i = 0; byteNum++; } @@ -679,7 +677,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land tempByte = landData.landBitmapByteArray[i]; 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; x++; if (x > 63) @@ -753,7 +751,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land resultLocalIDs.RemoveAt(0); } 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 } } \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/World/Serialiser/SerialiserModule.cs b/OpenSim/Region/Environment/Modules/World/Serialiser/SerialiserModule.cs index 854d2ee8e5..4406e177a7 100644 --- a/OpenSim/Region/Environment/Modules/World/Serialiser/SerialiserModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Serialiser/SerialiserModule.cs @@ -37,10 +37,10 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser { public class SerialiserModule : IRegionModule, IRegionSerialiser { - private readonly Commander m_commander = new Commander("Export"); - private readonly List m_regions = new List(); - private readonly List m_serialisers = new List(); + private Commander m_commander = new Commander("Export"); + private List m_regions = new List(); private string m_savedir = "exports" + "/"; + private List m_serialisers = new List(); #region IRegionModule Members @@ -105,8 +105,8 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser TextWriter regionInfoWriter = new StreamWriter(saveDir + "README.TXT"); regionInfoWriter.WriteLine("Region Name: " + scene.RegionInfo.RegionName); - regionInfoWriter.WriteLine("Region ID: " + scene.RegionInfo.RegionID); - regionInfoWriter.WriteLine("Backup Time: UTC " + DateTime.UtcNow); + regionInfoWriter.WriteLine("Region ID: " + scene.RegionInfo.RegionID.ToString()); + regionInfoWriter.WriteLine("Backup Time: UTC " + DateTime.UtcNow.ToString()); regionInfoWriter.WriteLine("Serialise Version: 0.1"); regionInfoWriter.Close(); @@ -141,7 +141,7 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser { if (region.RegionInfo.RegionName == (string) args[0]) { - List results = SerialiseRegion(region, m_savedir + region.RegionInfo.RegionID + "/"); + List 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) { - List results = SerialiseRegion(region, m_savedir + region.RegionInfo.RegionID + "/"); + List results = SerialiseRegion(region, m_savedir + region.RegionInfo.RegionID.ToString() + "/"); } } diff --git a/OpenSim/Region/Environment/Modules/World/Sun/SunModule.cs b/OpenSim/Region/Environment/Modules/World/Sun/SunModule.cs index 05fae2287f..47ce258b45 100644 --- a/OpenSim/Region/Environment/Modules/World/Sun/SunModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Sun/SunModule.cs @@ -127,7 +127,7 @@ namespace OpenSim.Region.Environment.Modules.World.Sun { long m_addticks = (DateTime.Now.Ticks - m_start) * m_dilation; 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) diff --git a/OpenSim/Region/Environment/Modules/World/Terrain/Effects/CookieCutter.cs b/OpenSim/Region/Environment/Modules/World/Terrain/Effects/CookieCutter.cs index 331c49d47c..a2e0c40ce2 100644 --- a/OpenSim/Region/Environment/Modules/World/Terrain/Effects/CookieCutter.cs +++ b/OpenSim/Region/Environment/Modules/World/Terrain/Effects/CookieCutter.cs @@ -78,7 +78,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.Effects { for (y = 0; y < map.Height; y++) { - if (cliffMask[x, y]) + if (cliffMask[x, y] == true) eroder.PaintEffect(map, x, y, 4, 0.1); } } diff --git a/OpenSim/Region/Environment/Modules/World/Terrain/FileLoaders/LLRAW.cs b/OpenSim/Region/Environment/Modules/World/Terrain/FileLoaders/LLRAW.cs index 90728da884..5d6723f81f 100644 --- a/OpenSim/Region/Environment/Modules/World/Terrain/FileLoaders/LLRAW.cs +++ b/OpenSim/Region/Environment/Modules/World/Terrain/FileLoaders/LLRAW.cs @@ -47,7 +47,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.FileLoaders { 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. } } @@ -76,7 +76,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.FileLoaders { for (j = 0; j < 256; j++) { - lookupHeightTable[i + (j * 256)] = (i * (j / 127.0)); + lookupHeightTable[i + (j * 256)] = ((double) i * ((double) j / 127.0)); } } diff --git a/OpenSim/Region/Environment/Modules/World/Terrain/FileLoaders/Terragen.cs b/OpenSim/Region/Environment/Modules/World/Terrain/FileLoaders/Terragen.cs index 04c3f1a3e3..7cb4b00434 100644 --- a/OpenSim/Region/Environment/Modules/World/Terrain/FileLoaders/Terragen.cs +++ b/OpenSim/Region/Environment/Modules/World/Terrain/FileLoaders/Terragen.cs @@ -50,14 +50,14 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.FileLoaders BinaryReader bs = new BinaryReader(s); bool eof = false; - if (Encoding.ASCII.GetString(bs.ReadBytes(16)) == "TERRAGENTERRAIN ") + if (ASCIIEncoding.ASCII.GetString(bs.ReadBytes(16)) == "TERRAGENTERRAIN ") { // Terragen file while (eof == false) { int w = 256; int h = 256; - string tmp = Encoding.ASCII.GetString(bs.ReadBytes(4)); + string tmp = ASCIIEncoding.ASCII.GetString(bs.ReadBytes(4)); switch (tmp) { case "SIZE": @@ -84,7 +84,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.FileLoaders { 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; diff --git a/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/FlattenSphere.cs b/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/FlattenSphere.cs index fa52a00e61..dee455ff70 100644 --- a/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/FlattenSphere.cs +++ b/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/FlattenSphere.cs @@ -31,6 +31,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.PaintBrushes { public class FlattenSphere : ITerrainPaintableEffect { + #region ITerrainPaintableEffect Members public void PaintEffect(ITerrainChannel map, double rx, double ry, double strength, double duration) diff --git a/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/NoiseSphere.cs b/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/NoiseSphere.cs index 5037533488..8ae583ea94 100644 --- a/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/NoiseSphere.cs +++ b/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/NoiseSphere.cs @@ -57,7 +57,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.PaintBrushes z *= z; 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) map[x, y] += noise * z * duration; diff --git a/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/RevertSphere.cs b/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/RevertSphere.cs index acce32e9da..b47e041acc 100644 --- a/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/RevertSphere.cs +++ b/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/RevertSphere.cs @@ -32,7 +32,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.PaintBrushes { public class RevertSphere : ITerrainPaintableEffect { - private readonly ITerrainChannel m_revertmap; + private ITerrainChannel m_revertmap; public RevertSphere(ITerrainChannel revertmap) { diff --git a/OpenSim/Region/Environment/Modules/World/Terrain/TerrainException.cs b/OpenSim/Region/Environment/Modules/World/Terrain/TerrainException.cs index 2411de09fb..f5c0fe4a9f 100644 --- a/OpenSim/Region/Environment/Modules/World/Terrain/TerrainException.cs +++ b/OpenSim/Region/Environment/Modules/World/Terrain/TerrainException.cs @@ -31,7 +31,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain { public class TerrainException : Exception { - public TerrainException() + public TerrainException() : base() { } diff --git a/OpenSim/Region/Environment/Modules/World/Terrain/TerrainModule.cs b/OpenSim/Region/Environment/Modules/World/Terrain/TerrainModule.cs index c105620b5a..eff61592bb 100644 --- a/OpenSim/Region/Environment/Modules/World/Terrain/TerrainModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Terrain/TerrainModule.cs @@ -83,7 +83,7 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain private Dictionary m_plugineffects; private ITerrainChannel m_revert; private Scene m_scene; - private bool m_tainted; + private bool m_tainted = false; #region ICommandableModule Members @@ -223,8 +223,6 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain } } - #endregion - #region Plugin Loading Methods private void LoadPlugins() @@ -278,6 +276,8 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain #endregion + #endregion + /// /// Installs into terrain module the standard suite of brushes /// diff --git a/OpenSim/Region/Environment/Modules/World/TreePopulator/TreePopulatorModule.cs b/OpenSim/Region/Environment/Modules/World/TreePopulator/TreePopulatorModule.cs index d964fe45e5..4b22700134 100644 --- a/OpenSim/Region/Environment/Modules/World/TreePopulator/TreePopulatorModule.cs +++ b/OpenSim/Region/Environment/Modules/World/TreePopulator/TreePopulatorModule.cs @@ -66,10 +66,10 @@ namespace OpenSim.Region.Environment.Modules.World.TreePopulator m_trees = new List(); 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); - CalculateTrees.Elapsed += CalculateTrees_Elapsed; + CalculateTrees.Elapsed += new ElapsedEventHandler(CalculateTrees_Elapsed); CalculateTrees.Start(); m_log.Debug("[TREES]: Initialised tree module"); } diff --git a/OpenSim/Region/Environment/PermissionManager.cs b/OpenSim/Region/Environment/PermissionManager.cs index b2829a1e03..fd8387be99 100644 --- a/OpenSim/Region/Environment/PermissionManager.cs +++ b/OpenSim/Region/Environment/PermissionManager.cs @@ -33,21 +33,27 @@ namespace OpenSim.Region.Environment { 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) // disable in any production environment // TODO: Change this to false when permissions are a desired default // TODO: Move to configuration option. 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() { @@ -58,12 +64,6 @@ namespace OpenSim.Region.Environment m_scene = scene; } - public bool BypassPermissions - { - get { return m_bypassPermissions; } - set { m_bypassPermissions = value; } - } - public void Initialise(Scene scene) { m_scene = scene; @@ -129,8 +129,8 @@ namespace OpenSim.Region.Environment ILandObject land = m_scene.LandChannel.getLandObject(position.X, position.Y); if (land == null) return false; - if ((land.landData.landFlags & ((int) Parcel.ParcelFlags.CreateObjects)) == - (int) Parcel.ParcelFlags.CreateObjects) + if ((land.landData.landFlags & ((int)Parcel.ParcelFlags.CreateObjects)) == + (int)Parcel.ParcelFlags.CreateObjects) permission = true; //TODO: check for group rights @@ -168,6 +168,8 @@ namespace OpenSim.Region.Environment /// Has permission? public virtual bool CanObjectEntry(LLUUID user, LLVector3 oldPos, LLVector3 newPos) { + + if ((newPos.X > 257f || newPos.X < -1f || newPos.Y > 257f || newPos.Y < -1f)) { return true; @@ -191,7 +193,7 @@ namespace OpenSim.Region.Environment return true; } - if ((land2.landData.landFlags & ((int) Parcel.ParcelFlags.AllowAllObjectEntry)) != 0) + if ((land2.landData.landFlags & ((int)Parcel.ParcelFlags.AllowAllObjectEntry)) != 0) { return true; } @@ -208,6 +210,355 @@ namespace OpenSim.Region.Environment 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; + } + + /// + /// Permissions check - can user delete an object? + /// + /// User attempting the delete + /// Target object + /// Has permission? + 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) { return IsAdministrator(user); @@ -339,351 +690,5 @@ namespace OpenSim.Region.Environment } #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; - } - - /// - /// Permissions check - can user delete an object? - /// - /// User attempting the delete - /// Target object - /// Has permission? - 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 } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Scenes/AvatarAnimations.cs b/OpenSim/Region/Environment/Scenes/AvatarAnimations.cs index 2fc2a105bd..fe9c8e7cbd 100644 --- a/OpenSim/Region/Environment/Scenes/AvatarAnimations.cs +++ b/OpenSim/Region/Environment/Scenes/AvatarAnimations.cs @@ -46,8 +46,8 @@ namespace OpenSim.Region.Environment.Scenes { if (nod.Attributes["name"] != null) { - string name = nod.Attributes["name"].Value; - LLUUID id = (LLUUID) nod.InnerText; + string name = (string)nod.Attributes["name"].Value; + LLUUID id = (LLUUID)nod.InnerText; AnimsLLUUID.Add(name, id); AnimsNames.Add(id, name); @@ -56,4 +56,4 @@ namespace OpenSim.Region.Environment.Scenes } } } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Scenes/AvatarAppearance.cs b/OpenSim/Region/Environment/Scenes/AvatarAppearance.cs index 860399c6ea..8f295079b1 100644 --- a/OpenSim/Region/Environment/Scenes/AvatarAppearance.cs +++ b/OpenSim/Region/Environment/Scenes/AvatarAppearance.cs @@ -37,13 +37,52 @@ namespace OpenSim.Region.Environment.Scenes [Serializable] public class AvatarAppearance : ISerializable { - protected float m_avatarHeight; 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; + + public byte[] VisualParams + { + get { return m_visualParams; } + set { m_visualParams = value; } + } + 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() { @@ -58,86 +97,6 @@ namespace OpenSim.Region.Environment.Scenes 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 - /// /// /// @@ -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. // (float)m_visualParams[25] = Height // (float)m_visualParams[125] = LegLength - m_avatarHeight = (1.50856f + ((m_visualParams[25] / 255.0f) * (2.525506f - 1.50856f))) - + ((m_visualParams[125] / 255.0f) / 1.5f); + m_avatarHeight = (1.50856f + (((float) m_visualParams[25]/255.0f)*(2.525506f - 1.50856f))) + + (((float) m_visualParams[125]/255.0f)/1.5f); } /// @@ -193,5 +152,45 @@ namespace OpenSim.Region.Environment.Scenes textu.CreateFace(6).TextureID = new LLUUID("00000000-0000-1111-9999-000000000011"); 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); + } } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Scenes/EntityBase.cs b/OpenSim/Region/Environment/Scenes/EntityBase.cs index 7e43718556..11bafb7466 100644 --- a/OpenSim/Region/Environment/Scenes/EntityBase.cs +++ b/OpenSim/Region/Environment/Scenes/EntityBase.cs @@ -36,15 +36,70 @@ namespace OpenSim.Region.Environment.Scenes [Serializable] 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; + + public Scene Scene + { + get { return m_scene; } + } protected LLUUID m_uuid; + + public virtual LLUUID UUID + { + get { return m_uuid; } + set { m_uuid = value; } + } + + protected string m_name; + + /// + /// + /// + public virtual string Name + { + get { return m_name; } + set { m_name = value; } + } + + protected LLVector3 m_pos; + + /// + /// + /// + public virtual LLVector3 AbsolutePosition + { + get { return m_pos; } + set { m_pos = value; } + } + protected LLVector3 m_velocity; + protected LLVector3 m_rotationalvelocity; + + /// + /// + /// + 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; } + } /// /// 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); } + /// + /// + /// + public abstract void UpdateMovement(); + + /// + /// Performs any updates that need to be done at each frame. + /// + public abstract void Update(); + + /// + /// Copies the entity + /// + /// + public virtual EntityBase Copy() + { + return (EntityBase) MemberwiseClone(); + } + + + public abstract void SetText(string text, Vector3 color, double alpha); + protected EntityBase(SerializationInfo info, StreamingContext context) { //System.Console.WriteLine("EntityBase Deserialize BGN"); @@ -69,95 +146,43 @@ namespace OpenSim.Region.Environment.Scenes throw new ArgumentNullException("info"); } - m_uuid = new LLUUID((Guid) info.GetValue("m_uuid", typeof (Guid))); - m_name = (string) info.GetValue("m_name", typeof (string)); + m_uuid = new LLUUID((Guid)info.GetValue("m_uuid", typeof(Guid))); + m_name = (string)info.GetValue("m_name", typeof(string)); m_pos = new LLVector3( - (float) info.GetValue("m_pos.X", typeof (float)), - (float) info.GetValue("m_pos.Y", typeof (float)), - (float) info.GetValue("m_pos.Z", typeof (float))); + (float)info.GetValue("m_pos.X", typeof(float)), + (float)info.GetValue("m_pos.Y", typeof(float)), + (float)info.GetValue("m_pos.Z", typeof(float))); m_velocity = new LLVector3( - (float) info.GetValue("m_velocity.X", typeof (float)), - (float) info.GetValue("m_velocity.Y", typeof (float)), - (float) info.GetValue("m_velocity.Z", typeof (float))); + (float)info.GetValue("m_velocity.X", typeof(float)), + (float)info.GetValue("m_velocity.Y", typeof(float)), + (float)info.GetValue("m_velocity.Z", typeof(float))); m_rotationalvelocity = new LLVector3( - (float) info.GetValue("m_rotationalvelocity.X", typeof (float)), - (float) info.GetValue("m_rotationalvelocity.Y", typeof (float)), - (float) info.GetValue("m_rotationalvelocity.Z", typeof (float))); + (float)info.GetValue("m_rotationalvelocity.X", typeof(float)), + (float)info.GetValue("m_rotationalvelocity.Y", typeof(float)), + (float)info.GetValue("m_rotationalvelocity.Z", typeof(float))); m_rotation = new Quaternion( - (float) info.GetValue("m_rotation.w", typeof (float)), - (float) info.GetValue("m_rotation.x", typeof (float)), - (float) info.GetValue("m_rotation.y", typeof (float)), - (float) info.GetValue("m_rotation.z", typeof (float))); + (float)info.GetValue("m_rotation.w", typeof(float)), + (float)info.GetValue("m_rotation.x", typeof(float)), + (float)info.GetValue("m_rotation.y", 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"); } - public Scene Scene - { - get { return m_scene; } - } - - public virtual LLUUID UUID - { - get { return m_uuid; } - set { m_uuid = value; } - } - - /// - /// - /// - public virtual string Name - { - get { return m_name; } - set { m_name = value; } - } - - /// - /// - /// - public virtual LLVector3 AbsolutePosition - { - get { return m_pos; } - set { m_pos = value; } - } - - /// - /// - /// - 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, Flags = SecurityPermissionFlag.SerializationFormatter)] public virtual void GetObjectData( - SerializationInfo info, StreamingContext context) + SerializationInfo info, StreamingContext context) { if (info == null) { @@ -190,42 +215,18 @@ namespace OpenSim.Region.Environment.Scenes info.AddValue("m_localId", m_localId); } - - #endregion - - /// - /// - /// - public abstract void UpdateMovement(); - - /// - /// Performs any updates that need to be done at each frame. - /// - public abstract void Update(); - - /// - /// Copies the entity - /// - /// - public virtual EntityBase Copy() - { - return (EntityBase) MemberwiseClone(); - } - - - public abstract void SetText(string text, Vector3 color, double alpha); } //Nested Classes 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 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 float distance = 0; public EntityIntersection() { @@ -238,4 +239,4 @@ namespace OpenSim.Region.Environment.Scenes HitTF = _HitTF; } } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Scenes/IScenePresenceBody.cs b/OpenSim/Region/Environment/Scenes/IScenePresenceBody.cs index 508eb67033..3a20190e68 100644 --- a/OpenSim/Region/Environment/Scenes/IScenePresenceBody.cs +++ b/OpenSim/Region/Environment/Scenes/IScenePresenceBody.cs @@ -34,4 +34,4 @@ namespace OpenSim.Region.Environment.Scenes { void processMovement(IClientAPI remoteClient, uint flags, LLQuaternion bodyRotation); } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Scenes/InnerScene.cs b/OpenSim/Region/Environment/Scenes/InnerScene.cs index 3889741051..da286ad102 100644 --- a/OpenSim/Region/Environment/Scenes/InnerScene.cs +++ b/OpenSim/Region/Environment/Scenes/InnerScene.cs @@ -46,33 +46,36 @@ namespace OpenSim.Region.Environment.Scenes #region Events - private PhysicsCrash handlerPhysicsCrash; public event PhysicsCrash UnRecoverableError; + private PhysicsCrash handlerPhysicsCrash = null; #endregion #region Fields + public Dictionary ScenePresences; // SceneObjects is not currently populated or used. //public Dictionary SceneObjects; - public PhysicsScene _PhyScene; public Dictionary Entities; - protected int m_activeScripts; - protected int m_numChildAgents; - protected int m_numPrim; - protected int m_numRootAgents; - protected Scene m_parentScene; - protected int m_physicalPrim; - protected RegionInfo m_regInfo; + public Dictionary RestorePresences; - protected int m_scriptLPS; + public BasicQuadTreeNode QuadTree; + + protected RegionInfo m_regInfo; + protected Scene m_parentScene; + protected PermissionManager PermissionsMngr; + protected List m_updateList = new List(); + 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(); - protected List m_updateList = new List(); - protected PermissionManager PermissionsMngr; - public BasicQuadTreeNode QuadTree; - public Dictionary RestorePresences; - public Dictionary ScenePresences; + + public PhysicsScene _PhyScene; #endregion @@ -81,7 +84,7 @@ namespace OpenSim.Region.Environment.Scenes m_parentScene = parent; m_regInfo = regInfo; 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(); } @@ -159,7 +162,7 @@ namespace OpenSim.Region.Environment.Scenes { 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) { part.LocalId = m_parentScene.PrimIDAllocate(); + } sceneObject.UpdateParentIDs(); AddEntity(sceneObject); @@ -229,7 +233,7 @@ namespace OpenSim.Region.Environment.Scenes for (int i = 0; i < m_updateList.Count; i++) { EntityBase entity = m_updateList[i]; - + // Don't abort the whole update if one entity happens to give us an exception. try { @@ -245,7 +249,7 @@ namespace OpenSim.Region.Environment.Scenes } 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(); @@ -280,16 +284,15 @@ namespace OpenSim.Region.Environment.Scenes { 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--; return; } } } } - public void DetachObject(uint objectLocalID, IClientAPI remoteClient) { List EntityList = GetEntities(); @@ -298,25 +301,29 @@ namespace OpenSim.Region.Environment.Scenes { if (obj is SceneObjectGroup) { - if ((obj).LocalId == objectLocalID) + if (((SceneObjectGroup)obj).LocalId == objectLocalID) { - SceneObjectGroup group = (SceneObjectGroup) obj; + SceneObjectGroup group = (SceneObjectGroup)obj; //group.DetachToGround(); - DetachSingleAttachmentToInv(group.GetFromAssetID(), remoteClient); + DetachSingleAttachmentToInv(group.GetFromAssetID(),remoteClient); } } } + } public void HandleUndo(IClientAPI remoteClient, LLUUID primId) { if (primId != LLUUID.Zero) { - SceneObjectPart part = m_parentScene.GetSceneObjectPart(primId); + SceneObjectPart part = m_parentScene.GetSceneObjectPart(primId); if (part != null) part.Undo(); + } + + } /// @@ -331,29 +338,27 @@ namespace OpenSim.Region.Environment.Scenes // Calls attach with a Zero position 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, - (uint) - (PermissionMask.Copy | PermissionMask.Move | PermissionMask.Modify | PermissionMask.Transfer), - (uint) - (PermissionMask.Copy | PermissionMask.Move | PermissionMask.Modify | PermissionMask.Transfer), - (uint) - (PermissionMask.Copy | PermissionMask.Move | PermissionMask.Modify | PermissionMask.Transfer), - ItemFlags, false, false, remoteClient.AgentId, true); + SceneObjectGroup objatt = m_parentScene.RezObject(remoteClient, itemID, LLVector3.Zero, LLVector3.Zero, LLUUID.Zero, (byte)1, true, + (uint)(PermissionMask.Copy | PermissionMask.Move | PermissionMask.Modify | PermissionMask.Transfer), + (uint)(PermissionMask.Copy | PermissionMask.Move | PermissionMask.Modify | PermissionMask.Transfer), + (uint)(PermissionMask.Copy | PermissionMask.Move | PermissionMask.Modify | PermissionMask.Transfer), + ItemFlags, false, false, remoteClient.AgentId, true); 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(); } + } // 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?? public void DetachSingleAttachmentToInv(LLUUID itemID, IClientAPI remoteClient) { + if (itemID == LLUUID.Zero) // If this happened, someone made a mistake.... return; @@ -363,16 +368,17 @@ namespace OpenSim.Region.Environment.Scenes { if (obj is SceneObjectGroup) { - if (((SceneObjectGroup) obj).GetFromAssetID() == itemID) + if (((SceneObjectGroup)obj).GetFromAssetID() == itemID) { - SceneObjectGroup group = (SceneObjectGroup) obj; + SceneObjectGroup group = (SceneObjectGroup)obj; group.DetachToInventoryPrep(); - m_log.Debug("[DETACH]: Saving attachpoint: " + ((uint) group.GetAttachmentPoint())); - m_parentScene.updateKnownAsset(remoteClient, group, group.GetFromAssetID(), group.OwnerID); + m_log.Debug("[DETACH]: Saving attachpoint: " + ((uint)group.GetAttachmentPoint()).ToString()); + m_parentScene.updateKnownAsset(remoteClient, group, group.GetFromAssetID(),group.OwnerID); m_parentScene.DeleteSceneObjectGroup(group); } } } + } 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).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 // set it's offset position = 0 so that it appears on the attachment point // and not in a weird location somewhere unknown. - if (AttachmentPt != 0 && AttachmentPt != group.GetAttachmentPoint()) + if (AttachmentPt != 0 && AttachmentPt != (uint)group.GetAttachmentPoint()) { + attachPos = LLVector3.Zero; } // AttachmentPt 0 means the client chose to 'wear' the attachment. if (AttachmentPt == 0) { + // Check object for stored attachment point - AttachmentPt = group.GetAttachmentPoint(); + AttachmentPt = (uint)group.GetAttachmentPoint(); + + } // if we still didn't find a suitable attachment point....... if (AttachmentPt == 0) { // Stick it on left hand with Zero Offset from the attachment point. - AttachmentPt = (uint) AttachmentPoint.LeftHand; + AttachmentPt = (uint)AttachmentPoint.LeftHand; attachPos = LLVector3.Zero; } - m_log.Debug("[ATTACH]: Using attachpoint: " + AttachmentPt); - + m_log.Debug("[ATTACH]: Using attachpoint: " + AttachmentPt.ToString()); + + // Saves and gets assetID if (group.GetFromAssetID() == LLUUID.Zero) @@ -420,14 +431,16 @@ namespace OpenSim.Region.Environment.Scenes group.SetFromAssetID(newAssetID); } group.AttachToAgent(remoteClient.AgentId, AttachmentPt, attachPos); + } + } } - } + } // Use the above method. - public void AttachObject(IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, LLQuaternion rot, - bool deadMethod) + public void AttachObject(IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, LLQuaternion rot, + bool deadMethod) { Console.WriteLine("Attaching object " + objectLocalID + " to " + AttachmentPt); SceneObjectPart p = GetSceneObjectPart(objectLocalID); @@ -476,14 +489,14 @@ namespace OpenSim.Region.Environment.Scenes objupdate.ObjectData[0].ParentID = 0; objupdate.ObjectData[0].OwnerID = LLUUID.Zero; 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].ID = av.LocalId; objupdate.ObjectData[0].FullID = remoteClient.AgentId; objupdate.ObjectData[0].ParentID = 0; 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; // new LLVector3((float) Pos.X, (float) Pos.Y, (float) Pos.Z); byte[] pb = pos2.GetBytes(); @@ -516,7 +529,7 @@ namespace OpenSim.Region.Environment.Scenes objupdate.ObjectData[1].TextureEntry = primData.TextureEntry; 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].PathEnd = primData.PathEnd; objupdate.ObjectData[1].PathScaleX = primData.PathScaleX; @@ -553,8 +566,8 @@ namespace OpenSim.Region.Environment.Scenes //objupdate.ObjectData[1].ClickAction = clickAction; objupdate.ObjectData[1].Radius = 20; objupdate.ObjectData[1].NameValue = - Helpers.StringToField("AttachItemID STRING RW SV " + p.UUID); - LLVector3 pos = new LLVector3((float) 0.0, (float) 0.0, (float) 0.0); + Helpers.StringToField("AttachItemID STRING RW SV " + p.UUID); + LLVector3 pos = new LLVector3((float)0.0, (float)0.0, (float)0.0); pb = pos.GetBytes(); Array.Copy(pb, 0, objupdate.ObjectData[1].ObjectData, 0, pb.Length); @@ -725,7 +738,6 @@ namespace OpenSim.Region.Environment.Scenes m_scriptLPS = 0; return returnval; } - #endregion #region Get Methods @@ -753,7 +765,7 @@ namespace OpenSim.Region.Environment.Scenes return result; } - + /// /// 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) { ScenePresence presence = GetScenePresence(agentId); - + if (presence != null) { return presence.ControllingClient; } - + return null; } @@ -807,7 +819,7 @@ namespace OpenSim.Region.Environment.Scenes { return ScenePresences[agentID]; } - + return null; } @@ -819,8 +831,8 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - if (((SceneObjectGroup) ent).HasChildPrim(localID)) - return (SceneObjectGroup) ent; + if (((SceneObjectGroup)ent).HasChildPrim(localID)) + return (SceneObjectGroup)ent; } } return null; @@ -834,8 +846,8 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - if (((SceneObjectGroup) ent).HasChildPrim(fullID)) - return (SceneObjectGroup) ent; + if (((SceneObjectGroup)ent).HasChildPrim(fullID)) + return (SceneObjectGroup)ent; } } return null; @@ -850,7 +862,7 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - SceneObjectGroup reportingG = (SceneObjectGroup) ent; + SceneObjectGroup reportingG = (SceneObjectGroup)ent; EntityIntersection result = reportingG.TestIntersection(hray, frontFacesOnly, faceCenters); if (result.HitTF) { @@ -890,13 +902,13 @@ namespace OpenSim.Region.Environment.Scenes { if (!presence.IsChildAgent) { - avatar = presence; + avatar = presence; return true; } else { 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); } } @@ -975,8 +987,8 @@ namespace OpenSim.Region.Environment.Scenes if (presence.IsChildAgent && m_parentScene.m_seeIntoRegionFromNeighbor) { - LLVector3 oLoc = (ent).AbsolutePosition; - float distResult = (float) Util.GetDistanceTo(presence.AbsolutePosition, oLoc); + LLVector3 oLoc = ((SceneObjectGroup)ent).AbsolutePosition; + float distResult = (float)Util.GetDistanceTo(presence.AbsolutePosition, oLoc); //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. // KnownPrim also makes the prim known when called. - if (!presence.KnownPrim((ent).UUID)) - ((SceneObjectGroup) ent).ScheduleFullUpdateToAvatar(presence); + if (!presence.KnownPrim(((SceneObjectGroup)ent).UUID)) + ((SceneObjectGroup)ent).ScheduleFullUpdateToAvatar(presence); } } 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) { SceneObjectGroup group = GetGroupByPrim(localID); @@ -1140,12 +1151,13 @@ namespace OpenSim.Region.Environment.Scenes SceneObjectGroup group = GetGroupByPrim(localID); if (group != null) { + LLVector3 oldPos = group.AbsolutePosition; if (group.RootPart.m_IsAttachment) { group.UpdateGroupPosition(pos); } - else + else { 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)) { - 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); if (group != null) { - if (PermissionsMngr.CanEditObjectPosition(remoteClient.AgentId, group.UUID)) // && PermissionsMngr.) + if (PermissionsMngr.CanEditObjectPosition(remoteClient.AgentId, group.UUID))// && PermissionsMngr.) { group.GrabMovement(offset, pos, remoteClient); } @@ -1292,9 +1304,9 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - if ((ent).LocalId == parentPrim) + if (((SceneObjectGroup)ent).LocalId == parentPrim) { - parenPrim = (SceneObjectGroup) ent; + parenPrim = (SceneObjectGroup)ent; break; } } @@ -1309,9 +1321,9 @@ namespace OpenSim.Region.Environment.Scenes { 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); } - + // 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) parenPrim.GetProperties(client); @@ -1348,16 +1360,19 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - SceneObjectGroup obj = (SceneObjectGroup) ent; + SceneObjectGroup obj = (SceneObjectGroup)ent; sceneObjects.Add(obj.LocalId, obj); + } } // Find the root prim among the prim ids we've been given for (int i = 0; i < primIds.Count; i++) { + if (sceneObjects.ContainsKey(primIds[i])) { + parenPrim = sceneObjects[primIds[i]]; primIds.RemoveAt(i); break; @@ -1387,13 +1402,14 @@ namespace OpenSim.Region.Environment.Scenes grp.DelinkFromGroup(primIds[i]); delinkedSomething = true; } + } } if (!delinkedSomething) { m_log.InfoFormat("[SCENE]: " + - "DelinkObjects(): Could not find a root prim out of {0} as given to a delink request!", - primIds); + "DelinkObjects(): Could not find a root prim out of {0} as given to a delink request!", + primIds); } } } @@ -1409,7 +1425,7 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - foreach (KeyValuePair subent in ((SceneObjectGroup) ent).Children) + foreach (KeyValuePair subent in ((SceneObjectGroup)ent).Children) { 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 //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) { m_log.DebugFormat("[SCENE]: Duplication of object {0} at offset {1} requested by agent {2}", originalPrim, offset, AgentID); - + List EntityList = GetEntities(); SceneObjectGroup originPrim = null; @@ -1459,9 +1475,9 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - if ((ent).LocalId == originalPrim) + if (((SceneObjectGroup)ent).LocalId == originalPrim) { - originPrim = (SceneObjectGroup) ent; + originPrim = (SceneObjectGroup)ent; break; } } @@ -1510,4 +1526,4 @@ namespace OpenSim.Region.Environment.Scenes #endregion } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs index 1e6ebf9e27..6bd5d1aeb3 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs @@ -40,7 +40,7 @@ namespace OpenSim.Region.Environment.Scenes { public partial class Scene { - private static readonly ILog m_log + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); /// @@ -49,11 +49,11 @@ namespace OpenSim.Region.Environment.Scenes public void StartScripts() { m_log.Info("[PRIM INVENTORY]: Starting scripts in scene"); - + foreach (SceneObjectGroup group in Entities.Values) { group.StartScripts(); - } + } } /// @@ -64,9 +64,9 @@ namespace OpenSim.Region.Environment.Scenes /// in which the item is to be placed. public void AddInventoryItem(IClientAPI remoteClient, InventoryItemBase item) { - CachedUserInfo userInfo + CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); - + if (userInfo != null) { userInfo.AddItem(remoteClient.AgentId, item); @@ -88,9 +88,9 @@ namespace OpenSim.Region.Environment.Scenes m_log.ErrorFormat( "[AGENT INVENTORY]: Agent {0} {1} was not found for add of item {2} {3}", remoteClient.Name, remoteClient.AgentId, item.Name, item.ID); - + return; - } + } } /// @@ -190,7 +190,7 @@ namespace OpenSim.Region.Environment.Scenes { // Retrieve group SceneObjectPart part = GetSceneObjectPart(primId); - SceneObjectGroup group = part.ParentGroup; + SceneObjectGroup group = part.ParentGroup; if (null == group) { m_log.ErrorFormat( @@ -200,30 +200,30 @@ namespace OpenSim.Region.Environment.Scenes return; } - + // Retrieve item TaskInventoryItem item = group.GetInventoryItem(part.LocalId, itemId); if (null == item) { return; } - + // Create new asset // XXX Hardcoding the numbers is a temporary measure - need an enumeration for this // There may well be one in libsecondlife AssetBase asset = CreateAsset(item.Name, item.Description, 10, 10, data); AssetCache.AddAsset(asset); - + // Update item with new asset item.AssetID = asset.FullID; group.UpdateInventoryItem(item); group.GetProperties(remoteClient); - + // Trigger rerunning of script (use TriggerRezScript event, see RezScript) if (isScriptRunning) { 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) { InventoryItemBase item = userInfo.RootFolder.HasItem(itemID); - + if (item != null) { if (LLUUID.Zero == transactionID) @@ -298,11 +298,11 @@ namespace OpenSim.Region.Environment.Scenes } else { - IAgentAssetTransactions agentTransactions = RequestModuleInterface(); + IAgentAssetTransactions agentTransactions = this.RequestModuleInterface(); if (agentTransactions != null) { 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."); } } - + /// /// Give an inventory item from one avatar to another /// @@ -328,13 +328,13 @@ namespace OpenSim.Region.Environment.Scenes public void GiveInventoryItem(IClientAPI recipientClient, LLUUID senderId, LLUUID itemId) { // Retrieve the item from the sender - CachedUserInfo senderUserInfo = CommsManager.UserProfileCacheService.GetUserDetails(senderId); - + CachedUserInfo senderUserInfo = CommsManager.UserProfileCacheService.GetUserDetails(senderId); + if (senderUserInfo == null) { 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; } @@ -342,11 +342,11 @@ namespace OpenSim.Region.Environment.Scenes { InventoryItemBase item = senderUserInfo.RootFolder.HasItem(itemId); if (item != null) - { + { // TODO get recipient's root folder - CachedUserInfo recipientUserInfo - = CommsManager.UserProfileCacheService.GetUserDetails(recipientClient.AgentId); - + CachedUserInfo recipientUserInfo + = CommsManager.UserProfileCacheService.GetUserDetails(recipientClient.AgentId); + if (recipientUserInfo != null) { // Insert a copy of the item into the recipient @@ -373,15 +373,15 @@ namespace OpenSim.Region.Environment.Scenes itemCopy.SaleType = item.SaleType; recipientUserInfo.AddItem(recipientClient.AgentId, itemCopy); - + // Let the recipient client know about this new item - recipientClient.SendBulkUpdateInventory(itemCopy); + recipientClient.SendBulkUpdateInventory(itemCopy); } else { m_log.ErrorFormat( - "[AGENT INVENTORY]: Could not find userinfo for recipient user {0}, {1} of item {2}, {3} from {4}", - recipientClient.Name, recipientClient.AgentId, item.Name, + "[AGENT INVENTORY]: Could not find userinfo for recipient user {0}, {1} of item {2}, {3} from {4}", + recipientClient.Name, recipientClient.AgentId, item.Name, item.ID, senderId); } } @@ -389,15 +389,15 @@ namespace OpenSim.Region.Environment.Scenes { m_log.ErrorFormat( "[AGENT INVENTORY]: Failed to find item {0} to give to {1}", itemId, senderId); - + return; } } 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; - } + } } public void CopyInventoryItem(IClientAPI remoteClient, uint callbackID, LLUUID oldAgentID, LLUUID oldItemID, @@ -406,14 +406,14 @@ namespace OpenSim.Region.Environment.Scenes m_log.DebugFormat( "[AGENT INVENTORY]: CopyInventoryItem received by {0} with oldAgentID {1}, oldItemID {2}, new FolderID {3}, newName {4}", remoteClient.AgentId, oldAgentID, oldItemID, newFolderID, newName); - + InventoryItemBase item = CommsManager.UserProfileCacheService.libraryRoot.HasItem(oldItemID); if (item == null) { CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(oldAgentID); 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; } @@ -422,20 +422,20 @@ namespace OpenSim.Region.Environment.Scenes item = userInfo.RootFolder.HasItem(oldItemID); 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; } } else { - m_log.Error("[AGENT INVENTORY]: Failed to find item " + oldItemID); + m_log.Error("[AGENT INVENTORY]: Failed to find item " + oldItemID.ToString()); return; } } - - AssetBase asset + + AssetBase asset = AssetCache.GetAsset( - item.AssetID, (item.AssetType == (int) AssetType.Texture ? true : false)); + item.AssetID, (item.AssetType == (int)AssetType.Texture ? true : false)); if (asset != null) { @@ -447,7 +447,7 @@ namespace OpenSim.Region.Environment.Scenes { m_log.ErrorFormat( "[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); 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; } @@ -493,13 +493,13 @@ namespace OpenSim.Region.Environment.Scenes } else { - m_log.Error("[AGENT INVENTORY]: Failed to find item " + itemID); + m_log.Error("[AGENT INVENTORY]: Failed to find item " + itemID.ToString()); return; } } 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; } } @@ -515,9 +515,9 @@ namespace OpenSim.Region.Environment.Scenes private void CreateNewInventoryItem(IClientAPI remoteClient, LLUUID folderID, uint callbackID, AssetBase asset, uint nextOwnerMask) { - CachedUserInfo userInfo + CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); - + if (userInfo != null) { InventoryItemBase item = new InventoryItemBase(); @@ -539,8 +539,8 @@ namespace OpenSim.Region.Environment.Scenes else { m_log.WarnFormat( - "No user details associated with client {0} uuid {1} in CreateNewInventoryItem!", - remoteClient.Name, remoteClient.AgentId); + "No user details associated with client {0} uuid {1} in CreateNewInventoryItem!", + remoteClient.Name, remoteClient.AgentId); } } @@ -564,25 +564,25 @@ namespace OpenSim.Region.Environment.Scenes byte wearableType, uint nextOwnerMask) { // m_log.DebugFormat("[AGENT INVENTORY]: Received request to create inventory item {0} in folder {1}", name, folderID); - + if (transactionID == LLUUID.Zero) { - CachedUserInfo userInfo + CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); - + if (userInfo != null) { ScenePresence presence; TryGetAvatar(remoteClient.AgentId, out presence); 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; - string strdata = String.Format("Landmark version 2\nregion_id {0}\nlocal_pos {1} {2} {3}\nregion_handle {4}\n", - presence.Scene.RegionInfo.RegionID, - pos.X, pos.Y, pos.Z, - presence.RegionHandle); - data = Encoding.ASCII.GetBytes(strdata); + LLVector3 pos=presence.AbsolutePosition; + string strdata=String.Format("Landmark version 2\nregion_id {0}\nlocal_pos {1} {2} {3}\nregion_handle {4}\n", + presence.Scene.RegionInfo.RegionID, + pos.X, pos.Y, pos.Z, + presence.RegionHandle); + data=Encoding.ASCII.GetBytes(strdata); } AssetBase asset = CreateAsset(name, description, invType, assetType, data); @@ -593,19 +593,21 @@ namespace OpenSim.Region.Environment.Scenes else { m_log.ErrorFormat( - "userInfo for agent uuid {0} unexpectedly null in CreateNewInventoryItem", + "userInfo for agent uuid {0} unexpectedly null in CreateNewInventoryItem", remoteClient.AgentId); } } else { - IAgentAssetTransactions agentTransactions = RequestModuleInterface(); + IAgentAssetTransactions agentTransactions = this.RequestModuleInterface(); if (agentTransactions != null) { agentTransactions.HandleItemCreationFromTransaction( - remoteClient, transactionID, folderID, callbackID, description, - name, invType, assetType, wearableType, nextOwnerMask); + remoteClient, transactionID, folderID, callbackID, description, + name, invType, assetType, wearableType, nextOwnerMask); } + + } } @@ -615,7 +617,7 @@ namespace OpenSim.Region.Environment.Scenes = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); 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; } @@ -639,7 +641,7 @@ namespace OpenSim.Region.Environment.Scenes = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); 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; } @@ -675,7 +677,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// public void RequestTaskInventory(IClientAPI remoteClient, uint primLocalID) - { + { SceneObjectGroup group = GetGroupByPrim(primLocalID); if (group != null) { @@ -723,7 +725,7 @@ namespace OpenSim.Region.Environment.Scenes localID); } } - + /// /// Move the given item in the given prim to a folder in the client's inventory /// @@ -734,43 +736,43 @@ namespace OpenSim.Region.Environment.Scenes public void MoveTaskInventoryItem(IClientAPI remoteClient, LLUUID folderId, uint primLocalId, LLUUID itemId) { SceneObjectGroup group = GetGroupByPrim(primLocalId); - + if (null == group) { m_log.WarnFormat( "[PRIM INVENTORY]: " + "Move of inventory item {0} from prim with local id {1} failed because the prim could not be found", itemId, primLocalId); - + return; - } - + } + TaskInventoryItem taskItem = group.GetInventoryItem(primLocalId, itemId); - + if (null == taskItem) { // Console already notified of error in GetInventoryItem return; } - + // bool permission; // permission = PermissionsMngr.CanCopyObject(remoteClient.AgentId, // ((SceneObjectGroup) selectedEnt).UUID); - + // Pending resolving upstream problems with permissions, we just won't allow anybody who is not the owner // to copy if (remoteClient.AgentId != taskItem.OwnerID) { m_log.InfoFormat( "[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); return; } - + InventoryItemBase agentItem = new InventoryItemBase(); - + agentItem.ID = LLUUID.Random(); agentItem.Creator = taskItem.CreatorID; agentItem.Owner = remoteClient.AgentId; @@ -781,9 +783,8 @@ namespace OpenSim.Region.Environment.Scenes agentItem.InvType = taskItem.InvType; agentItem.Folder = folderId; agentItem.EveryOnePermissions = taskItem.EveryoneMask; - - if (remoteClient.AgentId != taskItem.OwnerID) - { + + if (remoteClient.AgentId != taskItem.OwnerID) { agentItem.BasePermissions = taskItem.NextOwnerMask; agentItem.CurrentPermissions = taskItem.NextOwnerMask; agentItem.NextPermissions = taskItem.NextOwnerMask; @@ -792,9 +793,9 @@ namespace OpenSim.Region.Environment.Scenes { agentItem.BasePermissions = taskItem.BaseMask; agentItem.CurrentPermissions = taskItem.OwnerMask; - agentItem.NextPermissions = taskItem.NextOwnerMask; + agentItem.NextPermissions = taskItem.NextOwnerMask; } - + AddInventoryItem(remoteClient, agentItem); } @@ -833,7 +834,7 @@ namespace OpenSim.Region.Environment.Scenes { group.AddInventoryItem(remoteClient, primLocalID, item, copyID); 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); group.GetProperties(remoteClient); } @@ -864,22 +865,22 @@ namespace OpenSim.Region.Environment.Scenes public void RezScript(IClientAPI remoteClient, LLUUID itemID, uint localID) { LLUUID copyID = LLUUID.Random(); - + if (itemID != LLUUID.Zero) { CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); - + if (userInfo != null && userInfo.RootFolder != null) { InventoryItemBase item = userInfo.RootFolder.HasItem(itemID); - + // Try library // XXX clumsy, possibly should be one call if (null == item) { item = CommsManager.UserProfileCacheService.libraryRoot.HasItem(itemID); } - + if (item != null) { SceneObjectGroup group = GetGroupByPrim(localID); @@ -888,10 +889,10 @@ namespace OpenSim.Region.Environment.Scenes group.AddInventoryItem(remoteClient, localID, item, copyID); group.StartScript(localID, copyID); group.GetProperties(remoteClient); - - // m_log.InfoFormat("[PRIMINVENTORY]: " + - // "Rezzed script {0} into prim local ID {1} for user {2}", - // item.inventoryName, localID, remoteClient.Name); + + // m_log.InfoFormat("[PRIMINVENTORY]: " + + // "Rezzed script {0} into prim local ID {1} for user {2}", + // item.inventoryName, localID, remoteClient.Name); } 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 // TODO Need to get more details from original RezScript packet @@ -926,7 +927,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// public virtual void DeRezObject(Packet packet, IClientAPI remoteClient) - { + { DeRezObjectPacket DeRezPacket = (DeRezObjectPacket) packet; if (DeRezPacket.AgentBlock.DestinationID == LLUUID.Zero) @@ -936,11 +937,11 @@ namespace OpenSim.Region.Environment.Scenes else { foreach (DeRezObjectPacket.ObjectDataBlock Data in DeRezPacket.ObjectData) - { + { // m_log.DebugFormat( // "[AGENT INVENTORY]: Received request to derez {0} into folder {1}", // Data.ObjectLocalID, DeRezPacket.AgentBlock.DestinationID); - + EntityBase selectedEnt = null; //m_log.Info("[CLIENT]: LocalID:" + Data.ObjectLocalID.ToString()); @@ -958,16 +959,14 @@ namespace OpenSim.Region.Environment.Scenes { bool permission; if (DeRezPacket.AgentBlock.Destination == 1) - { - // Take Copy - permission = PermissionsMngr.CanCopyObject(remoteClient.AgentId, - (selectedEnt).UUID); + { // Take Copy + permission = PermissionsMngr.CanCopyObject(remoteClient.AgentId, + ((SceneObjectGroup) selectedEnt).UUID); } else - { - // Take - permission = PermissionsMngr.CanDeRezObject(remoteClient.AgentId, - (selectedEnt).UUID); + { // Take + permission = PermissionsMngr.CanDeRezObject(remoteClient.AgentId, + ((SceneObjectGroup) selectedEnt).UUID); } if (permission) @@ -998,8 +997,7 @@ namespace OpenSim.Region.Environment.Scenes item.InvType = asset.InvType; item.Folder = DeRezPacket.AgentBlock.DestinationID; item.EveryOnePermissions = objectGroup.RootPart.EveryoneMask; - if (remoteClient.AgentId != objectGroup.RootPart.OwnerID) - { + if (remoteClient.AgentId != objectGroup.RootPart.OwnerID) { item.BasePermissions = objectGroup.RootPart.NextOwnerMask; item.CurrentPermissions = 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) { SceneObjectGroup objectGroup = grp; @@ -1047,6 +1044,7 @@ namespace OpenSim.Region.Environment.Scenes // search through folders to find the asset. while (searchfolders.Count > 0) { + InventoryFolderImpl fld = searchfolders.Dequeue(); lock (fld) { @@ -1071,8 +1069,8 @@ namespace OpenSim.Region.Environment.Scenes AssetBase asset = CreateAsset( objectGroup.GetPartName(objectGroup.LocalId), objectGroup.GetPartDescription(objectGroup.LocalId), - (sbyte) InventoryType.Object, - (sbyte) AssetType.Object, + (sbyte)InventoryType.Object, + (sbyte)AssetType.Object, Helpers.StringToField(sceneObjectXml)); AssetCache.AddAsset(asset); @@ -1088,7 +1086,7 @@ namespace OpenSim.Region.Environment.Scenes // 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; if (agentID != objectGroup.RootPart.OwnerID) { @@ -1110,10 +1108,10 @@ namespace OpenSim.Region.Environment.Scenes { remoteClient.SendInventoryItemCreateUpdate(item); } + } } } - public LLUUID attachObjectAssetStore(IClientAPI remoteClient, SceneObjectGroup grp, LLUUID AgentId) { SceneObjectGroup objectGroup = grp; @@ -1128,8 +1126,8 @@ namespace OpenSim.Region.Environment.Scenes AssetBase asset = CreateAsset( objectGroup.GetPartName(objectGroup.LocalId), objectGroup.GetPartDescription(objectGroup.LocalId), - (sbyte) InventoryType.Object, - (sbyte) AssetType.Object, + (sbyte)InventoryType.Object, + (sbyte)AssetType.Object, Helpers.StringToField(sceneObjectXml)); AssetCache.AddAsset(asset); @@ -1142,10 +1140,10 @@ namespace OpenSim.Region.Environment.Scenes item.Name = asset.Name; item.AssetType = asset.Type; item.InvType = asset.InvType; - + // 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; if (remoteClient.AgentId != objectGroup.RootPart.OwnerID) { @@ -1167,6 +1165,7 @@ namespace OpenSim.Region.Environment.Scenes return LLUUID.Zero; } return LLUUID.Zero; + } /// @@ -1188,63 +1187,64 @@ namespace OpenSim.Region.Environment.Scenes /// /// public virtual void RezObject(IClientAPI remoteClient, LLUUID itemID, LLVector3 RayEnd, LLVector3 RayStart, - LLUUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection, - uint EveryoneMask, uint GroupMask, uint NextOwnerMask, uint ItemFlags, - bool RezSelected, bool RemoveItem, LLUUID fromTaskID) + LLUUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection, + uint EveryoneMask, uint GroupMask, uint NextOwnerMask, uint ItemFlags, + bool RezSelected, bool RemoveItem, LLUUID fromTaskID) { SceneObjectGroup sog = RezObject(remoteClient, itemID, RayEnd, RayStart, - RayTargetID, BypassRayCast, RayEndIsIntersection, - EveryoneMask, GroupMask, NextOwnerMask, ItemFlags, - RezSelected, RemoveItem, fromTaskID, false); + RayTargetID, BypassRayCast, RayEndIsIntersection, + EveryoneMask, GroupMask, NextOwnerMask, ItemFlags, + RezSelected, RemoveItem, fromTaskID, false); } - /// - /// Returns SceneObjectGroup or null from asset request. - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// + + /// + /// Returns SceneObjectGroup or null from asset request. + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// public virtual SceneObjectGroup RezObject(IClientAPI remoteClient, LLUUID itemID, LLVector3 RayEnd, LLVector3 RayStart, - LLUUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection, - uint EveryoneMask, uint GroupMask, uint NextOwnerMask, uint ItemFlags, - bool RezSelected, bool RemoveItem, LLUUID fromTaskID, bool attachment) + LLUUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection, + uint EveryoneMask, uint GroupMask, uint NextOwnerMask, uint ItemFlags, + bool RezSelected, bool RemoveItem, LLUUID fromTaskID, bool attachment) { // Work out position details - byte bRayEndIsIntersection = 0; + byte bRayEndIsIntersection = (byte)0; if (RayEndIsIntersection) { - bRayEndIsIntersection = 1; + bRayEndIsIntersection = (byte)1; } else { - bRayEndIsIntersection = 0; + bRayEndIsIntersection = (byte)0; } LLVector3 scale = new LLVector3(0.5f, 0.5f, 0.5f); - + LLVector3 pos = GetNewRezLocation( - RayStart, RayEnd, RayTargetID, new LLQuaternion(0, 0, 0, 1), - BypassRayCast, bRayEndIsIntersection, true, scale, false); - + RayStart, RayEnd, RayTargetID, new LLQuaternion(0, 0, 0, 1), + BypassRayCast, bRayEndIsIntersection,true,scale, false); + if (!PermissionsMngr.CanRezObject(remoteClient.AgentId, pos) && !attachment) { - return null; + return null; } // Rez object @@ -1260,7 +1260,7 @@ namespace OpenSim.Region.Environment.Scenes if (rezAsset != null) { - string xmlData = Helpers.FieldToUTF8String(rezAsset.Data); + string xmlData = Helpers.FieldToUTF8String(rezAsset.Data); SceneObjectGroup group = new SceneObjectGroup(this, m_regionHandle, xmlData); group.ResetIDs(); AddEntity(group); @@ -1270,8 +1270,8 @@ namespace OpenSim.Region.Environment.Scenes if (!attachment) { pos = GetNewRezLocation( - RayStart, RayEnd, RayTargetID, new LLQuaternion(0, 0, 0, 1), - BypassRayCast, bRayEndIsIntersection, true, group.GroupScale(), false); + RayStart, RayEnd, RayTargetID, new LLQuaternion(0, 0, 0, 1), + BypassRayCast, bRayEndIsIntersection, true, group.GroupScale(), false); group.AbsolutePosition = pos; } else @@ -1280,7 +1280,7 @@ namespace OpenSim.Region.Environment.Scenes } SceneObjectPart rootPart = group.GetChildPart(group.UUID); - + // 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 // object itself before we rez. @@ -1301,22 +1301,22 @@ namespace OpenSim.Region.Environment.Scenes part.ChangeInventoryOwner(item.Owner); } } - + rootPart.TrimPermissions(); if (!attachment) { - if (group.RootPart.Shape.PCode == (byte) PCode.Prim) + if (group.RootPart.Shape.PCode == (byte)PCode.Prim) { group.ClearPartAttachmentData(); } group.ApplyPhysics(m_physicalPrim); } - + group.StartScripts(); - + if (!attachment) rootPart.ScheduleFullUpdate(); @@ -1327,5 +1327,7 @@ namespace OpenSim.Region.Environment.Scenes } return null; } + + } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs index b052096aa3..dccc09a79a 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs @@ -78,12 +78,11 @@ namespace OpenSim.Region.Environment.Scenes foreach (EntityBase ent in EntitieList) { 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. - if (m_permissionManager.CanEditObjectPosition(remoteClient.AgentId, (ent).UUID) || - m_permissionManager.CanEditObject(remoteClient.AgentId, (ent).UUID)) + if (m_permissionManager.CanEditObjectPosition(remoteClient.AgentId, ((SceneObjectGroup)ent).UUID) || m_permissionManager.CanEditObject(remoteClient.AgentId, ((SceneObjectGroup)ent).UUID)) { ((SceneObjectGroup) ent).GetProperties(remoteClient); ((SceneObjectGroup) ent).IsSelected = true; @@ -108,10 +107,9 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - if ((ent).LocalId == primLocalID) + if (((SceneObjectGroup) ent).LocalId == primLocalID) { - if (m_permissionManager.CanEditObjectPosition(remoteClient.AgentId, (ent).UUID) || - m_permissionManager.CanEditObject(remoteClient.AgentId, (ent).UUID)) + if (m_permissionManager.CanEditObjectPosition(remoteClient.AgentId, ((SceneObjectGroup)ent).UUID) || m_permissionManager.CanEditObject(remoteClient.AgentId, ((SceneObjectGroup)ent).UUID)) { ((SceneObjectGroup) ent).IsSelected = false; LandChannel.setPrimsTainted(); @@ -131,20 +129,21 @@ namespace OpenSim.Region.Environment.Scenes } 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( - 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 - m_eventManager.TriggerValidateLandBuy(this, args); + m_eventManager.TriggerValidateLandBuy(this, args); // 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) { + List EntitieList = GetEntities(); foreach (EntityBase ent in EntitieList) @@ -179,6 +178,7 @@ namespace OpenSim.Region.Environment.Scenes public virtual void ProcessObjectDeGrab(uint localID, IClientAPI remoteClient) { + List EntitieList = GetEntities(); foreach (EntityBase ent in EntitieList) @@ -190,7 +190,7 @@ namespace OpenSim.Region.Environment.Scenes // Is this prim part of the group if (obj.HasChildPrim(localID)) { - SceneObjectPart part = obj.GetChildPart(localID); + SceneObjectPart part=obj.GetChildPart(localID); if (part != null) { // If the touched prim handles touches, deliver it @@ -233,8 +233,8 @@ namespace OpenSim.Region.Environment.Scenes LLUUID translatedIDtem = item.AvatarID; searchData[i] = new AvatarPickerReplyPacket.DataBlock(); searchData[i].AvatarID = translatedIDtem; - searchData[i].FirstName = Helpers.StringToField(item.firstName); - searchData[i].LastName = Helpers.StringToField(item.lastName); + searchData[i].FirstName = Helpers.StringToField((string) item.firstName); + searchData[i].LastName = Helpers.StringToField((string) item.lastName); i++; } if (AvatarResponses.Count == 0) @@ -245,4 +245,4 @@ namespace OpenSim.Region.Environment.Scenes client.SendAvatarPickerReply(replyPacket); } } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index 6617995e34..311383177c 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs @@ -53,99 +53,107 @@ namespace OpenSim.Region.Environment.Scenes public partial class Scene : SceneBase { - #region Delegates - public delegate void SynchronizeSceneHandler(Scene scene); - - #endregion - - public int splitID; - public SynchronizeSceneHandler SynchronizeScene; + public SynchronizeSceneHandler SynchronizeScene = null; + public int splitID = 0; #region Fields + protected Timer m_heartbeatTimer = new Timer(); + protected Timer m_restartWaitTimer = new Timer(); + + protected SimStatsReporter m_statsReporter; + + protected List m_regionRestartNotifyList = new List(); + protected List m_neighbours = new List(); + + public InnerScene m_innerScene; + + private Random Rand = new Random(); + private uint _primCount = 720000; private readonly Mutex _primAllocateMutex = new Mutex(false); - private readonly Timer m_restartTimer = new Timer(15000); // Wait before firing + private int m_timePhase = 24; + private readonly Mutex updateLock; - private uint _primCount = 720000; - public CommunicationsManager CommsManager; - private int frameMS; + public bool m_physicalPrim; + public bool m_seeIntoRegionFromNeighbor; + public int MaxUndoCount = 5; + private int m_RestartTimerCounter; + private readonly Timer m_restartTimer = new Timer(15000); // Wait before firing + private int m_incrementsof15seconds = 0; + + public string m_simulatorVersion = "OpenSimulator 0.5"; + + protected ModuleLoader m_moduleLoader; + protected StorageManager m_storageManager; protected AgentCircuitManager m_authenticateHandler; + public CommunicationsManager CommsManager; // protected XferManager xferManager; - protected IAvatarFactory m_AvatarFactory; + protected SceneCommunicationService m_sceneGridService; + protected SceneXmlLoader m_sceneXmlLoader; /// /// Each agent has its own capabilities handler. /// protected Dictionary m_capsHandlers = new Dictionary(); + + protected BaseHttpServer m_httpListener; + + protected Dictionary Modules = new Dictionary(); + public Dictionary ModuleInterfaces = new Dictionary(); + protected Dictionary ModuleAPIMethods = new Dictionary(); + public Dictionary m_moduleCommanders = new Dictionary(); + + //API module interfaces + + public IXfer XferManager; + + protected IHttpRequests m_httpRequestModule; + protected ISimChat m_simChatModule; + protected IXMLRPC m_xmlrpcModule; + protected IWorldComm m_worldCommModule; + protected IAvatarFactory m_AvatarFactory; // Central Update Loop protected int m_fps = 10; - protected int m_frame; - protected Timer m_heartbeatTimer = new Timer(); - protected BaseHttpServer m_httpListener; - protected IHttpRequests m_httpRequestModule; - private int m_incrementsof15seconds; - public InnerScene m_innerScene; + protected int m_frame = 0; + protected float m_timespan = 0.089f; protected DateTime m_lastupdate = DateTime.Now; - public Dictionary m_moduleCommanders = new Dictionary(); - protected ModuleLoader m_moduleLoader; - protected List m_neighbours = new List(); - public bool m_physicalPrim; - private bool m_physics_enabled = true; - protected List m_regionRestartNotifyList = new List(); - private int m_RestartTimerCounter; - protected Timer m_restartWaitTimer = new Timer(); - protected SceneCommunicationService m_sceneGridService; - protected SceneXmlLoader m_sceneXmlLoader; - private bool m_scripts_enabled = true; - public bool m_seeIntoRegionFromNeighbor; - protected ISimChat m_simChatModule; - public string m_simulatorVersion = "OpenSimulator 0.5"; - protected SimStatsReporter m_statsReporter; - protected StorageManager m_storageManager; protected float m_timedilation = 1.0f; - private int m_timePhase = 24; - protected float m_timespan = 0.089f; - private int m_update_backup = 200; + private int m_update_physics = 1; + private int m_update_entitymovement = 1; private int m_update_entities = 1; // Run through all objects checking for updates private int m_update_entitiesquick = 200; // Run through objects that have scheduled updates checking for updates - private int m_update_entitymovement = 1; - private int m_update_events = 1; - private int m_update_land = 1; - private int m_update_physics = 1; private int m_update_presences = 1; // Update scene presence movements + private int m_update_events = 1; + private int m_update_backup = 200; private int m_update_terrain = 50; - protected IWorldComm m_worldCommModule; - protected IXMLRPC m_xmlrpcModule; - public int MaxUndoCount = 5; - protected Dictionary ModuleAPIMethods = new Dictionary(); - public Dictionary ModuleInterfaces = new Dictionary(); - protected Dictionary Modules = new Dictionary(); + private int m_update_land = 1; + + private int frameMS = 0; + private int physicsMS2 = 0; + private int physicsMS = 0; + private int otherMS = 0; + + private bool m_physics_enabled = true; + private bool m_scripts_enabled = true; + - private int otherMS; - private int physicsMS; - private int physicsMS2; - private Random Rand = new Random(); - public IXfer XferManager; #endregion #region Properties - protected readonly EstateManager m_estateManager; - protected readonly PermissionManager m_permissionManager; - public int objectCapacity = 45000; - public AgentCircuitManager AuthenticateHandler { get { return m_authenticateHandler; } } + protected readonly EstateManager m_estateManager; // an instance to the physics plugin's Scene object. public PhysicsScene PhysicsScene { @@ -169,6 +177,7 @@ namespace OpenSim.Region.Environment.Scenes get { return m_timedilation; } } + protected readonly PermissionManager m_permissionManager; // This is the instance to the permissions manager. // This manages permissions to clients on in world objects @@ -206,13 +215,14 @@ namespace OpenSim.Region.Environment.Scenes get { return m_innerScene.Entities; } set { m_innerScene.Entities = value; } } - public Dictionary m_restorePresences { get { return m_innerScene.RestorePresences; } set { m_innerScene.RestorePresences = value; } } + public int objectCapacity = 45000; + #endregion #region Constructors @@ -242,9 +252,9 @@ namespace OpenSim.Region.Environment.Scenes //Bind Storage Manager functions to some land manager functions for this scene EventManager.OnLandObjectAdded += - m_storageManager.DataStore.StoreLandObject; + new EventManager.LandObjectAdded(m_storageManager.DataStore.StoreLandObject); EventManager.OnLandObjectRemoved += - m_storageManager.DataStore.RemoveLandObject; + new EventManager.LandObjectRemoved(m_storageManager.DataStore.RemoveLandObject); m_estateManager = new EstateManager(this, m_regInfo); @@ -311,7 +321,7 @@ namespace OpenSim.Region.Environment.Scenes OSString = OSString.Substring(0, 45); } - m_simulatorVersion = "OpenSimulator v0.5-SVN on " + OSString + " ChilTasks:" + m_seeIntoRegionFromNeighbor + " PhysPrim:" + m_physicalPrim; + m_simulatorVersion = "OpenSimulator v0.5-SVN on " + OSString + " ChilTasks:" + m_seeIntoRegionFromNeighbor.ToString() + " PhysPrim:" + m_physicalPrim.ToString(); } #endregion @@ -372,23 +382,23 @@ namespace OpenSim.Region.Environment.Scenes } // If these are cast to INT because long + negative values + abs returns invalid data - int resultX = Math.Abs((int) otherRegion.RegionLocX - (int) RegionInfo.RegionLocX); - int resultY = Math.Abs((int) otherRegion.RegionLocY - (int) RegionInfo.RegionLocY); + int resultX = Math.Abs((int)otherRegion.RegionLocX - (int)RegionInfo.RegionLocX); + int resultY = Math.Abs((int)otherRegion.RegionLocY - (int)RegionInfo.RegionLocY); if ((resultX <= 1) && (resultY <= 1)) { try { ForEachScenePresence(delegate(ScenePresence agent) + { + // If agent is a root agent. + if (!agent.IsChildAgent) { - // If agent is a root agent. - if (!agent.IsChildAgent) - { - //agent.ControllingClient.new - //this.CommsManager.InterRegion.InformRegionOfChildAgent(otherRegion.RegionHandle, agent.ControllingClient.RequestClientInfo()); - InformClientOfNeighbor(agent, otherRegion); - } + //agent.ControllingClient.new + //this.CommsManager.InterRegion.InformRegionOfChildAgent(otherRegion.RegionHandle, agent.ControllingClient.RequestClientInfo()); + InformClientOfNeighbor(agent, otherRegion); } + } ); } catch (NullReferenceException) @@ -400,9 +410,9 @@ namespace OpenSim.Region.Environment.Scenes } else { - m_log.Info("[INTERGRID]: Got notice about far away Region: " + otherRegion.RegionName + - " at (" + otherRegion.RegionLocX + ", " + - otherRegion.RegionLocY + ")"); + m_log.Info("[INTERGRID]: Got notice about far away Region: " + otherRegion.RegionName.ToString() + + " at (" + otherRegion.RegionLocX.ToString() + ", " + + otherRegion.RegionLocY.ToString() + ")"); } } return true; @@ -426,10 +436,10 @@ namespace OpenSim.Region.Environment.Scenes { // Now we figure out what to set the timer to that does the notifications and calls, RestartNow() m_restartTimer.Interval = 15000; - m_incrementsof15seconds = (int) seconds / 15; + m_incrementsof15seconds = (int)seconds / 15; m_RestartTimerCounter = 0; m_restartTimer.AutoReset = true; - m_restartTimer.Elapsed += RestartTimer_Elapsed; + m_restartTimer.Elapsed += new ElapsedEventHandler(RestartTimer_Elapsed); m_log.Error("[REGION]: Restarting Region in " + (seconds / 60) + " minutes"); m_restartTimer.Start(); SendRegionMessageFromEstateTools(LLUUID.Random(), LLUUID.Random(), String.Empty, RegionInfo.RegionName + ": Restarting in 2 Minutes"); @@ -448,7 +458,7 @@ namespace OpenSim.Region.Environment.Scenes { if (m_RestartTimerCounter == 4 || m_RestartTimerCounter == 6 || m_RestartTimerCounter == 7) SendRegionMessageFromEstateTools(LLUUID.Random(), LLUUID.Random(), String.Empty, RegionInfo.RegionName + ": Restarting in " + - ((8 - m_RestartTimerCounter) * 15) + " seconds"); + ((8 - m_RestartTimerCounter) * 15) + " seconds"); // SendGeneralAlert(RegionInfo.RegionName + ": Restarting in " + ((8 - m_RestartTimerCounter)*15) + //" seconds"); @@ -490,15 +500,15 @@ namespace OpenSim.Region.Environment.Scenes try { ForEachScenePresence(delegate(ScenePresence agent) + { + // If agent is a root agent. + if (!agent.IsChildAgent) { - // If agent is a root agent. - if (!agent.IsChildAgent) - { - //agent.ControllingClient.new - //this.CommsManager.InterRegion.InformRegionOfChildAgent(otherRegion.RegionHandle, agent.ControllingClient.RequestClientInfo()); - InformClientOfNeighbor(agent, region); - } + //agent.ControllingClient.new + //this.CommsManager.InterRegion.InformRegionOfChildAgent(otherRegion.RegionHandle, agent.ControllingClient.RequestClientInfo()); + InformClientOfNeighbor(agent, region); } + } ); } catch (NullReferenceException) @@ -527,7 +537,7 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - ((SceneObjectGroup) ent).StopScripts(); + ((SceneObjectGroup)ent).StopScripts(); } } } @@ -541,10 +551,12 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - ((SceneObjectGroup) ent).StartScripts(); + ((SceneObjectGroup)ent).StartScripts(); } } } + + } m_scripts_enabled = !ScriptEngine; m_log.Info("[TOTEDD]: Here is the method to trigger disabling of the scripting engine"); @@ -552,7 +564,9 @@ namespace OpenSim.Region.Environment.Scenes if (m_physics_enabled != !PhysicsEngine) { m_physics_enabled = !PhysicsEngine; + } + } // This is the method that shuts down the scene. @@ -561,16 +575,16 @@ namespace OpenSim.Region.Environment.Scenes m_log.Warn("[SCENE]: Closing down the single simulator: " + RegionInfo.RegionName); // Kick all ROOT agents with the message, 'The simulator is going down' ForEachScenePresence(delegate(ScenePresence avatar) - { - if (avatar.KnownChildRegions.Contains(RegionInfo.RegionHandle)) - avatar.KnownChildRegions.Remove(RegionInfo.RegionHandle); + { + if (avatar.KnownChildRegions.Contains(RegionInfo.RegionHandle)) + avatar.KnownChildRegions.Remove(RegionInfo.RegionHandle); - if (!avatar.IsChildAgent) - avatar.ControllingClient.Kick("The simulator is going down."); + if (!avatar.IsChildAgent) + avatar.ControllingClient.Kick("The simulator is going down."); - avatar.ControllingClient.OutPacket(PacketPool.Instance.GetPacket(PacketType.DisableSimulator), - ThrottleOutPacketType.Task); - }); + avatar.ControllingClient.OutPacket(PacketPool.Instance.GetPacket(PacketType.DisableSimulator), + ThrottleOutPacketType.Task); + }); // Wait here, or the kick messages won't actually get to the agents before the scene terminates. Thread.Sleep(500); @@ -605,8 +619,8 @@ namespace OpenSim.Region.Environment.Scenes { m_log.Debug("[SCENE]: Starting timer"); m_heartbeatTimer.Enabled = true; - m_heartbeatTimer.Interval = (int) (m_timespan * 1000); - m_heartbeatTimer.Elapsed += Heartbeat; + m_heartbeatTimer.Interval = (int)(m_timespan * 1000); + m_heartbeatTimer.Elapsed += new ElapsedEventHandler(Heartbeat); } public void SetModuleInterfaces() @@ -708,13 +722,13 @@ namespace OpenSim.Region.Environment.Scenes { if (m_frame % m_update_events == 0) UpdateEvents(); - + if (m_frame % m_update_backup == 0) UpdateStorageBackup(); - + if (m_frame % m_update_terrain == 0) UpdateTerrain(); - + if (m_frame % m_update_land == 0) UpdateLand(); otherMS = System.Environment.TickCount - otherMS; @@ -742,25 +756,28 @@ namespace OpenSim.Region.Environment.Scenes } catch (AccessViolationException e) { - m_log.Error("[Scene]: Failed with exception " + e + " On Region: " + RegionInfo.RegionName); + m_log.Error("[Scene]: Failed with exception " + e.ToString() + " On Region: " + RegionInfo.RegionName); + } catch (NullReferenceException e) { - m_log.Error("[Scene]: Failed with exception " + e + " On Region: " + RegionInfo.RegionName); + m_log.Error("[Scene]: Failed with exception " + e.ToString() + " On Region: " + RegionInfo.RegionName); + } catch (InvalidOperationException e) { - m_log.Error("[Scene]: Failed with exception " + e + " On Region: " + RegionInfo.RegionName); + m_log.Error("[Scene]: Failed with exception " + e.ToString() + " On Region: " + RegionInfo.RegionName); + } catch (Exception e) { - m_log.Error("[Scene]: Failed with exception " + e + " On Region: " + RegionInfo.RegionName); + m_log.Error("[Scene]: Failed with exception " + e.ToString() + " On Region: " + RegionInfo.RegionName); } finally { updateLock.ReleaseMutex(); // Get actual time dilation - float tmpval = (m_timespan / (float) SinceLastFrame.TotalSeconds); + float tmpval = (m_timespan / (float)SinceLastFrame.TotalSeconds); // If actual time dilation is greater then one, we're catching up, so subtract // the amount that's greater then 1 from the time dilation @@ -769,7 +786,7 @@ namespace OpenSim.Region.Environment.Scenes tmpval = tmpval - (tmpval - 1.0f); } m_timedilation = tmpval; - + m_lastupdate = DateTime.Now; } } @@ -839,10 +856,10 @@ namespace OpenSim.Region.Environment.Scenes public void ExportWorldMap(string fileName) { List mapBlocks = - m_sceneGridService.RequestNeighbourMapBlocks((int) (RegionInfo.RegionLocX - 9), - (int) (RegionInfo.RegionLocY - 9), - (int) (RegionInfo.RegionLocX + 9), - (int) (RegionInfo.RegionLocY + 9)); + m_sceneGridService.RequestNeighbourMapBlocks((int)(RegionInfo.RegionLocX - 9), + (int)(RegionInfo.RegionLocY - 9), + (int)(RegionInfo.RegionLocX + 9), + (int)(RegionInfo.RegionLocY + 9)); List textures = new List(); List bitImages = new List(); @@ -877,8 +894,8 @@ namespace OpenSim.Region.Environment.Scenes for (int i = 0; i < mapBlocks.Count; i++) { - ushort x = (ushort) ((mapBlocks[i].X - RegionInfo.RegionLocX) + 10); - ushort y = (ushort) ((mapBlocks[i].Y - RegionInfo.RegionLocY) + 10); + ushort x = (ushort)((mapBlocks[i].X - RegionInfo.RegionLocX) + 10); + ushort y = (ushort)((mapBlocks[i].Y - RegionInfo.RegionLocY) + 10); g.DrawImage(bitImages[i], (x * 128), (y * 128), 128, 128); } mapTexture.Save(fileName, ImageFormat.Jpeg); @@ -909,10 +926,11 @@ namespace OpenSim.Region.Environment.Scenes { Heightmap = new TerrainChannel(map); } + } catch (Exception e) { - m_log.Warn("[terrain]: Scene.cs: LoadWorldMap() - Failed with exception " + e); + m_log.Warn("[terrain]: Scene.cs: LoadWorldMap() - Failed with exception " + e.ToString()); } } @@ -973,7 +991,7 @@ namespace OpenSim.Region.Environment.Scenes { for (int y = 0; y < 256; y++) { - float hmval = (float) hm[x, y]; + float hmval = (float)hm[x, y]; if (hmval < low) low = hmval; if (hmval > high) @@ -1003,10 +1021,10 @@ namespace OpenSim.Region.Environment.Scenes //} //else //{ - float tmpval = (float) hm[x, y]; - heightvalue = (float) hm[x, y]; + float tmpval = (float)hm[x, y]; + heightvalue = (float)hm[x, y]; - if (heightvalue > m_regInfo.EstateSettings.waterHeight) + if ((float)heightvalue > m_regInfo.EstateSettings.waterHeight) { // scale height value heightvalue = low + mid * (heightvalue - low) / mid; @@ -1018,7 +1036,7 @@ namespace OpenSim.Region.Environment.Scenes heightvalue = 0; - Color green = Color.FromArgb((int) heightvalue, 100, (int) heightvalue); + Color green = Color.FromArgb((int)heightvalue, 100, (int)heightvalue); // Y flip the cordinates mapbmp.SetPixel(x, (256 - y) - 1, green); @@ -1040,10 +1058,12 @@ namespace OpenSim.Region.Environment.Scenes if (heightvalue < 0) heightvalue = 0; - Color water = Color.FromArgb((int) heightvalue, (int) heightvalue, 255); + Color water = Color.FromArgb((int)heightvalue, (int)heightvalue, 255); mapbmp.SetPixel(x, (256 - y) - 1, water); } //} + + } //tc = System.Environment.TickCount - tc; //m_log.Info("[MAPTILE]: Completed One row in " + tc + " ms"); @@ -1067,6 +1087,7 @@ namespace OpenSim.Region.Environment.Scenes asset.Type = 0; asset.Temporary = temporary; AssetCache.AddAsset(asset); + } else { @@ -1084,6 +1105,7 @@ namespace OpenSim.Region.Environment.Scenes AssetCache.AddAsset(asset); } } + } #endregion @@ -1121,14 +1143,14 @@ namespace OpenSim.Region.Environment.Scenes { AddEntityFromStorage(group); SceneObjectPart rootPart = group.GetChildPart(group.UUID); - rootPart.ObjectFlags &= ~(uint) LLObject.ObjectFlags.Scripted; + rootPart.ObjectFlags &= ~(uint)LLObject.ObjectFlags.Scripted; rootPart.TrimPermissions(); group.ApplyPhysics(m_physicalPrim); //rootPart.DoPhysicsPropertyUpdate(UsePhysics, true); } - m_log.Info("[SCENE]: Loaded " + PrimsFromDB.Count + " SceneObject(s)"); + m_log.Info("[SCENE]: Loaded " + PrimsFromDB.Count.ToString() + " SceneObject(s)"); } /// @@ -1147,11 +1169,10 @@ namespace OpenSim.Region.Environment.Scenes return myID; } - public LLVector3 GetNewRezLocation(LLVector3 RayStart, LLVector3 RayEnd, LLUUID RayTargetID, LLQuaternion rot, byte bypassRayCast, - byte RayEndIsIntersection, bool frontFacesOnly, LLVector3 scale, bool FaceCenter) + public LLVector3 GetNewRezLocation(LLVector3 RayStart, LLVector3 RayEnd, LLUUID RayTargetID, LLQuaternion rot, byte bypassRayCast, byte RayEndIsIntersection, bool frontFacesOnly, LLVector3 scale, bool FaceCenter) { LLVector3 pos = LLVector3.Zero; - if (RayEndIsIntersection == 1) + if (RayEndIsIntersection == (byte)1) { pos = RayEnd; return pos; @@ -1159,7 +1180,7 @@ namespace OpenSim.Region.Environment.Scenes if (RayTargetID != LLUUID.Zero) { SceneObjectPart target = GetSceneObjectPart(RayTargetID); - + LLVector3 direction = LLVector3.Norm(RayEnd - RayStart); Vector3 AXOrigin = new Vector3(RayStart.X, RayStart.Y, RayStart.Z); Vector3 AXdirection = new Vector3(direction.X, direction.Y, direction.Z); @@ -1168,17 +1189,17 @@ namespace OpenSim.Region.Environment.Scenes { pos = target.AbsolutePosition; //m_log.Info("[OBJECT_REZ]: TargetPos: " + pos.ToString() + ", RayStart: " + RayStart.ToString() + ", RayEnd: " + RayEnd.ToString() + ", Volume: " + Util.GetDistanceTo(RayStart,RayEnd).ToString() + ", mag1: " + Util.GetMagnitude(RayStart).ToString() + ", mag2: " + Util.GetMagnitude(RayEnd).ToString()); - + // TODO: Raytrace better here - + //EntityIntersection ei = m_innerScene.GetClosestIntersectingPrim(new Ray(AXOrigin, AXdirection)); Ray NewRay = new Ray(AXOrigin, AXdirection); // Ray Trace against target here - EntityIntersection ei = target.TestIntersectionOBB(NewRay, new Quaternion(1, 0, 0, 0), frontFacesOnly, FaceCenter); + EntityIntersection ei = target.TestIntersectionOBB(NewRay, new Quaternion(1,0,0,0), frontFacesOnly, FaceCenter); // Un-comment out the following line to Get Raytrace results printed to the console. - // m_log.Info("[RAYTRACERESULTS]: Hit:" + ei.HitTF.ToString() + " Point: " + ei.ipoint.ToString() + " Normal: " + ei.normal.ToString()); + // m_log.Info("[RAYTRACERESULTS]: Hit:" + ei.HitTF.ToString() + " Point: " + ei.ipoint.ToString() + " Normal: " + ei.normal.ToString()); float ScaleOffset = 0.5f; // If we hit something @@ -1194,12 +1215,13 @@ namespace OpenSim.Region.Environment.Scenes // Set the position to the intersection point LLVector3 offset = (normal * (ScaleOffset / 2f)); pos = (intersectionpoint + offset); - + // Un-offset the prim (it gets offset later by the consumer method) pos.Z -= 0.25F; - } - - + + } + + return pos; } else @@ -1214,8 +1236,8 @@ namespace OpenSim.Region.Environment.Scenes if (ei.HitTF) { pos = new LLVector3(ei.ipoint.x, ei.ipoint.y, ei.ipoint.z); - } - + } + return pos; } } @@ -1231,8 +1253,8 @@ namespace OpenSim.Region.Environment.Scenes byte bypassRaycast, LLVector3 RayStart, LLUUID RayTargetID, byte RayEndIsIntersection) { - LLVector3 pos = GetNewRezLocation(RayStart, RayEnd, RayTargetID, rot, bypassRaycast, RayEndIsIntersection, true, new LLVector3(0.5f, 0.5f, 0.5f), - false); + + LLVector3 pos = GetNewRezLocation(RayStart, RayEnd, RayTargetID, rot, bypassRaycast, RayEndIsIntersection, true, new LLVector3(0.5f,0.5f,0.5f), false); if (PermissionsMngr.CanRezObject(ownerID, pos)) { @@ -1252,7 +1274,7 @@ namespace OpenSim.Region.Environment.Scenes SceneObjectPart rootPart = sceneOb.GetChildPart(sceneOb.UUID); // if grass or tree, make phantom //rootPart.TrimPermissions(); - if ((rootPart.Shape.PCode == (byte) PCode.Grass) || (rootPart.Shape.PCode == (byte) PCode.Tree) || (rootPart.Shape.PCode == (byte) PCode.NewTree)) + if ((rootPart.Shape.PCode == (byte)PCode.Grass) || (rootPart.Shape.PCode == (byte)PCode.Tree) || (rootPart.Shape.PCode == (byte)PCode.NewTree)) { rootPart.AddFlag(LLObject.ObjectFlags.Phantom); //rootPart.ObjectFlags += (uint)LLObject.ObjectFlags.Phantom; @@ -1267,13 +1289,13 @@ namespace OpenSim.Region.Environment.Scenes public SceneObjectGroup AddTree(LLVector3 scale, LLQuaternion rotation, LLVector3 position, Tree treeType, bool newTree) { - LLUUID uuid = RegionInfo.MasterAvatarAssignedUUID; + LLUUID uuid = this.RegionInfo.MasterAvatarAssignedUUID; PrimitiveBaseShape treeShape = new PrimitiveBaseShape(); treeShape.PathCurve = 16; treeShape.PathEnd = 49900; - treeShape.PCode = newTree ? (byte) PCode.NewTree : (byte) PCode.Tree; + treeShape.PCode = newTree ? (byte)PCode.NewTree : (byte)PCode.Tree; treeShape.Scale = scale; - treeShape.State = (byte) treeType; + treeShape.State = (byte)treeType; return AddNewPrim(uuid, position, rotation, treeShape); } @@ -1338,11 +1360,12 @@ namespace OpenSim.Region.Environment.Scenes /// /// current position of Group /// Scene Object Group that we're crossing + public void CrossPrimGroupIntoNewRegion(LLVector3 position, SceneObjectGroup grp) { - m_log.Warn("Prim crossing: " + grp.UUID); - int thisx = (int) RegionInfo.RegionLocX; - int thisy = (int) RegionInfo.RegionLocY; + m_log.Warn("Prim crossing: " + grp.UUID.ToString()); + int thisx = (int)RegionInfo.RegionLocX; + int thisy = (int)RegionInfo.RegionLocY; ulong newRegionHandle = 0; LLVector3 pos = position; @@ -1351,44 +1374,43 @@ namespace OpenSim.Region.Environment.Scenes { pos.X = ((pos.X - Constants.RegionSize)); - newRegionHandle = Util.UIntsToLong((uint) ((thisx + 1) * Constants.RegionSize), (uint) (thisy * Constants.RegionSize)); - + newRegionHandle = Util.UIntsToLong((uint)((thisx + 1) * Constants.RegionSize), (uint)(thisy * Constants.RegionSize)); + // x + 1 } else if (position.X < -0.1f) { pos.X = ((pos.X + Constants.RegionSize)); - newRegionHandle = Util.UIntsToLong((uint) ((thisx - 1) * Constants.RegionSize), (uint) (thisy * Constants.RegionSize)); + newRegionHandle = Util.UIntsToLong((uint)((thisx - 1) * Constants.RegionSize), (uint)(thisy * Constants.RegionSize)); // x - 1 } if (position.Y > Constants.RegionSize + 0.1f) { pos.Y = ((pos.Y - Constants.RegionSize)); - newRegionHandle = Util.UIntsToLong((uint) (thisx * Constants.RegionSize), (uint) ((thisy + 1) * Constants.RegionSize)); + newRegionHandle = Util.UIntsToLong((uint)(thisx * Constants.RegionSize), (uint)((thisy + 1) * Constants.RegionSize)); // y + 1 } else if (position.Y < -1f) { pos.Y = ((pos.Y + Constants.RegionSize)); - newRegionHandle = Util.UIntsToLong((uint) (thisx * Constants.RegionSize), (uint) ((thisy - 1) * Constants.RegionSize)); + newRegionHandle = Util.UIntsToLong((uint)(thisx * Constants.RegionSize), (uint)((thisy - 1) * Constants.RegionSize)); // y - 1 } // Offset the positions for the new region across the border grp.OffsetForNewRegion(pos); - + CrossPrimGroupIntoNewRegion(newRegionHandle, grp); - } + } public void CrossPrimGroupIntoNewRegion(ulong newRegionHandle, SceneObjectGroup grp) { int primcrossingXMLmethod = 0; if (newRegionHandle != 0) { bool successYN = false; - successYN = m_sceneGridService.PrimCrossToNeighboringRegion(newRegionHandle, grp.UUID, m_sceneXmlLoader.SavePrimGroupToXML2String(grp), - primcrossingXMLmethod); + successYN = m_sceneGridService.PrimCrossToNeighboringRegion(newRegionHandle, grp.UUID, m_sceneXmlLoader.SavePrimGroupToXML2String(grp), primcrossingXMLmethod); if (successYN) { // We remove the object here @@ -1424,7 +1446,7 @@ namespace OpenSim.Region.Environment.Scenes SceneObjectPart RootPrim = GetSceneObjectPart(primID); if (RootPrim != null) { - if (RootPrim.Shape.PCode == (byte) PCode.Prim) + if (RootPrim.Shape.PCode == (byte)PCode.Prim) { SceneObjectGroup grp = RootPrim.ParentGroup; if (grp != null) @@ -1440,10 +1462,12 @@ namespace OpenSim.Region.Environment.Scenes // with the deeded object, it goes back to them grp.SetFromAssetID(grp.RootPart.LastOwnerID); - m_innerScene.AttachObject(sp.ControllingClient, grp.LocalId, 0, grp.GroupRotation, grp.AbsolutePosition); + m_innerScene.AttachObject(sp.ControllingClient, grp.LocalId, (uint)0, grp.GroupRotation, grp.AbsolutePosition); } } } + + } } return true; @@ -1452,6 +1476,7 @@ namespace OpenSim.Region.Environment.Scenes { return false; } + } #endregion @@ -1466,9 +1491,9 @@ namespace OpenSim.Region.Environment.Scenes public override void AddNewClient(IClientAPI client, bool child) { m_log.DebugFormat( - "[CONNECTION DEBUGGING]: Creating new client for {0} at {1}", + "[CONNECTION DEBUGGING]: Creating new client for {0} at {1}", client.AgentId, RegionInfo.RegionName); - + SubscribeToClientEvents(client); ScenePresence presence = null; @@ -1538,19 +1563,19 @@ namespace OpenSim.Region.Environment.Scenes client.OnObjectDuplicateOnRay += doObjectDuplicateOnRay; client.OnUpdatePrimFlags += m_innerScene.UpdatePrimFlags; client.OnRequestObjectPropertiesFamily += m_innerScene.RequestObjectPropertiesFamily; - client.OnParcelPropertiesRequest += LandChannel.handleParcelPropertiesRequest; - client.OnParcelDivideRequest += LandChannel.handleParcelDivideRequest; - client.OnParcelJoinRequest += LandChannel.handleParcelJoinRequest; + client.OnParcelPropertiesRequest += new ParcelPropertiesRequest(LandChannel.handleParcelPropertiesRequest); + client.OnParcelDivideRequest += new ParcelDivideRequest(LandChannel.handleParcelDivideRequest); + client.OnParcelJoinRequest += new ParcelJoinRequest(LandChannel.handleParcelJoinRequest); client.OnParcelPropertiesUpdateRequest += - LandChannel.handleParcelPropertiesUpdateRequest; - client.OnParcelSelectObjects += LandChannel.handleParcelSelectObjectsRequest; + new ParcelPropertiesUpdateRequest(LandChannel.handleParcelPropertiesUpdateRequest); + client.OnParcelSelectObjects += new ParcelSelectObjects(LandChannel.handleParcelSelectObjectsRequest); client.OnParcelObjectOwnerRequest += - LandChannel.handleParcelObjectOwnersRequest; - client.OnParcelAccessListRequest += LandChannel.handleParcelAccessRequest; + new ParcelObjectOwnerRequest(LandChannel.handleParcelObjectOwnersRequest); + client.OnParcelAccessListRequest += new ParcelAccessListRequest(LandChannel.handleParcelAccessRequest); client.OnParcelAccessListUpdateRequest += - LandChannel.handleParcelAccessUpdateRequest; + new ParcelAccessListUpdateRequest(LandChannel.handleParcelAccessUpdateRequest); - client.OnEstateOwnerMessage += m_estateManager.handleEstateOwnerMessage; + client.OnEstateOwnerMessage += new EstateOwnerMessageRequest(m_estateManager.handleEstateOwnerMessage); client.OnRegionInfoRequest += m_estateManager.HandleRegionInfoRequest; client.OnEstateCovenantRequest += m_estateManager.HandleEstateCovenantRequest; client.OnRequestGodlikePowers += handleRequestGodlikePowers; @@ -1591,38 +1616,41 @@ namespace OpenSim.Region.Environment.Scenes client.OnSetStartLocationRequest += SetHomeRezPoint; client.OnUndo += m_innerScene.HandleUndo; - + EventManager.TriggerOnNewClient(client); } - public virtual void TeleportClientHome(LLUUID AgentId, IClientAPI client) { UserProfileData UserProfile = CommsManager.UserService.GetUserProfile(AgentId); if (UserProfile != null) { ulong homeRegion = UserProfile.HomeRegion; - LLVector3 homePostion = new LLVector3(UserProfile.HomeLocationX, UserProfile.HomeLocationY, UserProfile.HomeLocationZ); + LLVector3 homePostion = new LLVector3(UserProfile.HomeLocationX,UserProfile.HomeLocationY,UserProfile.HomeLocationZ); LLVector3 homeLookat = new LLVector3(UserProfile.HomeLookAt); - RequestTeleportLocation(client, homeRegion, homePostion, homeLookat, 0); - } - } + RequestTeleportLocation(client, homeRegion, homePostion,homeLookat,(uint)0); + } + + + } public void doObjectDuplicateOnRay(uint localID, uint dupeFlags, LLUUID AgentID, LLUUID GroupID, - LLUUID RayTargetObj, LLVector3 RayEnd, LLVector3 RayStart, - bool BypassRaycast, bool RayEndIsIntersection, bool CopyCenters, bool CopyRotates) + LLUUID RayTargetObj, LLVector3 RayEnd, LLVector3 RayStart, + bool BypassRaycast, bool RayEndIsIntersection, bool CopyCenters, bool CopyRotates) { + LLVector3 pos = LLVector3.Zero; bool frontFacesOnly = true; - + SceneObjectPart target = GetSceneObjectPart(localID); if (target != null) { + LLVector3 direction = LLVector3.Norm(RayEnd - RayStart); Vector3 AXOrigin = new Vector3(RayStart.X, RayStart.Y, RayStart.Z); Vector3 AXdirection = new Vector3(direction.X, direction.Y, direction.Z); - + if (target != null) { if (target.ParentGroup != null) @@ -1652,8 +1680,9 @@ namespace OpenSim.Region.Environment.Scenes if (scaleComponent.Z != 0) ScaleOffset = scale.Z; ScaleOffset = Math.Abs(ScaleOffset); LLVector3 intersectionpoint = new LLVector3(ei.ipoint.x, ei.ipoint.y, ei.ipoint.z); - - + + + if (CopyCenters) { // now we cast a ray from inside the prim(absolute position) to one of it's faces along the face normal. @@ -1665,7 +1694,7 @@ namespace OpenSim.Region.Environment.Scenes if (ei2.HitTF) { //m_log.Info("[RAYTRACERESULTS]: Hit:" + ei2.HitTF.ToString() + " Point: " + ei2.ipoint.ToString() + " Normal: " + ei2.normal.ToString()); - pos = new LLVector3(ei2.ipoint.x, ei2.ipoint.y, ei2.ipoint.z); + pos = new LLVector3(ei2.ipoint.x,ei2.ipoint.y,ei2.ipoint.z); } } LLVector3 normal = new LLVector3(ei.normal.x, ei.normal.y, ei.normal.z); @@ -1678,14 +1707,18 @@ namespace OpenSim.Region.Environment.Scenes m_innerScene.DuplicateObject(target.ParentGroup.LocalId, pos, target.GetEffectiveObjectFlags(), AgentID, GroupID); } - + return; } return; } + } - } + + + + } public virtual void SetHomeRezPoint(IClientAPI remoteClient, ulong regionHandle, LLVector3 position, LLVector3 lookAt, uint flags) { UserProfileData UserProfile = CommsManager.UserService.GetUserProfile(remoteClient.AgentId); @@ -1698,22 +1731,22 @@ namespace OpenSim.Region.Environment.Scenes // We cast these to an int so as not to cause a breaking change with old regions // Newer regions treat this as a float on the ExpectUser method.. so we need to wait a few // releases before setting these to floats. (r4257) - UserProfile.HomeLocationX = (int) position.X; - UserProfile.HomeLocationY = (int) position.Y; - UserProfile.HomeLocationZ = (int) position.Z; - UserProfile.HomeLookAtX = (int) lookAt.X; - UserProfile.HomeLookAtY = (int) lookAt.Y; - UserProfile.HomeLookAtZ = (int) lookAt.Z; + UserProfile.HomeLocationX = (int)position.X; + UserProfile.HomeLocationY = (int)position.Y; + UserProfile.HomeLocationZ = (int)position.Z; + UserProfile.HomeLookAtX = (int)lookAt.X; + UserProfile.HomeLookAtY = (int)lookAt.Y; + UserProfile.HomeLookAtZ = (int)lookAt.Z; CommsManager.UserService.UpdateUserProfileProperties(UserProfile); - - remoteClient.SendAgentAlertMessage("Set home to here if supported by login service", false); + + remoteClient.SendAgentAlertMessage("Set home to here if supported by login service",false); } else { - remoteClient.SendAgentAlertMessage("Set Home request Failed", false); + remoteClient.SendAgentAlertMessage("Set Home request Failed",false); } - } + } protected virtual ScenePresence CreateAndAddScenePresence(IClientAPI client, bool child) { ScenePresence avatar = null; @@ -1779,7 +1812,7 @@ namespace OpenSim.Region.Environment.Scenes m_sceneGridService.SendCloseChildAgentConnections(agentID, childknownRegions); RemoveCapsHandler(agentID); - + CommsManager.UserProfileCacheService.RemoveUser(agentID); } @@ -1792,21 +1825,21 @@ namespace OpenSim.Region.Environment.Scenes } m_eventManager.TriggerOnRemovePresence(agentID); Broadcast(delegate(IClientAPI client) + { + try { - try - { - client.SendKillObject(avatar.RegionHandle, avatar.LocalId); - } - catch (NullReferenceException) - { - //We can safely ignore null reference exceptions. It means the avatar are dead and cleaned up anyway. - } - }); + client.SendKillObject(avatar.RegionHandle, avatar.LocalId); + } + catch (NullReferenceException) + { + //We can safely ignore null reference exceptions. It means the avatar are dead and cleaned up anyway. + } + }); ForEachScenePresence( delegate(ScenePresence presence) { presence.CoarseLocationChange(); }); - - IAgentAssetTransactions agentTransactions = RequestModuleInterface(); + + IAgentAssetTransactions agentTransactions = this.RequestModuleInterface(); if (agentTransactions != null) { agentTransactions.RemoveAgentAssetTransactions(agentID); @@ -1846,7 +1879,7 @@ namespace OpenSim.Region.Environment.Scenes } catch (Exception e) { - m_log.Error("[SCENE] Scene.cs:RemoveClient exception: " + e); + m_log.Error("[SCENE] Scene.cs:RemoveClient exception: " + e.ToString()); } // Remove client agent from profile, so new logins will work @@ -1866,12 +1899,14 @@ namespace OpenSim.Region.Environment.Scenes { lock (av) { + for (int i = 0; i < regionslst.Count; i++) { av.KnownChildRegions.Remove(regionslst[i]); } } } + } public override void CloseAllAgents(uint circuitcode) @@ -1959,7 +1994,7 @@ namespace OpenSim.Region.Environment.Scenes if (regionHandle == m_regInfo.RegionHandle) { capsPaths[agent.AgentID] = agent.CapsPath; - + if (!agent.child) { AddCapsHandler(agent.AgentID); @@ -1968,26 +2003,26 @@ namespace OpenSim.Region.Environment.Scenes ILandObject land = LandChannel.getLandObject(agent.startpos.X, agent.startpos.Y); if (land != null) { - if (land.landData.landingType == 1 && land.landData.userLocation != LLVector3.Zero) + if (land.landData.landingType == (byte)1 && land.landData.userLocation != LLVector3.Zero) { agent.startpos = land.landData.userLocation; } } } - + m_log.DebugFormat( "[CONNECTION DEBUGGING]: Creating new circuit code ({0}) for avatar {1} at {2}", agent.circuitcode, agent.AgentID, RegionInfo.RegionName); - + m_authenticateHandler.AddNewCircuit(agent.circuitcode, agent); } else { m_log.WarnFormat( - "[CONNECTION DEBUGGING]: Skipping this region for welcoming avatar {0} [{1}] at {2}", + "[CONNECTION DEBUGGING]: Skipping this region for welcoming avatar {0} [{1}] at {2}", agent.AgentID, regionHandle, RegionInfo.RegionName); } - } + } /// /// Add a caps handler for the given agent. If the CAPS handler already exists for this agent, @@ -2000,18 +2035,18 @@ namespace OpenSim.Region.Environment.Scenes /// /// public void AddCapsHandler(LLUUID agentId) - { - String capsObjectPath = GetCapsPath(agentId); + { + String capsObjectPath = GetCapsPath(agentId); m_log.DebugFormat( "[CAPS]: Setting up CAPS handler for root agent {0} in {1}", agentId, RegionInfo.RegionName); - + Caps cap = new Caps(AssetCache, m_httpListener, m_regInfo.ExternalHostName, m_httpListener.Port, capsObjectPath, agentId, m_dumpAssetsToFile, RegionInfo.RegionName); cap.RegisterHandlers(); - + EventManager.TriggerOnRegisterCaps(agentId, cap); cap.AddNewInventoryItem = AddInventoryItem; @@ -2020,7 +2055,7 @@ namespace OpenSim.Region.Environment.Scenes cap.CAPSFetchInventoryDescendents = CommsManager.UserProfileCacheService.HandleFetchInventoryDescendentsCAPS; cap.GetClient = m_innerScene.GetControllingClient; m_capsHandlers[agentId] = cap; - } + } /// /// Remove the caps handler for a given agent. @@ -2033,9 +2068,9 @@ namespace OpenSim.Region.Environment.Scenes if (m_capsHandlers.ContainsKey(agentId)) { m_log.DebugFormat( - "[CAPS]: Removing CAPS handler for root agent {0} in {1}", + "[CAPS]: Removing CAPS handler for root agent {0} in {1}", agentId, RegionInfo.RegionName); - + m_capsHandlers[agentId].DeregisterHandlers(); EventManager.TriggerOnDeregisterCaps(agentId, m_capsHandlers[agentId]); @@ -2070,7 +2105,7 @@ namespace OpenSim.Region.Environment.Scenes catch (Exception e) { m_log.Info("[SCENE]: Unable to do Agent Crossing."); - m_log.Debug("[SCENE]: " + e); + m_log.Debug("[SCENE]: " + e.ToString()); } //m_innerScene.SwapRootChildAgent(false); } @@ -2086,14 +2121,15 @@ namespace OpenSim.Region.Environment.Scenes // however to avoid a race condition crossing borders.. if (childAgentUpdate.IsChildAgent) { - uint rRegionX = (uint) (cAgentData.regionHandle >> 40); - uint rRegionY = (((uint) (cAgentData.regionHandle)) >> 8); + uint rRegionX = (uint)(cAgentData.regionHandle >> 40); + uint rRegionY = (((uint)(cAgentData.regionHandle)) >> 8); uint tRegionX = RegionInfo.RegionLocX; uint tRegionY = RegionInfo.RegionLocY; //Send Data to ScenePresence childAgentUpdate.ChildAgentDataUpdate(cAgentData, tRegionX, tRegionY, rRegionX, rRegionY); // Not Implemented: //TODO: Do we need to pass the message on to one of our neighbors? + } return true; } @@ -2121,7 +2157,7 @@ namespace OpenSim.Region.Environment.Scenes m_innerScene.removeUserCount(true); } // Tell a single agent to disconnect from the region. - DisableSimulatorPacket disable = (DisableSimulatorPacket) PacketPool.Instance.GetPacket(PacketType.DisableSimulator); + DisableSimulatorPacket disable = (DisableSimulatorPacket)PacketPool.Instance.GetPacket(PacketType.DisableSimulator); presence.ControllingClient.OutPacket(disable, ThrottleOutPacketType.Unknown); presence.ControllingClient.Close(true); } @@ -2271,9 +2307,9 @@ namespace OpenSim.Region.Environment.Scenes /// public void RegisterModuleInterface(M mod) { - if (!ModuleInterfaces.ContainsKey(typeof (M))) + if (!ModuleInterfaces.ContainsKey(typeof(M))) { - ModuleInterfaces.Add(typeof (M), mod); + ModuleInterfaces.Add(typeof(M), mod); } } @@ -2283,9 +2319,9 @@ namespace OpenSim.Region.Environment.Scenes /// public T RequestModuleInterface() { - if (ModuleInterfaces.ContainsKey(typeof (T))) + if (ModuleInterfaces.ContainsKey(typeof(T))) { - return (T) ModuleInterfaces[typeof (T)]; + return (T)ModuleInterfaces[typeof(T)]; } else { @@ -2300,12 +2336,14 @@ namespace OpenSim.Region.Environment.Scenes m_statsReporter.SetObjectCapacity(objects); } objectCapacity = objects; + } public List GetFriendList(LLUUID avatarID) { return CommsManager.GetUserFriendList(avatarID); } + #endregion @@ -2340,8 +2378,7 @@ namespace OpenSim.Region.Environment.Scenes } } - public void SendDialogToUser(LLUUID avatarID, string objectName, LLUUID objectID, LLUUID ownerID, string message, LLUUID TextureID, int ch, - string[] buttonlabels) + public void SendDialogToUser(LLUUID avatarID, string objectName, LLUUID objectID, LLUUID ownerID, string message, LLUUID TextureID, int ch, string[] buttonlabels) { if (m_scenePresences.ContainsKey(avatarID)) { @@ -2364,7 +2401,7 @@ namespace OpenSim.Region.Environment.Scenes } return LLUUID.Zero; } - + /// /// This method is a way for the Friends Module to create an instant @@ -2399,7 +2436,6 @@ namespace OpenSim.Region.Environment.Scenes // TODO: m_sceneGridService.DoStuff; m_sceneGridService.RemoveUserFriend(ownerID, ExfriendID); } - public virtual List StoreGetFriendsForUser(LLUUID ownerID) { // TODO: m_sceneGridService.DoStuff; @@ -2412,13 +2448,11 @@ namespace OpenSim.Region.Environment.Scenes m_statsReporter.AddOutPackets(outPackets); m_statsReporter.AddunAckedBytes(unAckedBytes); } - public void AddAgentTime(int ms) { m_statsReporter.addFrameMS(ms); m_statsReporter.addAgentMS(ms); } - public void AddAgentUpdates(int count) { m_statsReporter.AddAgentUpdates(count); @@ -2512,6 +2546,7 @@ namespace OpenSim.Region.Environment.Scenes /// The Message being sent to the user public void SendRegionMessageFromEstateTools(LLUUID FromAvatarID, LLUUID fromSessionID, String FromAvatarName, String Message) { + List presenceList = GetScenePresences(); foreach (ScenePresence presence in presenceList) @@ -2531,7 +2566,11 @@ namespace OpenSim.Region.Environment.Scenes /// The Message being sent to the user public void SendEstateMessageFromEstateTools(LLUUID FromAvatarID, LLUUID fromSessionID, String FromAvatarName, String Message) { - ClientManager.ForEachClient(delegate(IClientAPI controller) { controller.SendBlueBoxMessage(FromAvatarID, fromSessionID, FromAvatarName, Message); } + + ClientManager.ForEachClient(delegate(IClientAPI controller) + { + controller.SendBlueBoxMessage(FromAvatarID, fromSessionID, FromAvatarName, Message); + } ); } @@ -2557,24 +2596,27 @@ namespace OpenSim.Region.Environment.Scenes if (agentID == kickUserID) { ClientManager.ForEachClient(delegate(IClientAPI controller) - { - if (controller.AgentId != godID) - controller.Kick(Helpers.FieldToUTF8String(reason)); - } + { + if (controller.AgentId != godID) + controller.Kick(Helpers.FieldToUTF8String(reason)); + + + + } ); // This is a bit crude. It seems the client will be null before it actually stops the thread // The thread will kill itself eventually :/ // Is there another way to make sure *all* clients get this 'inter region' message? ClientManager.ForEachClient(delegate(IClientAPI controller) + { + ScenePresence p = GetScenePresence(controller.AgentId); + bool childagent = !p.Equals(null) && p.IsChildAgent; + if (controller.AgentId != godID && !childagent) + // Do we really want to kick the initiator of this madness? { - ScenePresence p = GetScenePresence(controller.AgentId); - bool childagent = !p.Equals(null) && p.IsChildAgent; - if (controller.AgentId != godID && !childagent) - // Do we really want to kick the initiator of this madness? - { - controller.Close(true); - } + controller.Close(true); } + } ); } else @@ -2605,6 +2647,7 @@ namespace OpenSim.Region.Environment.Scenes // Check for spoofing.. since this is permissions we're talking about here! if ((controller.SessionId == sessionID) && (controller.AgentId == agentID)) { + // Tell the object to do permission update if (localId != 0) { @@ -2614,6 +2657,7 @@ namespace OpenSim.Region.Environment.Scenes chObjectGroup.UpdatePermissions(agentID, field, localId, mask, set); } } + } } @@ -2679,7 +2723,7 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - ((SceneObjectGroup) ent).ScheduleGroupForFullUpdate(); + ((SceneObjectGroup)ent).ScheduleGroupForFullUpdate(); } } } @@ -2699,7 +2743,7 @@ namespace OpenSim.Region.Environment.Scenes { if (ent is SceneObjectGroup) { - SceneObjectPart part = ((SceneObjectGroup) ent).GetChildPart((ent).UUID); + SceneObjectPart part = ((SceneObjectGroup)ent).GetChildPart(((SceneObjectGroup)ent).UUID); if (part != null) { if (part.Name == cmdparams[0]) @@ -2823,8 +2867,8 @@ namespace OpenSim.Region.Environment.Scenes #region Script Engine - private readonly bool m_dumpAssetsToFile; - private readonly List ScriptEngines = new List(); + private List ScriptEngines = new List(); + private bool m_dumpAssetsToFile; /// /// @@ -2838,11 +2882,13 @@ namespace OpenSim.Region.Environment.Scenes public void TriggerObjectChanged(uint localID, uint change) { + m_eventManager.TriggerOnScriptChangedEvent(localID, change); } public void TriggerAtTargetEvent(uint localID, uint handle, LLVector3 targetpos, LLVector3 currentpos) { + m_eventManager.TriggerAtTargetEvent(localID, handle, targetpos, currentpos); } @@ -2851,21 +2897,20 @@ namespace OpenSim.Region.Environment.Scenes m_eventManager.TriggerNotAtTargetEvent(localID); } - private bool scriptDanger(SceneObjectPart part, LLVector3 pos) + private bool scriptDanger(SceneObjectPart part,LLVector3 pos) { ILandObject parcel = LandChannel.getLandObject(pos.X, pos.Y); if (part != null) { if (parcel != null) { - if ((parcel.landData.landFlags & (uint) Parcel.ParcelFlags.AllowOtherScripts) != 0) + if ((parcel.landData.landFlags & (uint)Parcel.ParcelFlags.AllowOtherScripts) != 0) { return true; } - else if ((parcel.landData.landFlags & (uint) Parcel.ParcelFlags.AllowGroupScripts) != 0) + else if ((parcel.landData.landFlags & (uint)Parcel.ParcelFlags.AllowGroupScripts) != 0) { - if (part.OwnerID == parcel.landData.ownerID || (parcel.landData.isGroupOwned && part.GroupID == parcel.landData.groupID) || - PermissionsMngr.GenericEstatePermission(part.OwnerID)) + if (part.OwnerID == parcel.landData.ownerID || (parcel.landData.isGroupOwned && part.GroupID == parcel.landData.groupID) || PermissionsMngr.GenericEstatePermission(part.OwnerID)) { return true; } @@ -2873,7 +2918,7 @@ namespace OpenSim.Region.Environment.Scenes { return false; } - } + } else { if (part.OwnerID == parcel.landData.ownerID) @@ -2888,6 +2933,7 @@ namespace OpenSim.Region.Environment.Scenes } else { + if (pos.X > 0f && pos.X < Constants.RegionSize && pos.Y > 0f && pos.Y < Constants.RegionSize) { // The only time parcel != null when an object is inside a region is when @@ -2906,7 +2952,6 @@ namespace OpenSim.Region.Environment.Scenes return false; } } - public bool scriptDanger(uint localID, LLVector3 pos) { SceneObjectPart part = GetSceneObjectPart(localID); @@ -2922,11 +2967,13 @@ namespace OpenSim.Region.Environment.Scenes public bool pipeEventsForScript(uint localID) { + SceneObjectPart part = GetSceneObjectPart(localID); if (part != null) { LLVector3 pos = part.GetWorldPosition(); return scriptDanger(part, pos); + } else { @@ -3043,17 +3090,17 @@ namespace OpenSim.Region.Environment.Scenes } catch (Exception e) { - m_log.Info("[BUG]: " + e); + m_log.Info("[BUG]: " + e.ToString()); } } } - + /// /// Delete this object from the scene. /// /// public void DeleteSceneObjectGroup(SceneObjectGroup group) - { + { SceneObjectPart rootPart = (group).GetChildPart(group.UUID); if (rootPart.PhysActor != null) { @@ -3070,15 +3117,15 @@ namespace OpenSim.Region.Environment.Scenes m_innerScene.RemoveAPrimCount(); } group.DeleteParts(); - + // In case anybody else retains a reference to this group, signal deletion by changing the name // to null. We can't zero out the UUID because this is taken from the root part, which has already // been removed. // FIXME: This is a really poor temporary solution, since it still leaves plenty of scope for race // conditions where a user deletes an entity while it is being stored. Really, the update // code needs a redesign. - group.Name = null; - } + group.Name = null; + } /// /// @@ -3098,6 +3145,7 @@ namespace OpenSim.Region.Environment.Scenes // action(presence); // } // } + /// /// /// @@ -3187,7 +3235,6 @@ namespace OpenSim.Region.Environment.Scenes } return visualParams; } - #endregion } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Scenes/SceneBase.cs b/OpenSim/Region/Environment/Scenes/SceneBase.cs index 435dc8b41e..d9dc1dadb6 100644 --- a/OpenSim/Region/Environment/Scenes/SceneBase.cs +++ b/OpenSim/Region/Environment/Scenes/SceneBase.cs @@ -40,11 +40,6 @@ namespace OpenSim.Region.Environment.Scenes { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - /// - /// XXX These two methods are very temporary - /// - protected Dictionary capsPaths = new Dictionary(); - #region Events public event restart OnRestart; @@ -55,38 +50,41 @@ namespace OpenSim.Region.Environment.Scenes 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 ITerrainChannel Heightmap; public ILandChannel LandChannel; - private AssetCache m_assetCache; - - protected string m_datastore; 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 { get { return m_eventManager; } } + + protected string m_datastore; + + private uint m_nextLocalId = 8880000; + + private AssetCache m_assetCache; + public AssetCache AssetCache { get { return m_assetCache; } set { m_assetCache = value; } } - - public ClientManager ClientManager - { - get { return m_clientManager; } - } + + protected RegionStatus m_regStatus; public RegionStatus Region_Status { @@ -143,8 +141,6 @@ namespace OpenSim.Region.Environment.Scenes #endregion - #region IScene Members - /// /// /// @@ -159,18 +155,6 @@ namespace OpenSim.Region.Environment.Scenes get { return m_nextLocalId++; } } - public string GetCapsPath(LLUUID agentId) - { - if (capsPaths.ContainsKey(agentId)) - { - return capsPaths[agentId]; - } - - return null; - } - - #endregion - #region admin stuff /// @@ -189,7 +173,6 @@ namespace OpenSim.Region.Environment.Scenes { return false; } - public abstract bool OtherRegionUp(RegionInfo thisRegion); public virtual string GetSimulatorVersion() @@ -212,10 +195,24 @@ namespace OpenSim.Region.Environment.Scenes } 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 + + /// + /// XXX These two methods are very temporary + /// + protected Dictionary capsPaths = new Dictionary(); + public string GetCapsPath(LLUUID agentId) + { + if (capsPaths.ContainsKey(agentId)) + { + return capsPaths[agentId]; + } + + return null; + } } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs index b44847b795..91bbdb7c77 100644 --- a/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs +++ b/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs @@ -43,47 +43,13 @@ namespace OpenSim.Region.Environment.Scenes 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 regionlst); - - #endregion - 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 RegionInfo m_regionInfo; 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 ExpectUserDelegate OnExpectUser; public event ExpectPrimDelegate OnExpectPrim; @@ -93,6 +59,31 @@ namespace OpenSim.Region.Environment.Scenes public event ChildAgentUpdate OnChildAgentUpdate; 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) { m_regionInfo = regionInfos; @@ -108,7 +99,7 @@ namespace OpenSim.Region.Environment.Scenes regionCommsHost.OnAvatarCrossingIntoRegion += AgentCrossing; regionCommsHost.OnCloseAgentConnection += CloseConnection; regionCommsHost.OnRegionUp += newRegionUp; - regionCommsHost.OnChildAgentUpdate += ChildAgentUpdate; + regionCommsHost.OnChildAgentUpdate += ChildAgentUpdate; } else { @@ -131,6 +122,218 @@ namespace OpenSim.Region.Environment.Scenes } } + #region CommsManager Event handlers + + /// + /// + /// + /// + /// + /// + 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); + } + + /// + /// Async compnent for informing client of which neighbours exists + /// + /// + /// This needs to run asynchronesously, as a network timeout may block the thread for a long while + /// + /// + /// + /// + /// + 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 neighbours = + m_commsProvider.GridService.RequestNeighbours(m_regionInfo.RegionLocX, m_regionInfo.RegionLocY); + //IPEndPoint blah = new IPEndPoint(); + + //blah.Address = region.RemotingAddress; + //blah.Port = region.RemotingPort; + } + + /// + /// This informs all neighboring regions about agent "avatar". + /// Calls an asynchronous method to do so.. so it doesn't lag the sim. + /// + public void EnableNeighbourChildAgents(ScenePresence avatar, List lstneighbours) + { + List neighbours = new List(); + + //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; + + } + } + } + } + + /// + /// This informs a single neighboring region about agent "avatar". + /// Calls an asynchronous method to do so.. so it doesn't lag the sim. + /// + public void InformNeighborChildAgent(ScenePresence avatar, RegionInfo region, List 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) { InformNeighbourThatRegionUpDelegate icon = (InformNeighbourThatRegionUpDelegate) iar.AsyncState; @@ -187,6 +390,8 @@ namespace OpenSim.Region.Environment.Scenes //bool val = m_commsProvider.InterRegion.RegionUp(new SearializableRegionInfo(region)); } + public delegate void SendChildAgentDataUpdateDelegate(ChildAgentDataUpdate cAgentData, ScenePresence presence); + /// /// 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. @@ -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. } + } private void SendChildAgentDataUpdateCompleted(IAsyncResult iar) @@ -229,17 +435,20 @@ namespace OpenSim.Region.Environment.Scenes { // This assumes that we know what our neighbors are. SendChildAgentDataUpdateDelegate d = SendChildAgentDataUpdateAsync; - d.BeginInvoke(cAgentData, presence, + d.BeginInvoke(cAgentData,presence, SendChildAgentDataUpdateCompleted, d); } + public delegate void SendCloseChildAgentDelegate( LLUUID agentID, List regionlst); + /// /// This Closes child agents on neighboring regions /// Calls an asynchronous method to do so.. so it doesn't lag the sim. /// private void SendCloseChildAgentAsync(LLUUID agentID, List regionlst) { + foreach (ulong regionHandle in regionlst) { bool regionAccepted = m_commsProvider.InterRegion.TellRegionToCloseChildConnection(regionHandle, agentID); @@ -247,11 +456,14 @@ namespace OpenSim.Region.Environment.Scenes if (regionAccepted) { m_log.Info("[INTERGRID]: Completed sending agent Close agent Request to neighbor"); + } else { 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 // 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) { - SendCloseChildAgentDelegate icon = (SendCloseChildAgentDelegate) iar.AsyncState; + SendCloseChildAgentDelegate icon = (SendCloseChildAgentDelegate)iar.AsyncState; icon.EndInvoke(iar); } @@ -344,28 +556,28 @@ namespace OpenSim.Region.Environment.Scenes // assume local regions are always up destRegionUp = true; } - if (destRegionUp) + if(destRegionUp) { avatar.Close(); - + // 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 // once we reach here... avatar.Scene.RemoveCapsHandler(avatar.UUID); - + m_commsProvider.InterRegion.InformRegionOfChildAgent(regionHandle, agent); m_commsProvider.InterRegion.ExpectAvatarCrossing(regionHandle, avatar.ControllingClient.AgentId, - position, false); + position, false); AgentCircuitData circuitdata = avatar.ControllingClient.RequestClientInfo(); - + // TODO Should construct this behind a method - string capsPath = - "http://" + reg.ExternalHostName + ":" + reg.HttpPort - + "/CAPS/" + circuitdata.CapsPath + "0000/"; - + string capsPath = + "http://" + reg.ExternalHostName + ":" + reg.HttpPort + + "/CAPS/" + circuitdata.CapsPath + "0000/"; + 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), capsPath); avatar.MakeChildAgent(); @@ -375,13 +587,13 @@ namespace OpenSim.Region.Environment.Scenes { KillObject(avatar.LocalId); } - uint newRegionX = (uint) (regionHandle >> 40); - uint newRegionY = (((uint) (regionHandle)) >> 8); - uint oldRegionX = (uint) (m_regionInfo.RegionHandle >> 40); - uint oldRegionY = (((uint) (m_regionInfo.RegionHandle)) >> 8); - if (Util.fast_distance2d((int) (newRegionX - oldRegionX), (int) (newRegionY - oldRegionY)) > 3) + uint newRegionX = (uint)(regionHandle >> 40); + uint newRegionY = (((uint)(regionHandle)) >> 8); + uint oldRegionX = (uint)(m_regionInfo.RegionHandle >> 40); + uint oldRegionY = (((uint)(m_regionInfo.RegionHandle)) >> 8); + if (Util.fast_distance2d((int)(newRegionX - oldRegionX), (int)(newRegionY - oldRegionY)) > 3) { - SendCloseChildAgentConnections(avatar.UUID, avatar.GetKnownRegionList()); + SendCloseChildAgentConnections(avatar.UUID,avatar.GetKnownRegionList()); } } 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) { - m_commsProvider.LogOffUser(userid, regionid, regionhandle, posx, posy, posz); + m_commsProvider.LogOffUser(userid, regionid, regionhandle, posx, posy, posz); } public void ClearUserAgent(LLUUID avatarID) @@ -444,7 +656,7 @@ namespace OpenSim.Region.Environment.Scenes return m_commsProvider.GetUserFriendList(friendlistowner); } - public List RequestNeighbourMapBlocks(int minX, int minY, int maxX, int maxY) + public List RequestNeighbourMapBlocks(int minX, int minY, int maxX, int 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); } - - #region CommsManager Event handlers - - /// - /// - /// - /// - /// - /// - 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); - } - - /// - /// Async compnent for informing client of which neighbours exists - /// - /// - /// This needs to run asynchronesously, as a network timeout may block the thread for a long while - /// - /// - /// - /// - /// - 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 neighbours = - m_commsProvider.GridService.RequestNeighbours(m_regionInfo.RegionLocX, m_regionInfo.RegionLocY); - //IPEndPoint blah = new IPEndPoint(); - - //blah.Address = region.RemotingAddress; - //blah.Port = region.RemotingPort; - } - - /// - /// This informs all neighboring regions about agent "avatar". - /// Calls an asynchronous method to do so.. so it doesn't lag the sim. - /// - public void EnableNeighbourChildAgents(ScenePresence avatar, List lstneighbours) - { - List neighbours = new List(); - - //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; - } - } - } - } - - /// - /// This informs a single neighboring region about agent "avatar". - /// Calls an asynchronous method to do so.. so it doesn't lag the sim. - /// - public void InformNeighborChildAgent(ScenePresence avatar, RegionInfo region, List 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 } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Scenes/SceneEvents.cs b/OpenSim/Region/Environment/Scenes/SceneEvents.cs index 297d796580..002fc5d293 100644 --- a/OpenSim/Region/Environment/Scenes/SceneEvents.cs +++ b/OpenSim/Region/Environment/Scenes/SceneEvents.cs @@ -38,186 +38,236 @@ namespace OpenSim.Region.Environment.Scenes /// 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); - - /// - /// DeregisterCapsEvent is called by Scene when the caps - /// handler for an agent are removed. - /// - 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 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(); - - /// - /// 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. - /// - 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 delegate void ClientMovement(ScenePresence client); + public event ClientMovement OnClientMovement; + public delegate void OnTerrainTickDelegate(); + public event OnTerrainTickDelegate OnTerrainTick; + public delegate void OnBackupDelegate(IRegionDataStore datastore); + public event OnBackupDelegate OnBackup; + public delegate void OnNewClientDelegate(IClientAPI client); + public event OnNewClientDelegate OnNewClient; + public delegate void OnNewPresenceDelegate(ScenePresence presence); + public event OnNewPresenceDelegate OnNewPresence; + public delegate void OnRemovePresenceDelegate(LLUUID agentId); + public event OnRemovePresenceDelegate OnRemovePresence; + public delegate void OnParcelPrimCountUpdateDelegate(); + public event OnParcelPrimCountUpdateDelegate OnParcelPrimCountUpdate; + public delegate void OnParcelPrimCountAddDelegate(SceneObjectGroup obj); + public event OnParcelPrimCountAddDelegate OnParcelPrimCountAdd; + public delegate void OnPluginConsoleDelegate(string[] args); + public event OnPluginConsoleDelegate OnPluginConsole; + public delegate void OnShutdownDelegate(); + 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 ObjectDeGrabDelegate OnObjectDeGrab; public event OnPermissionErrorDelegate OnPermissionError; + public delegate void NewRezScript(uint localID, LLUUID itemID, string script); + public event NewRezScript OnRezScript; + public delegate void RemoveScript(uint localID, LLUUID itemID); + public event RemoveScript OnRemoveScript; + public delegate bool SceneGroupMoved(LLUUID groupID, LLVector3 delta); + public event SceneGroupMoved OnSceneGroupMove; + public delegate void SceneGroupGrabed(LLUUID groupID, LLVector3 offset, LLUUID userID); + public event SceneGroupGrabed OnSceneGroupGrab; + public delegate void LandObjectAdded(ILandObject newParcel); + public event LandObjectAdded OnLandObjectAdded; + public delegate void LandObjectRemoved(LLUUID globalID); + public event LandObjectRemoved OnLandObjectRemoved; + public delegate void AvatarEnteringNewParcel(ScenePresence avatar, int localLandID, LLUUID regionID); + public event AvatarEnteringNewParcel OnAvatarEnteringNewParcel; + public delegate void NewGridInstantMessage(GridInstantMessage message); + public event NewGridInstantMessage OnGridInstantMessageToIMModule; public event NewGridInstantMessage OnGridInstantMessageToFriendsModule; public event NewGridInstantMessage OnGridInstantMessageToGroupsModule; + public delegate void ClientClosed(LLUUID clientID); + public event ClientClosed OnClientClosed; + public delegate void ScriptChangedEvent(uint localID, uint change); + public event ScriptChangedEvent OnScriptChangedEvent; + public delegate void ScriptAtTargetEvent(uint localID, uint handle, LLVector3 targetpos, LLVector3 atpos); + public event ScriptAtTargetEvent OnScriptAtTargetEvent; + public delegate void ScriptNotAtTargetEvent(uint localID); + public event ScriptNotAtTargetEvent OnScriptNotAtTargetEvent; public event OnNewPresenceDelegate OnMakeChildAgent; + public delegate void NewInventoryItemUploadComplete(LLUUID avatarID, LLUUID assetID, string name, int userlevel); + public event NewInventoryItemUploadComplete OnNewInventoryItemUploadComplete; + /// + /// 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. + /// + public delegate void RegisterCapsEvent(LLUUID agentID, Caps caps); public event RegisterCapsEvent OnRegisterCaps; - + /// + /// DeregisterCapsEvent is called by Scene when the caps + /// handler for an agent are removed. + /// + public delegate void DeregisterCapsEvent(LLUUID agentID, Caps caps); 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 LandBuy OnLandBuy; public event LandBuy OnValidateLandBuy; /* 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) { handlerScriptChangedEvent = OnScriptChangedEvent; @@ -293,7 +343,7 @@ namespace OpenSim.Region.Environment.Scenes if (handlerParcelPrimCountUpdate != null) { handlerParcelPrimCountUpdate(); - } + } } public void TriggerMoneyTransfer(Object sender, MoneyTransferArgs e) @@ -442,6 +492,7 @@ namespace OpenSim.Region.Environment.Scenes { 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; 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; if (handlerDeregisterCaps != null) @@ -489,8 +540,7 @@ namespace OpenSim.Region.Environment.Scenes handlerNewInventoryItemUpdateComplete(agentID, AssetID, AssetName, userlevel); } } - - public void TriggerLandBuy(Object sender, LandBuyArgs e) + public void TriggerLandBuy (Object sender, LandBuyArgs e) { handlerLandBuy = OnLandBuy; if (handlerLandBuy != null) @@ -498,7 +548,6 @@ namespace OpenSim.Region.Environment.Scenes handlerLandBuy(sender, e); } } - public void TriggerValidateLandBuy(Object sender, LandBuyArgs e) { handlerValidateLandBuy = OnValidateLandBuy; @@ -507,7 +556,7 @@ namespace OpenSim.Region.Environment.Scenes handlerValidateLandBuy(sender, e); } } - + public void TriggerAtTargetEvent(uint localID, uint handle, LLVector3 targetpos, LLVector3 currentpos) { handlerScriptAtTargetEvent = OnScriptAtTargetEvent; @@ -525,67 +574,5 @@ namespace OpenSim.Region.Environment.Scenes 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 } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Scenes/SceneManager.cs b/OpenSim/Region/Environment/Scenes/SceneManager.cs index 2325ed4975..2dfea2ac0d 100644 --- a/OpenSim/Region/Environment/Scenes/SceneManager.cs +++ b/OpenSim/Region/Environment/Scenes/SceneManager.cs @@ -41,13 +41,10 @@ namespace OpenSim.Region.Environment.Scenes { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private readonly List m_localScenes; - private Scene m_currentScene; + public event RestartSim OnRestartSim; - public SceneManager() - { - m_localScenes = new List(); - } + private readonly List m_localScenes; + private Scene m_currentScene = null; public List Scenes { @@ -74,7 +71,10 @@ namespace OpenSim.Region.Environment.Scenes } } - public event RestartSim OnRestartSim; + public SceneManager() + { + m_localScenes = new List(); + } public void Close() { @@ -180,7 +180,7 @@ namespace OpenSim.Region.Environment.Scenes [Obsolete("TODO: Remove this warning by 0.7")] 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; } @@ -252,8 +252,8 @@ namespace OpenSim.Region.Environment.Scenes 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) { if (scene.RegionInfo.RegionID == regionID) @@ -262,7 +262,7 @@ namespace OpenSim.Region.Environment.Scenes return true; } } - + return false; } @@ -313,7 +313,7 @@ namespace OpenSim.Region.Environment.Scenes { 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)) { scene = mscene; @@ -327,22 +327,22 @@ namespace OpenSim.Region.Environment.Scenes public void SetDebugPacketOnCurrentScene(int newDebug) { ForEachCurrentScene(delegate(Scene scene) + { + List scenePresences = scene.GetScenePresences(); + + foreach (ScenePresence scenePresence in scenePresences) { - List scenePresences = scene.GetScenePresences(); - - foreach (ScenePresence scenePresence in scenePresences) + if (!scenePresence.IsChildAgent) { - if (!scenePresence.IsChildAgent) - { - m_log.ErrorFormat("Packet debug for {0} {1} set to {2}", - scenePresence.Firstname, - scenePresence.Lastname, - newDebug); + m_log.ErrorFormat("Packet debug for {0} {1} set to {2}", + scenePresence.Firstname, + scenePresence.Lastname, + newDebug); - scenePresence.ControllingClient.SetDebug(newDebug); - } + scenePresence.ControllingClient.SetDebug(newDebug); } - }); + } + }); } public List GetCurrentSceneAvatars() @@ -350,17 +350,17 @@ namespace OpenSim.Region.Environment.Scenes List avatars = new List(); ForEachCurrentScene(delegate(Scene scene) - { - List scenePresences = scene.GetScenePresences(); + { + List scenePresences = scene.GetScenePresences(); - foreach (ScenePresence scenePresence in scenePresences) - { - if (!scenePresence.IsChildAgent) - { - avatars.Add(scenePresence); - } - } - }); + foreach (ScenePresence scenePresence in scenePresences) + { + if (!scenePresence.IsChildAgent) + { + avatars.Add(scenePresence); + } + } + }); return avatars; } @@ -381,11 +381,11 @@ namespace OpenSim.Region.Environment.Scenes public void SetCurrentSceneTimePhase(int timePhase) { ForEachCurrentScene(delegate(Scene scene) - { - scene.SetTimePhase( - timePhase) - ; - }); + { + scene.SetTimePhase( + timePhase) + ; + }); } public void ForceCurrentSceneClientUpdate() @@ -453,4 +453,4 @@ namespace OpenSim.Region.Environment.Scenes m_localScenes.ForEach(action); } } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs index d051ed9b6d..824a536076 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs @@ -49,6 +49,7 @@ namespace OpenSim.Region.Environment.Scenes if (part != null) { part.StartScript(itemID); + } else { @@ -56,9 +57,9 @@ namespace OpenSim.Region.Environment.Scenes "[PRIMINVENTORY]: " + "Couldn't find part {0} in object group {1}, {2} to start script with ID {3}", localID, Name, UUID, itemID); - } + } } - + // /// Start a given script. // /// // /// @@ -79,7 +80,7 @@ namespace OpenSim.Region.Environment.Scenes // localID, Name, UUID, itemID); // } // } - + /// /// Start the scripts contained in all the prims in this group. /// @@ -105,7 +106,7 @@ namespace OpenSim.Region.Environment.Scenes } } } - + /// Start a given script. /// /// @@ -125,9 +126,9 @@ namespace OpenSim.Region.Environment.Scenes "[PRIMINVENTORY]: " + "Couldn't find part {0} in object group {1}, {2} to stop script with ID {3}", partID, Name, UUID, itemID); - } - } - + } + } + /// /// /// @@ -170,7 +171,7 @@ namespace OpenSim.Region.Environment.Scenes localID, Name, UUID); } } - + /// /// Add an inventory item to a prim in this group. /// @@ -179,7 +180,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// The item UUID that should be used by the new item. /// - public bool AddInventoryItem(IClientAPI remoteClient, uint localID, + public bool AddInventoryItem(IClientAPI remoteClient, uint localID, InventoryItemBase item, LLUUID copyItemID) { LLUUID newItemId = (copyItemID != LLUUID.Zero) ? copyItemID : item.ID; @@ -188,8 +189,8 @@ namespace OpenSim.Region.Environment.Scenes if (part != null) { TaskInventoryItem taskItem = new TaskInventoryItem(); - - taskItem.ItemID = newItemId; + + taskItem.ItemID = newItemId; taskItem.AssetID = item.AssetID; taskItem.Name = item.Name; taskItem.Description = item.Description; @@ -197,15 +198,15 @@ namespace OpenSim.Region.Environment.Scenes taskItem.CreatorID = item.Creator; taskItem.Type = item.AssetType; taskItem.InvType = item.InvType; - + taskItem.BaseMask = item.BasePermissions; taskItem.OwnerMask = item.CurrentPermissions; // FIXME: ignoring group permissions for now as they aren't stored in item taskItem.EveryoneMask = item.EveryOnePermissions; taskItem.NextOwnerMask = item.NextPermissions; - + part.AddInventoryItem(taskItem); - + return true; } else @@ -218,7 +219,7 @@ namespace OpenSim.Region.Environment.Scenes return false; } - + /// /// Returns an existing inventory item. Returns the original, so any changes will be live. /// @@ -238,11 +239,11 @@ namespace OpenSim.Region.Environment.Scenes "[PRIMINVENTORY]: " + "Couldn't find prim local ID {0} in prim {1}, {2} to get inventory item ID {3}", primID, part.Name, part.UUID, itemID); - } - + } + return null; - } - + } + /// /// Update an existing inventory item. /// @@ -254,8 +255,8 @@ namespace OpenSim.Region.Environment.Scenes SceneObjectPart part = GetChildPart(item.ParentPartID); if (part != null) { - part.UpdateInventoryItem(item); - + part.UpdateInventoryItem(item); + return true; } else @@ -264,22 +265,22 @@ namespace OpenSim.Region.Environment.Scenes "[PRIMINVENTORY]: " + "Couldn't find prim ID {0} to update item {1}, {2}", item.ParentPartID, item.Name, item.ItemID); - } - + } + return false; - } + } public int RemoveInventoryItem(uint localID, LLUUID itemID) { SceneObjectPart part = GetChildPart(localID); if (part != null) - { + { int type = part.RemoveInventoryItem(itemID); - + return type; } - + return -1; - } + } } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs index 1ea2f245aa..5d3979010b 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs @@ -72,7 +72,7 @@ namespace OpenSim.Region.Environment.Scenes object_rez = 4194304 } - internal struct scriptPosTarget + struct scriptPosTarget { public LLVector3 targetPos; public float tolerance; @@ -82,14 +82,14 @@ namespace OpenSim.Region.Environment.Scenes public partial class SceneObjectGroup : EntityBase { - private readonly Dictionary m_targets = new Dictionary(); - private PrimCountTaintedDelegate handlerPrimCountTainted; + private PrimCountTaintedDelegate handlerPrimCountTainted = null; /// /// Signal whether the non-inventory attributes of any prims in the group have changed /// since the group's last persistent backup /// - public bool HasGroupChanged; + public bool HasGroupChanged = false; + private LLVector3 lastPhysGroupPos; @@ -104,8 +104,11 @@ namespace OpenSim.Region.Environment.Scenes protected SceneObjectPart m_rootPart; private Dictionary m_scriptEvents = new Dictionary(); - private bool m_scriptListens_atTarget; - private bool m_scriptListens_notAtTarget; + private Dictionary m_targets = new Dictionary(); + + private bool m_scriptListens_atTarget = false; + private bool m_scriptListens_notAtTarget = false; + #region Properties @@ -116,7 +119,7 @@ namespace OpenSim.Region.Environment.Scenes /// think really there should be a list (or whatever) in each scenepresence /// saying what prim(s) that user has selected. /// - protected bool m_isSelected; + protected bool m_isSelected = false; /// /// @@ -183,6 +186,7 @@ namespace OpenSim.Region.Environment.Scenes string.Format("[SCENE OBJECT GROUP]: Object {0} has no root part.", m_uuid)); } + return m_rootPart.GroupPosition; } @@ -202,7 +206,7 @@ namespace OpenSim.Region.Environment.Scenes part.GroupPosition = val; } } - + //if (m_rootPart.PhysActor != null) //{ //m_rootPart.PhysActor.Position = @@ -212,7 +216,7 @@ namespace OpenSim.Region.Environment.Scenes //} } } - + public override uint LocalId { get @@ -511,11 +515,10 @@ namespace OpenSim.Region.Environment.Scenes m_scene.EventManager.OnBackup += ProcessBackup; } } - public LLVector3 GroupScale() { - LLVector3 minScale = new LLVector3(Constants.RegionSize, Constants.RegionSize, Constants.RegionSize); - LLVector3 maxScale = new LLVector3(0f, 0f, 0f); + LLVector3 minScale = new LLVector3(Constants.RegionSize,Constants.RegionSize,Constants.RegionSize); + LLVector3 maxScale = new LLVector3(0f,0f,0f); LLVector3 finalScale = new LLVector3(0.5f, 0.5f, 0.5f); lock (m_parts) @@ -538,8 +541,8 @@ namespace OpenSim.Region.Environment.Scenes finalScale.Y = (minScale.Y > maxScale.Y) ? minScale.Y : maxScale.Y; finalScale.Z = (minScale.Z > maxScale.Z) ? minScale.Z : maxScale.Z; return finalScale; - } + } public EntityIntersection TestIntersection(Ray hRay, bool frontFacesOnly, bool faceCenters) { // 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. //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.. // We might (and probably will) be checking for prim creation from other sims @@ -681,11 +684,12 @@ namespace OpenSim.Region.Environment.Scenes DetachFromBackup(this); m_rootPart.m_attachedAvatar = agentID; - + if (m_rootPart.PhysActor != null) { m_scene.PhysicsScene.RemovePrim(m_rootPart.PhysActor); m_rootPart.PhysActor = null; + } AbsolutePosition = AttachOffset; @@ -705,28 +709,27 @@ namespace OpenSim.Region.Environment.Scenes m_rootPart.ScheduleFullUpdate(); } } - public byte GetAttachmentPoint() { if (m_rootPart != null) { return m_rootPart.Shape.State; } - return 0; + return (byte)0; } public void ClearPartAttachmentData() { foreach (SceneObjectPart part in m_parts.Values) { - part.SetAttachmentPoint(0); + part.SetAttachmentPoint((Byte)0); } } public void DetachToGround() { 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) { detachedpos = avatar.AbsolutePosition; @@ -735,14 +738,14 @@ namespace OpenSim.Region.Environment.Scenes AbsolutePosition = detachedpos; m_rootPart.m_attachedAvatar = LLUUID.Zero; m_rootPart.SetParentLocalId(0); - m_rootPart.SetAttachmentPoint(0); + m_rootPart.SetAttachmentPoint((byte)0); m_rootPart.m_IsAttachment = false; m_rootPart.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), m_scene.m_physicalPrim); AttachToBackup(); m_rootPart.ScheduleFullUpdate(); m_rootPart.ClearUndoState(); + } - public void DetachToInventoryPrep() { ScenePresence avatar = m_scene.GetScenePresence(m_rootPart.m_attachedAvatar); @@ -752,7 +755,7 @@ namespace OpenSim.Region.Environment.Scenes //detachedpos = avatar.AbsolutePosition; avatar.RemoveAttachment(this); } - + m_rootPart.m_attachedAvatar = LLUUID.Zero; m_rootPart.SetParentLocalId(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); //AttachToBackup(); //m_rootPart.ScheduleFullUpdate(); + } - /// /// /// @@ -823,6 +826,7 @@ namespace OpenSim.Region.Environment.Scenes try { m_parts.Add(part.UUID, part); + } catch (Exception e) { @@ -843,6 +847,7 @@ namespace OpenSim.Region.Environment.Scenes if (part.UUID != m_rootPart.UUID) { part.ParentID = m_rootPart.LocalId; + } } } @@ -855,10 +860,10 @@ namespace OpenSim.Region.Environment.Scenes foreach (SceneObjectPart part in m_parts.Values) { part.UUID = LLUUID.Random(); + } } } - // helper provided for parts. public int GetSceneMaxUndo() { @@ -866,7 +871,6 @@ namespace OpenSim.Region.Environment.Scenes return m_scene.MaxUndoCount; return 5; } - public void ResetChildPrimPhysicsPositions() { AbsolutePosition = AbsolutePosition; @@ -893,6 +897,7 @@ namespace OpenSim.Region.Environment.Scenes { SceneObjectPart part = GetChildPart(localId); OnGrabPart(part, offsetPos, remoteClient); + } } @@ -900,6 +905,7 @@ namespace OpenSim.Region.Environment.Scenes { part.StoreUndoState(); part.OnGrab(offsetPos, remoteClient); + } public virtual void OnGrabGroup(LLVector3 offsetPos, IClientAPI remoteClient) @@ -963,19 +969,19 @@ namespace OpenSim.Region.Environment.Scenes public void aggregateScriptEvents() { - uint objectflagupdate = RootPart.GetEffectiveObjectFlags(); + uint objectflagupdate=(uint)RootPart.GetEffectiveObjectFlags(); - scriptEvents aggregateScriptEvents = 0; + scriptEvents aggregateScriptEvents=0; lock (m_parts) { foreach (SceneObjectPart part in m_parts.Values) { - if (part == null) - continue; - if (part != RootPart) - part.ObjectFlags = objectflagupdate; - aggregateScriptEvents |= part.m_aggregateScriptEvents; + if(part == null) + continue; + if(part != RootPart) + part.ObjectFlags = objectflagupdate; + 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 atTargets = new Dictionary(); - 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 /// @@ -1489,8 +1362,9 @@ namespace OpenSim.Region.Environment.Scenes { m_parts.Add(newPart.UUID, newPart); } - + SetPartAsNonRoot(newPart); + } /// @@ -1560,30 +1434,32 @@ namespace OpenSim.Region.Environment.Scenes /// public override void Update() { + lock (m_parts) { //if (m_rootPart.m_IsAttachment) //{ - //foreach (SceneObjectPart part in m_parts.Values) - //{ - //part.SendScheduledUpdates(); + //foreach (SceneObjectPart part in m_parts.Values) + //{ + //part.SendScheduledUpdates(); + //} + //return; //} - //return; - //} - + if (Util.GetDistanceTo(lastPhysGroupPos, AbsolutePosition) > 0.02) { m_rootPart.UpdateFlag = 1; lastPhysGroupPos = AbsolutePosition; } - //foreach (SceneObjectPart part in m_parts.Values) - //{ - //if (part.UpdateFlag == 0) part.UpdateFlag = 1; - //} - - - checkAtTargets(); + //foreach (SceneObjectPart part in m_parts.Values) + //{ + //if (part.UpdateFlag == 0) part.UpdateFlag = 1; + //} + + + checkAtTargets(); + if ((Math.Abs(lastPhysGroupRot.W - GroupRotation.W) > 0.1) || (Math.Abs(lastPhysGroupRot.X - GroupRotation.X) > 0.1) @@ -1887,7 +1763,7 @@ namespace OpenSim.Region.Environment.Scenes public void DelinkFromGroup(uint partID) { SceneObjectPart linkPart = GetChildPart(partID); - + if (null != linkPart) { linkPart.ClearUndoState(); @@ -2072,10 +1948,10 @@ namespace OpenSim.Region.Environment.Scenes proper.ObjectData[0].FromTaskID = LLUUID.Zero; proper.ObjectData[0].GroupID = LLUUID.Zero; proper.ObjectData[0].InventorySerial = (short) m_rootPart.InventorySerial; - + proper.ObjectData[0].LastOwnerID = m_rootPart.LastOwnerID; // proper.ObjectData[0].LastOwnerID = LLUUID.Zero; - + proper.ObjectData[0].ObjectID = UUID; proper.ObjectData[0].OwnerID = m_rootPart.OwnerID; proper.ObjectData[0].TouchName = Helpers.StringToField(m_rootPart.TouchName); @@ -2515,5 +2391,140 @@ namespace OpenSim.Region.Environment.Scenes } #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 atTargets = new Dictionary(); + 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]); + } + } + } + } + } } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs index c8a8f95903..0215cecd6b 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs @@ -41,29 +41,13 @@ namespace OpenSim.Region.Environment.Scenes { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private readonly string m_inventoryFileName = String.Empty; - - /// - /// Tracks whether inventory has changed since the last persistent backup - /// - private bool HasInventoryChanged; + private string m_inventoryFileName = String.Empty; /// /// The inventory folder for this prim /// private LLUUID m_folderID = LLUUID.Zero; - /// - /// Serial count for inventory file , used to tell if inventory has changed - /// no need for this to be part of Database backup - /// - protected uint m_inventorySerial; - - /// - /// Holds in memory prim inventory - /// - protected TaskInventoryDictionary m_taskInventory = new TaskInventoryDictionary(); - /// /// Exposing this is not particularly good, but it's one of the least evils at the moment to see /// folder id from prim inventory item data, since it's not (yet) actually stored with the prim. @@ -74,18 +58,34 @@ namespace OpenSim.Region.Environment.Scenes set { m_folderID = value; } } + /// + /// Serial count for inventory file , used to tell if inventory has changed + /// no need for this to be part of Database backup + /// + protected uint m_inventorySerial = 0; + public uint InventorySerial { get { return m_inventorySerial; } set { m_inventorySerial = value; } } + /// + /// Holds in memory prim inventory + /// + protected TaskInventoryDictionary m_taskInventory = new TaskInventoryDictionary(); + public TaskInventoryDictionary TaskInventory { get { return m_taskInventory; } set { m_taskInventory = value; } } + /// + /// Tracks whether inventory has changed since the last persistent backup + /// + private bool HasInventoryChanged; + /// /// Reset LLUUIDs for all the items in the prim's inventory. This involves either generating /// new ones or setting existing UUIDs to the correct parent UUIDs. @@ -96,14 +96,14 @@ namespace OpenSim.Region.Environment.Scenes public void ResetInventoryIDs() { lock (TaskInventory) - { + { if (0 == TaskInventory.Count) { - return; + return; } - - HasInventoryChanged = true; - + + HasInventoryChanged = true; + IList items = new List(TaskInventory.Values); TaskInventory.Clear(); @@ -132,9 +132,9 @@ namespace OpenSim.Region.Environment.Scenes if (ownerId != item.OwnerID) { item.LastOwnerID = item.OwnerID; - item.OwnerID = ownerId; - item.BaseMask = item.NextOwnerMask & (uint) PermissionMask.All; - item.OwnerMask = item.NextOwnerMask & (uint) PermissionMask.All; + item.OwnerID = ownerId; + item.BaseMask = item.NextOwnerMask & (uint)PermissionMask.All; + item.OwnerMask = item.NextOwnerMask & (uint)PermissionMask.All; } } } @@ -194,22 +194,22 @@ namespace OpenSim.Region.Environment.Scenes AssetCache cache = m_parentGroup.Scene.AssetCache; cache.GetAsset(item.AssetID, delegate(LLUUID assetID, AssetBase asset) - { - if (null == asset) - { - m_log.ErrorFormat( - "[PRIMINVENTORY]: " + - "Couldn't start script {0}, {1} since asset ID {2} could not be found", - item.Name, item.ItemID, item.AssetID); - } - else - { - string script = Helpers.FieldToUTF8String(asset.Data); - m_parentGroup.Scene.EventManager.TriggerRezScript(LocalId, item.ItemID, script); - m_parentGroup.AddActiveScriptCount(1); - ScheduleFullUpdate(); - } - }, false); + { + if (null == asset) + { + m_log.ErrorFormat( + "[PRIMINVENTORY]: " + + "Couldn't start script {0}, {1} since asset ID {2} could not be found", + item.Name, item.ItemID, item.AssetID); + } + else + { + string script = Helpers.FieldToUTF8String(asset.Data); + m_parentGroup.Scene.EventManager.TriggerRezScript(LocalId,item.ItemID,script); + m_parentGroup.AddActiveScriptCount(1); + ScheduleFullUpdate(); + } + }, false); } } @@ -226,6 +226,7 @@ namespace OpenSim.Region.Environment.Scenes if (m_taskInventory.ContainsKey(itemId)) { StartScript(m_taskInventory[itemId]); + } else { @@ -262,7 +263,7 @@ namespace OpenSim.Region.Environment.Scenes { foreach (TaskInventoryItem item in m_taskInventory.Values) { - if (item.Name == name) + if(item.Name == name) return true; } return false; @@ -270,14 +271,14 @@ namespace OpenSim.Region.Environment.Scenes private string FindAvailableInventoryName(string name) { - if (!InventoryContainsName(name)) + if(!InventoryContainsName(name)) return name; - int suffix = 1; - while (suffix < 256) + int suffix=1; + while(suffix < 256) { - string tryName = String.Format("{0} {1}", name, suffix); - if (!InventoryContainsName(tryName)) + string tryName=String.Format("{0} {1}", name, suffix); + if(!InventoryContainsName(tryName)) return tryName; suffix++; } @@ -294,11 +295,11 @@ namespace OpenSim.Region.Environment.Scenes item.CreationDate = 1000; item.ParentPartID = UUID; - string name = FindAvailableInventoryName(item.Name); - if (name == String.Empty) + string name=FindAvailableInventoryName(item.Name); + if(name == String.Empty) return; - item.Name = name; + item.Name=name; lock (m_taskInventory) { @@ -346,7 +347,7 @@ namespace OpenSim.Region.Environment.Scenes // m_log.DebugFormat( // "[PRIM INVENTORY]: Retrieved task inventory item {0}, {1} from prim {2}, {3}", // m_taskInventory[itemID].Name, itemID, Name, UUID); - + return m_taskInventory[itemID]; } else @@ -427,6 +428,7 @@ namespace OpenSim.Region.Environment.Scenes scriptcount++; } } + } if (scriptcount <= 0) { @@ -455,14 +457,14 @@ namespace OpenSim.Region.Environment.Scenes /// /// public bool GetInventoryFileName(IClientAPI client, uint localID) - { + { // m_log.DebugFormat( // "[PRIM INVENTORY]: Received request from client {0} for inventory file name of {1}, {2}", // client.AgentId, Name, UUID); - + if (m_inventorySerial > 0) { - client.SendTaskInventory(m_uuid, (short) m_inventorySerial, + client.SendTaskInventory(m_uuid, (short)m_inventorySerial, Helpers.StringToField(m_inventoryFileName)); return true; } @@ -478,9 +480,9 @@ namespace OpenSim.Region.Environment.Scenes /// /// public void RequestInventoryFile(IXfer xferManager) - { + { byte[] fileData = new byte[0]; - + // Confusingly, the folder item has to be the object id, while the 'parent id' has to be zero. This matches // what appears to happen in the Second Life protocol. If this isn't the case. then various functionality // isn't available (such as drag from prim inventory to agent inventory) @@ -491,53 +493,53 @@ namespace OpenSim.Region.Environment.Scenes foreach (TaskInventoryItem item in m_taskInventory.Values) { invString.AddItemStart(); - invString.AddNameValueLine("item_id", item.ItemID.ToString()); + invString.AddNameValueLine("item_id", item.ItemID.ToString()); invString.AddNameValueLine("parent_id", m_folderID.ToString()); invString.AddPermissionsStart(); - + // FIXME: Temporary until permissions are properly sorted. invString.AddNameValueLine("base_mask", "7fffffff"); invString.AddNameValueLine("owner_mask", "7fffffff"); invString.AddNameValueLine("group_mask", "7fffffff"); invString.AddNameValueLine("everyone_mask", "7fffffff"); invString.AddNameValueLine("next_owner_mask", "7fffffff"); - + // invString.AddNameValueLine("group_mask", "00000000"); // invString.AddNameValueLine("everyone_mask", "00000000"); // invString.AddNameValueLine("next_owner_mask", "00086000"); - + // invString.AddNameValueLine("base_mask", Helpers.UIntToHexString(item.BaseMask)); // invString.AddNameValueLine("owner_mask", Helpers.UIntToHexString(item.OwnerMask)); // invString.AddNameValueLine("group_mask", Helpers.UIntToHexString(item.GroupMask)); // invString.AddNameValueLine("everyone_mask", Helpers.UIntToHexString(item.EveryoneMask)); // invString.AddNameValueLine("next_owner_mask", Helpers.UIntToHexString(item.NextOwnerMask)); - + invString.AddNameValueLine("creator_id", item.CreatorID.ToString()); invString.AddNameValueLine("owner_id", item.OwnerID.ToString()); - + invString.AddNameValueLine("last_owner_id", item.LastOwnerID.ToString()); // invString.AddNameValueLine("last_owner_id", item.OwnerID.ToString()); - + invString.AddNameValueLine("group_id", item.GroupID.ToString()); invString.AddSectionEnd(); - + invString.AddNameValueLine("asset_id", item.AssetID.ToString()); invString.AddNameValueLine("type", TaskInventoryItem.Types[item.Type]); invString.AddNameValueLine("inv_type", TaskInventoryItem.InvTypes[item.InvType]); invString.AddNameValueLine("flags", "00000000"); - + invString.AddSaleStart(); invString.AddNameValueLine("sale_type", "not"); invString.AddNameValueLine("sale_price", "0"); invString.AddSectionEnd(); - + invString.AddNameValueLine("name", item.Name + "|"); invString.AddNameValueLine("desc", item.Description + "|"); - + invString.AddNameValueLine("creation_date", item.CreationDate.ToString()); // invString.AddNameValueLine("creation_date", "1209151453"); - + invString.AddSectionEnd(); } } @@ -569,8 +571,6 @@ namespace OpenSim.Region.Environment.Scenes } } - #region Nested type: InventoryStringBuilder - public class InventoryStringBuilder { public string BuildString = String.Empty; @@ -596,13 +596,13 @@ namespace OpenSim.Region.Environment.Scenes BuildString += "\tpermissions 0\n"; AddSectionStart(); } - + public void AddSaleStart() { BuildString += "\tsale_info\t0\n"; AddSectionStart(); - } - + } + protected void AddSectionStart() { BuildString += "\t{\n"; @@ -629,7 +629,5 @@ namespace OpenSim.Region.Environment.Scenes { } } - - #endregion } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs index 3a9e1c2bca..3dbd809a08 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs @@ -56,7 +56,6 @@ namespace OpenSim.Region.Environment.Scenes Something5 = 64, Something6 = 128 } - [Flags] public enum Changed : uint { @@ -69,7 +68,6 @@ namespace OpenSim.Region.Environment.Scenes ALLOWED_DROP = 64, OWNER = 128 } - [Flags] public enum TextureAnimFlags : byte { @@ -83,36 +81,70 @@ namespace OpenSim.Region.Environment.Scenes SCALE = 0x40 } - + [Serializable] public partial class SceneObjectPart : IScriptHost, ISerializable { - public uint Category; - public Int32 CreationDate; - [XmlIgnore] public LLUUID fromAssetID = LLUUID.Zero; - public LLUUID GroupID; + + [XmlIgnore] public PhysicsActor PhysActor = null; + public LLUUID LastOwnerID; - + public LLUUID OwnerID; + public LLUUID GroupID; + public int OwnershipCost; + public byte ObjectSaleType; + public int SalePrice; + public uint Category; + // TODO: This needs to be persisted in next XML version update! + [XmlIgnore] public int[] PayPrice = {-2,-2,-2,-2,-2}; + [XmlIgnore] private Dictionary m_scriptEvents = new Dictionary(); + [XmlIgnore] public scriptEvents m_aggregateScriptEvents=0; [XmlIgnore] private LLObject.ObjectFlags LocalFlags = LLObject.ObjectFlags.None; - [XmlIgnore] public scriptEvents m_aggregateScriptEvents = 0; + [XmlIgnore] public bool m_IsAttachment = false; + [XmlIgnore] public uint m_attachmentPoint = (byte)0; [XmlIgnore] public LLUUID m_attachedAvatar = LLUUID.Zero; [XmlIgnore] public LLVector3 m_attachedPos = LLVector3.Zero; - [XmlIgnore] public uint m_attachmentPoint = 0; - [XmlIgnore] public bool m_IsAttachment; + [XmlIgnore] public LLUUID fromAssetID = LLUUID.Zero; + + [XmlIgnore] public bool m_undoing = false; + + public Int32 CreationDate; + public uint ParentID = 0; private PhysicsVector m_lastRotationalVelocity = PhysicsVector.Zero; - protected SceneObjectGroup m_parentGroup; + private Vector3 m_sitTargetPosition = new Vector3(0, 0, 0); + private Quaternion m_sitTargetOrientation = new Quaternion(0, 0, 0, 1); + public LLUUID m_sitTargetAvatar = LLUUID.Zero; + [XmlIgnore] public PhysicsVector m_rotationAxis = new PhysicsVector(1f,1f,1f); + + #region Permissions + + public uint BaseMask = (uint)PermissionMask.All; + public uint OwnerMask = (uint)PermissionMask.All; + public uint GroupMask = (uint)PermissionMask.None; + public uint EveryoneMask = (uint)PermissionMask.None; + public uint NextOwnerMask = (uint)PermissionMask.All; + + private UndoStack m_undo = new UndoStack(5); + + public LLObject.ObjectFlags Flags = LLObject.ObjectFlags.None; + + public uint ObjectFlags + { + get { return (uint)Flags; } + set { Flags = (LLObject.ObjectFlags)value; } + } + + #endregion protected byte[] m_particleSystem = new byte[0]; - [XmlIgnore] public PhysicsVector m_rotationAxis = new PhysicsVector(1f, 1f, 1f); - [XmlIgnore] private Dictionary m_scriptEvents = new Dictionary(); - public LLUUID m_sitTargetAvatar = LLUUID.Zero; - private Quaternion m_sitTargetOrientation = new Quaternion(0, 0, 0, 1); - private Vector3 m_sitTargetPosition = new Vector3(0, 0, 0); - [XmlIgnore] public bool m_undoing; + + [XmlIgnore] public uint TimeStampFull = 0; + [XmlIgnore] public uint TimeStampTerse = 0; + [XmlIgnore] public uint TimeStampLastActivity = 0; // Will be used for AutoReturn /// /// Only used internally to schedule client updates. @@ -124,44 +156,24 @@ namespace OpenSim.Region.Environment.Scenes /// private byte m_updateFlag; - public byte ObjectSaleType; - public LLUUID OwnerID; - public int OwnershipCost; - public uint ParentID; - [XmlIgnore] public int[] PayPrice = {-2, -2, -2, -2, -2}; - [XmlIgnore] public PhysicsActor PhysActor; - public int SalePrice; - - [XmlIgnore] public uint TimeStampFull; - [XmlIgnore] public uint TimeStampLastActivity; // Will be used for AutoReturn - [XmlIgnore] public uint TimeStampTerse; - #region Properties - + public LLUUID CreatorID; - protected LLVector3 m_acceleration; - protected LLVector3 m_angularVelocity; - private byte m_clickAction; - private Color m_color = Color.Black; - private string m_description = String.Empty; - protected LLVector3 m_groupPosition; - private int m_linkNum; + + public LLUUID ObjectCreator + { + get { return CreatorID; } + } + + protected LLUUID m_uuid; + + public LLUUID UUID + { + get { return m_uuid; } + set { m_uuid = value; } + } protected uint m_localId; - protected LLObject.MaterialType m_material = 0; - - protected string m_name; - protected LLVector3 m_offsetPosition; - protected ulong m_regionHandle; - protected LLVector3 m_rotationalvelocity; - protected LLQuaternion m_rotationOffset; - protected PrimitiveBaseShape m_shape; - private string m_sitName = String.Empty; - private string m_text = String.Empty; - private byte[] m_TextureAnimation; - private string m_touchName = String.Empty; - protected LLUUID m_uuid; - protected LLVector3 m_velocity; public uint LocalId { @@ -169,23 +181,145 @@ namespace OpenSim.Region.Environment.Scenes set { m_localId = value; } } - public scriptEvents ScriptEvents + protected string m_name; + + public virtual string Name { - get { return m_aggregateScriptEvents; } + get { return m_name; } + set { m_name = value; } } + public scriptEvents ScriptEvents + { + get { return m_aggregateScriptEvents; } + } + + protected LLObject.MaterialType m_material = 0; + public byte Material { get { return (byte) m_material; } set { m_material = (LLObject.MaterialType) value; } } + protected ulong m_regionHandle; + public ulong RegionHandle { get { return m_regionHandle; } set { m_regionHandle = value; } } + public uint GetEffectiveObjectFlags() + { + LLObject.ObjectFlags f=Flags; + if(m_parentGroup == null || m_parentGroup.RootPart == this) + f &= ~(LLObject.ObjectFlags.Touch | LLObject.ObjectFlags.Money); + + return (uint)Flags | (uint)LocalFlags; + } + + //unkown if this will be kept, added as a way of removing the group position from the group class + protected LLVector3 m_groupPosition; + + /// + /// Method for a prim to get it's world position from the group. + /// Remember, the Group Position simply gives the position of the group itself + /// + /// A Linked Child Prim objects position in world + public LLVector3 GetWorldPosition() + { + + Quaternion parentRot = new Quaternion( + ParentGroup.RootPart.RotationOffset.W, + ParentGroup.RootPart.RotationOffset.X, + ParentGroup.RootPart.RotationOffset.Y, + ParentGroup.RootPart.RotationOffset.Z); + + Vector3 axPos + = new Vector3( + OffsetPosition.X, + OffsetPosition.Y, + OffsetPosition.Z); + + axPos = parentRot * axPos; + LLVector3 translationOffsetPosition = new LLVector3(axPos.x, axPos.y, axPos.z); + return GroupPosition + translationOffsetPosition; + + //return (new LLVector3(axiomPos.x, axiomPos.y, axiomPos.z) + AbsolutePosition); + } + + /// + /// Gets the rotation of this prim offset by the group rotation + /// + /// + public LLQuaternion GetWorldRotation() + { + + Quaternion newRot; + + if (this.LinkNum == 0) + { + newRot = new Quaternion(RotationOffset.W,RotationOffset.X,RotationOffset.Y,RotationOffset.Z); + + } + else + { + Quaternion parentRot = new Quaternion( + ParentGroup.RootPart.RotationOffset.W, + ParentGroup.RootPart.RotationOffset.X, + ParentGroup.RootPart.RotationOffset.Y, + ParentGroup.RootPart.RotationOffset.Z); + + Quaternion oldRot + = new Quaternion( + RotationOffset.W, + RotationOffset.X, + RotationOffset.Y, + RotationOffset.Z); + + newRot = parentRot * oldRot; + } + return new LLQuaternion(newRot.x, newRot.y, newRot.z, newRot.w); + + //return new LLQuaternion(axiomPartRotation.x, axiomPartRotation.y, axiomPartRotation.z, axiomPartRotation.w); + + } + + public void StoreUndoState() + { + if (!m_undoing) + { + if (m_parentGroup != null) + { + if (m_undo.Count > 0) + { + UndoState last = m_undo.Peek(); + if (last != null) + { + if (last.Compare(this)) + return; + } + } + + + if (m_parentGroup.GetSceneMaxUndo() > 0) + { + UndoState nUndo = new UndoState(this); + + m_undo.Push(nUndo); + + } + } + } + } + + public void ClearUndoState() + { + m_undo.Clear(); + StoreUndoState(); + } + public LLVector3 GroupPosition { get @@ -218,13 +352,16 @@ namespace OpenSim.Region.Environment.Scenes { try { + // Root prim actually goes at Position if (ParentID == 0) { PhysActor.Position = new PhysicsVector(value.X, value.Y, value.Z); + } else { + // To move the child prim in respect to the group position and rotation we have to calculate LLVector3 resultingposition = GetWorldPosition(); @@ -232,7 +369,7 @@ namespace OpenSim.Region.Environment.Scenes LLQuaternion resultingrot = GetWorldRotation(); PhysActor.Orientation = new Quaternion(resultingrot.W, resultingrot.X, resultingrot.Y, resultingrot.Z); } - + // Tell the physics engines that this prim changed. m_parentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(PhysActor); } @@ -241,9 +378,14 @@ namespace OpenSim.Region.Environment.Scenes Console.WriteLine(e.Message); } } + } } + private byte[] m_TextureAnimation; + + protected LLVector3 m_offsetPosition; + public LLVector3 OffsetPosition { get { return m_offsetPosition; } @@ -251,19 +393,31 @@ namespace OpenSim.Region.Environment.Scenes { StoreUndoState(); m_offsetPosition = value; - try - { - // Hack to get the child prim to update world positions in the physics engine - ParentGroup.ResetChildPrimPhysicsPositions(); - } - catch (NullReferenceException) - { - // Ignore, and skip over. - } - //m_log.Info("[PART]: OFFSET:" + m_offsetPosition.ToString()); + try + { + // Hack to get the child prim to update world positions in the physics engine + ParentGroup.ResetChildPrimPhysicsPositions(); + + } + catch (NullReferenceException) + { + // Ignore, and skip over. + } + //m_log.Info("[PART]: OFFSET:" + m_offsetPosition.ToString()); } } + public LLVector3 AbsolutePosition + { + get { + if (m_IsAttachment) + return GroupPosition; + + return m_offsetPosition + m_groupPosition; } + } + + protected LLQuaternion m_rotationOffset; + public LLQuaternion RotationOffset { get @@ -312,9 +466,13 @@ namespace OpenSim.Region.Environment.Scenes Console.WriteLine(ex.Message); } } + } } + protected LLVector3 m_velocity; + protected LLVector3 m_rotationalvelocity; + /// public LLVector3 Velocity { @@ -335,8 +493,8 @@ namespace OpenSim.Region.Environment.Scenes return m_velocity; } - set - { + set { + m_velocity = value; if (PhysActor != null) { @@ -346,6 +504,7 @@ namespace OpenSim.Region.Environment.Scenes m_parentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(PhysActor); } } + } } @@ -360,7 +519,7 @@ namespace OpenSim.Region.Environment.Scenes { if (PhysActor.IsPhysical) { - m_rotationalvelocity.FromBytes(PhysActor.RotationalVelocity.GetBytes(), 0); + m_rotationalvelocity.FromBytes(PhysActor.RotationalVelocity.GetBytes(),0); } } @@ -370,6 +529,8 @@ namespace OpenSim.Region.Environment.Scenes } + protected LLVector3 m_angularVelocity; + /// public LLVector3 AngularVelocity { @@ -377,6 +538,8 @@ namespace OpenSim.Region.Environment.Scenes set { m_angularVelocity = value; } } + protected LLVector3 m_acceleration; + /// public LLVector3 Acceleration { @@ -384,6 +547,16 @@ namespace OpenSim.Region.Environment.Scenes set { m_acceleration = value; } } + private string m_description = String.Empty; + + public string Description + { + get { return m_description; } + set { m_description = value; } + } + + private Color m_color = Color.Black; + public Color Color { get { return m_color; } @@ -391,7 +564,7 @@ namespace OpenSim.Region.Environment.Scenes { m_color = value; TriggerScriptChangedEvent(Changed.COLOR); - + /* ScheduleFullUpdate() need not be called b/c after * setting the color, the text will be set, so then * ScheduleFullUpdate() will be called. */ @@ -399,6 +572,8 @@ namespace OpenSim.Region.Environment.Scenes } } + private string m_text = String.Empty; + public Vector3 SitTargetPosition { get { return m_sitTargetPosition; } @@ -412,93 +587,13 @@ namespace OpenSim.Region.Environment.Scenes public string Text { get { return m_text; } - set { m_text = value; } - } - - public int LinkNum - { - get { return m_linkNum; } set { - m_linkNum = value; - TriggerScriptChangedEvent(Changed.LINK); + m_text = value; } } - public byte ClickAction - { - get { return m_clickAction; } - set { m_clickAction = value; } - } - - public PrimitiveBaseShape Shape - { - get { return m_shape; } - set - { - m_shape = value; - TriggerScriptChangedEvent(Changed.SHAPE); - } - } - - public LLVector3 Scale - { - get { return m_shape.Scale; } - set - { - StoreUndoState(); - m_shape.Scale = value; - TriggerScriptChangedEvent(Changed.SCALE); - } - } - - public bool Stopped - { - get - { - double threshold = 0.02; - return (Math.Abs(Velocity.X) < threshold && - Math.Abs(Velocity.Y) < threshold && - Math.Abs(Velocity.Z) < threshold && - Math.Abs(AngularVelocity.X) < threshold && - Math.Abs(AngularVelocity.Y) < threshold && - Math.Abs(AngularVelocity.Z) < threshold); - } - } - - public LLUUID ObjectCreator - { - get { return CreatorID; } - } - - public LLUUID UUID - { - get { return m_uuid; } - set { m_uuid = value; } - } - - public virtual string Name - { - get { return m_name; } - set { m_name = value; } - } - - public LLVector3 AbsolutePosition - { - get - { - if (m_IsAttachment) - return GroupPosition; - - return m_offsetPosition + m_groupPosition; - } - } - - public string Description - { - get { return m_description; } - set { m_description = value; } - } + private string m_sitName = String.Empty; public string SitName { @@ -506,114 +601,40 @@ namespace OpenSim.Region.Environment.Scenes set { m_sitName = value; } } + private string m_touchName = String.Empty; + public string TouchName { get { return m_touchName; } set { m_touchName = value; } } - public uint GetEffectiveObjectFlags() + private int m_linkNum = 0; + + public int LinkNum { - LLObject.ObjectFlags f = Flags; - if (m_parentGroup == null || m_parentGroup.RootPart == this) - f &= ~(LLObject.ObjectFlags.Touch | LLObject.ObjectFlags.Money); - - return (uint) Flags | (uint) LocalFlags; - } - - /// - /// Method for a prim to get it's world position from the group. - /// Remember, the Group Position simply gives the position of the group itself - /// - /// A Linked Child Prim objects position in world - public LLVector3 GetWorldPosition() - { - Quaternion parentRot = new Quaternion( - ParentGroup.RootPart.RotationOffset.W, - ParentGroup.RootPart.RotationOffset.X, - ParentGroup.RootPart.RotationOffset.Y, - ParentGroup.RootPart.RotationOffset.Z); - - Vector3 axPos - = new Vector3( - OffsetPosition.X, - OffsetPosition.Y, - OffsetPosition.Z); - - axPos = parentRot * axPos; - LLVector3 translationOffsetPosition = new LLVector3(axPos.x, axPos.y, axPos.z); - return GroupPosition + translationOffsetPosition; - - //return (new LLVector3(axiomPos.x, axiomPos.y, axiomPos.z) + AbsolutePosition); - } - - /// - /// Gets the rotation of this prim offset by the group rotation - /// - /// - public LLQuaternion GetWorldRotation() - { - Quaternion newRot; - - if (LinkNum == 0) - { - newRot = new Quaternion(RotationOffset.W, RotationOffset.X, RotationOffset.Y, RotationOffset.Z); - } - else - { - Quaternion parentRot = new Quaternion( - ParentGroup.RootPart.RotationOffset.W, - ParentGroup.RootPart.RotationOffset.X, - ParentGroup.RootPart.RotationOffset.Y, - ParentGroup.RootPart.RotationOffset.Z); - - Quaternion oldRot - = new Quaternion( - RotationOffset.W, - RotationOffset.X, - RotationOffset.Y, - RotationOffset.Z); - - newRot = parentRot * oldRot; - } - return new LLQuaternion(newRot.x, newRot.y, newRot.z, newRot.w); - - //return new LLQuaternion(axiomPartRotation.x, axiomPartRotation.y, axiomPartRotation.z, axiomPartRotation.w); - } - - public void StoreUndoState() - { - if (!m_undoing) - { - if (m_parentGroup != null) - { - if (m_undo.Count > 0) - { - UndoState last = m_undo.Peek(); - if (last != null) - { - if (last.Compare(this)) - return; - } - } - - - if (m_parentGroup.GetSceneMaxUndo() > 0) - { - UndoState nUndo = new UndoState(this); - - m_undo.Push(nUndo); - } - } + get { return m_linkNum; } + set + { + m_linkNum = value; + TriggerScriptChangedEvent(Changed.LINK); + } } - public void ClearUndoState() + private byte m_clickAction = 0; + + public byte ClickAction { - m_undo.Clear(); - StoreUndoState(); + get { return m_clickAction; } + set + { + m_clickAction = value; + } } + protected PrimitiveBaseShape m_shape; + /// /// hook to the physics scene to apply impulse /// This is sent up to the group, which then finds the root prim @@ -624,17 +645,20 @@ namespace OpenSim.Region.Environment.Scenes public void ApplyImpulse(LLVector3 impulsei, bool localGlobalTF) { PhysicsVector impulse = new PhysicsVector(impulsei.X, impulsei.Y, impulsei.Z); - + if (localGlobalTF) { + LLQuaternion grot = GetWorldRotation(); - Quaternion AXgrot = new Quaternion(grot.W, grot.X, grot.Y, grot.Z); + Quaternion AXgrot = new Quaternion(grot.W,grot.X,grot.Y,grot.Z); Vector3 AXimpulsei = new Vector3(impulsei.X, impulsei.Y, impulsei.Z); Vector3 newimpulse = AXgrot * AXimpulsei; impulse = new PhysicsVector(newimpulse.x, newimpulse.y, newimpulse.z); + } else { + if (m_parentGroup != null) { m_parentGroup.applyImpulse(impulse); @@ -652,6 +676,7 @@ namespace OpenSim.Region.Environment.Scenes { StopMoveToTarget(); } + } public void StopMoveToTarget() @@ -664,48 +689,56 @@ namespace OpenSim.Region.Environment.Scenes if (m_parentGroup != null) { if (m_parentGroup.Scene != null) - m_parentGroup.Scene.TriggerObjectChanged(LocalId, (uint) val); + m_parentGroup.Scene.TriggerObjectChanged(LocalId, (uint)val); } + } - #endregion - - #region Permissions - - private readonly UndoStack m_undo = new UndoStack(5); - public uint BaseMask = (uint) PermissionMask.All; - public uint EveryoneMask = (uint) PermissionMask.None; - - public LLObject.ObjectFlags Flags = LLObject.ObjectFlags.None; - public uint GroupMask = (uint) PermissionMask.None; - public uint NextOwnerMask = (uint) PermissionMask.All; - public uint OwnerMask = (uint) PermissionMask.All; - - public uint ObjectFlags + public PrimitiveBaseShape Shape { - get { return (uint) Flags; } - set { Flags = (LLObject.ObjectFlags) value; } - } - - #endregion - - protected SceneObjectPart(SerializationInfo info, StreamingContext context) - { - //System.Console.WriteLine("SceneObjectPart Deserialize BGN"); - - if (info == null) + get { return m_shape; } + set { - throw new ArgumentNullException("info"); + + m_shape = value; + TriggerScriptChangedEvent(Changed.SHAPE); } - - /* - m_queue = (Queue)info.GetValue("m_queue", typeof(Queue)); - m_ids = (List)info.GetValue("m_ids", typeof(List)); - */ - - //System.Console.WriteLine("SceneObjectPart Deserialize END"); } + public LLVector3 Scale + { + get { return m_shape.Scale; } + set + { + StoreUndoState(); + m_shape.Scale = value; + TriggerScriptChangedEvent(Changed.SCALE); + } + } + + public bool Stopped + { + get { + double threshold = 0.02; + return (Math.Abs(Velocity.X) < threshold && + Math.Abs(Velocity.Y) < threshold && + Math.Abs(Velocity.Z) < threshold && + Math.Abs(AngularVelocity.X) < threshold && + Math.Abs(AngularVelocity.Y) < threshold && + Math.Abs(AngularVelocity.Z) < threshold); + } + } + + #endregion + + public LLUUID ObjectOwner + { + get { return OwnerID; } + } + + // FIXME, TODO, ERROR: 'ParentGroup' can't be in here, move it out. + protected SceneObjectGroup m_parentGroup; + public SceneObjectGroup ParentGroup { get { return m_parentGroup; } @@ -725,7 +758,7 @@ namespace OpenSim.Region.Environment.Scenes public SceneObjectPart() { // It's not necessary to persist this - m_inventoryFileName = "inventory_" + LLUUID.Random() + ".tmp"; + m_inventoryFileName = "inventory_" + LLUUID.Random().ToString() + ".tmp"; m_TextureAnimation = new byte[0]; } @@ -757,13 +790,13 @@ namespace OpenSim.Region.Environment.Scenes CreatorID = OwnerID; LastOwnerID = LLUUID.Zero; UUID = LLUUID.Random(); - LocalId = (localID); + LocalId = (uint) (localID); Shape = shape; // Todo: Add More Object Parameter from above! OwnershipCost = 0; - ObjectSaleType = 0; + ObjectSaleType = (byte) 0; SalePrice = 0; - Category = 0; + Category = (uint) 0; LastOwnerID = CreatorID; // End Todo: /// GroupPosition = groupPosition; @@ -774,20 +807,20 @@ namespace OpenSim.Region.Environment.Scenes AngularVelocity = new LLVector3(0, 0, 0); Acceleration = new LLVector3(0, 0, 0); m_TextureAnimation = new byte[0]; - m_inventoryFileName = "inventory_" + LLUUID.Random() + ".tmp"; - + m_inventoryFileName = "inventory_" + LLUUID.Random().ToString() + ".tmp"; + // Prims currently only contain a single folder (Contents). From looking at the Second Life protocol, // this appears to have the same UUID (!) as the prim. If this isn't the case, one can't drag items from // the prim into an agent inventory (Linden client reports that the "Object not found for drop" in its log m_folderID = UUID; Flags = 0; - Flags |= LLObject.ObjectFlags.AllowInventoryDrop | - LLObject.ObjectFlags.CreateSelected; + Flags |= LLObject.ObjectFlags.AllowInventoryDrop | + LLObject.ObjectFlags.CreateSelected; TrimPermissions(); //m_undo = new UndoStack(ParentGroup.GetSceneMaxUndo()); - + ScheduleFullUpdate(); } @@ -813,149 +846,29 @@ namespace OpenSim.Region.Environment.Scenes CreatorID = creatorID; LastOwnerID = lastOwnerID; UUID = LLUUID.Random(); - LocalId = (localID); + LocalId = (uint) (localID); Shape = shape; OwnershipCost = 0; - ObjectSaleType = 0; + ObjectSaleType = (byte) 0; SalePrice = 0; - Category = 0; + Category = (uint) 0; LastOwnerID = CreatorID; OffsetPosition = position; RotationOffset = rotation; ObjectFlags = flags; - + // Since we don't store script state, this is only a 'temporary' objectflag now // If the object is scripted, the script will get loaded and this will be set again - ObjectFlags &= ~(uint) (LLObject.ObjectFlags.Scripted | LLObject.ObjectFlags.Touch); - + ObjectFlags &= ~(uint)(LLObject.ObjectFlags.Scripted | LLObject.ObjectFlags.Touch); + TrimPermissions(); // ApplyPhysics(); - + ScheduleFullUpdate(); } #endregion - #region IScriptHost Members - - public LLUUID ObjectOwner - { - get { return OwnerID; } - } - - public void SetText(string text, Vector3 color, double alpha) - { - Color = Color.FromArgb(0xff - (int) (alpha * 0xff), - (int) (color.x * 0xff), - (int) (color.y * 0xff), - (int) (color.z * 0xff)); - SetText(text); - } - - #endregion - - #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_inventoryFileName", m_inventoryFileName); - info.AddValue("m_folderID", m_folderID.UUID); - info.AddValue("PhysActor", PhysActor); - - Dictionary TaskInventory_work = new Dictionary(); - - foreach (LLUUID id in TaskInventory.Keys) - { - TaskInventory_work.Add(id.UUID, TaskInventory[id]); - } - - info.AddValue("TaskInventory", TaskInventory_work); - - info.AddValue("LastOwnerID", LastOwnerID.UUID); - info.AddValue("OwnerID", OwnerID.UUID); - info.AddValue("GroupID", GroupID.UUID); - - info.AddValue("OwnershipCost", OwnershipCost); - info.AddValue("ObjectSaleType", ObjectSaleType); - info.AddValue("SalePrice", SalePrice); - info.AddValue("Category", Category); - - info.AddValue("CreationDate", CreationDate); - info.AddValue("ParentID", ParentID); - - info.AddValue("OwnerMask", OwnerMask); - info.AddValue("NextOwnerMask", NextOwnerMask); - info.AddValue("GroupMask", GroupMask); - info.AddValue("EveryoneMask", EveryoneMask); - info.AddValue("BaseMask", BaseMask); - - info.AddValue("m_particleSystem", m_particleSystem); - - info.AddValue("TimeStampFull", TimeStampFull); - info.AddValue("TimeStampTerse", TimeStampTerse); - info.AddValue("TimeStampLastActivity", TimeStampLastActivity); - - info.AddValue("m_updateFlag", m_updateFlag); - info.AddValue("CreatorID", CreatorID.UUID); - - info.AddValue("m_inventorySerial", m_inventorySerial); - info.AddValue("m_uuid", m_uuid.UUID); - info.AddValue("m_localID", m_localId); - info.AddValue("m_name", m_name); - info.AddValue("m_flags", Flags); - info.AddValue("m_material", m_material); - info.AddValue("m_regionHandle", m_regionHandle); - - info.AddValue("m_groupPosition.X", m_groupPosition.X); - info.AddValue("m_groupPosition.Y", m_groupPosition.Y); - info.AddValue("m_groupPosition.Z", m_groupPosition.Z); - - info.AddValue("m_offsetPosition.X", m_offsetPosition.X); - info.AddValue("m_offsetPosition.Y", m_offsetPosition.Y); - info.AddValue("m_offsetPosition.Z", m_offsetPosition.Z); - - info.AddValue("m_rotationOffset.W", m_rotationOffset.W); - info.AddValue("m_rotationOffset.X", m_rotationOffset.X); - info.AddValue("m_rotationOffset.Y", m_rotationOffset.Y); - info.AddValue("m_rotationOffset.Z", m_rotationOffset.Z); - - info.AddValue("m_velocity.X", m_velocity.X); - info.AddValue("m_velocity.Y", m_velocity.Y); - info.AddValue("m_velocity.Z", m_velocity.Z); - - info.AddValue("m_rotationalvelocity.X", m_rotationalvelocity.X); - info.AddValue("m_rotationalvelocity.Y", m_rotationalvelocity.Y); - info.AddValue("m_rotationalvelocity.Z", m_rotationalvelocity.Z); - - info.AddValue("m_angularVelocity.X", m_angularVelocity.X); - info.AddValue("m_angularVelocity.Y", m_angularVelocity.Y); - info.AddValue("m_angularVelocity.Z", m_angularVelocity.Z); - - info.AddValue("m_acceleration.X", m_acceleration.X); - info.AddValue("m_acceleration.Y", m_acceleration.Y); - info.AddValue("m_acceleration.Z", m_acceleration.Z); - - info.AddValue("m_description", m_description); - info.AddValue("m_color", m_color); - info.AddValue("m_text", m_text); - info.AddValue("m_sitName", m_sitName); - info.AddValue("m_touchName", m_touchName); - info.AddValue("m_clickAction", m_clickAction); - info.AddValue("m_shape", m_shape); - info.AddValue("m_parentGroup", m_parentGroup); - info.AddValue("PayPrice", PayPrice); - } - - #endregion - /// /// Restore this part from the serialized xml representation. /// @@ -968,9 +881,10 @@ namespace OpenSim.Region.Environment.Scenes return newobject; } - + public void ApplyPhysics(uint rootObjectFlags, bool m_physicalPrim) { + bool isPhysical = (((rootObjectFlags & (uint) LLObject.ObjectFlags.Physics) != 0) && m_physicalPrim); bool isPhantom = ((rootObjectFlags & (uint) LLObject.ObjectFlags.Phantom) != 0); @@ -988,7 +902,7 @@ namespace OpenSim.Region.Environment.Scenes new PhysicsVector(Scale.X, Scale.Y, Scale.Z), new Quaternion(RotationOffset.W, RotationOffset.X, RotationOffset.Y, RotationOffset.Z), RigidBody); - + // Basic Physics returns null.. joy joy joy. if (PhysActor != null) { @@ -1004,15 +918,18 @@ namespace OpenSim.Region.Environment.Scenes OwnerMask = NextOwnerMask; TriggerScriptChangedEvent(Changed.OWNER); + } public void TrimPermissions() { - BaseMask &= (uint) PermissionMask.All; - OwnerMask &= (uint) PermissionMask.All; - GroupMask &= (uint) PermissionMask.All; - EveryoneMask &= (uint) PermissionMask.All; - NextOwnerMask &= (uint) PermissionMask.All; + + BaseMask &= (uint)PermissionMask.All; + OwnerMask &= (uint)PermissionMask.All; + GroupMask &= (uint)PermissionMask.All; + EveryoneMask &= (uint)PermissionMask.All; + NextOwnerMask &= (uint)PermissionMask.All; + } /// @@ -1046,24 +963,25 @@ namespace OpenSim.Region.Environment.Scenes Vector3 rOrigin = iray.Origin; Vector3 rDirection = iray.Direction; + //rDirection = rDirection.Normalize(); // Buidling the first part of the Quadratic equation - Vector3 r2ndDirection = rDirection * rDirection; + Vector3 r2ndDirection = rDirection*rDirection; float itestPart1 = r2ndDirection.x + r2ndDirection.y + r2ndDirection.z; // Buidling the second part of the Quadratic equation Vector3 tmVal2 = rOrigin - vAbsolutePosition; - Vector3 r2Direction = rDirection * 2.0f; - Vector3 tmVal3 = r2Direction * tmVal2; + Vector3 r2Direction = rDirection*2.0f; + Vector3 tmVal3 = r2Direction*tmVal2; float itestPart2 = tmVal3.x + tmVal3.y + tmVal3.z; // Buidling the third part of the Quadratic equation - Vector3 tmVal4 = rOrigin * rOrigin; - Vector3 tmVal5 = vAbsolutePosition * vAbsolutePosition; + Vector3 tmVal4 = rOrigin*rOrigin; + Vector3 tmVal5 = vAbsolutePosition*vAbsolutePosition; - Vector3 tmVal6 = vAbsolutePosition * rOrigin; + Vector3 tmVal6 = vAbsolutePosition*rOrigin; // Set Radius to the largest dimention of the prim @@ -1085,21 +1003,21 @@ namespace OpenSim.Region.Environment.Scenes //radius = radius; float itestPart3 = tmVal4.x + tmVal4.y + tmVal4.z + tmVal5.x + tmVal5.y + tmVal5.z - - (2.0f * (tmVal6.x + tmVal6.y + tmVal6.z + (radius * radius))); + (2.0f*(tmVal6.x + tmVal6.y + tmVal6.z + (radius*radius))); // Yuk Quadradrics.. Solve first - float rootsqr = (itestPart2 * itestPart2) - (4.0f * itestPart1 * itestPart3); + float rootsqr = (itestPart2*itestPart2) - (4.0f*itestPart1*itestPart3); if (rootsqr < 0.0f) { // No intersection return returnresult; } - float root = ((-itestPart2) - (float) Math.Sqrt(rootsqr)) / (itestPart1 * 2.0f); + float root = ((-itestPart2) - (float) Math.Sqrt((double) rootsqr))/(itestPart1*2.0f); if (root < 0.0f) { // perform second quadratic root solution - root = ((-itestPart2) + (float) Math.Sqrt(rootsqr)) / (itestPart1 * 2.0f); + root = ((-itestPart2) + (float) Math.Sqrt((double) rootsqr))/(itestPart1*2.0f); // is there any intersection? if (root < 0.0f) @@ -1112,8 +1030,8 @@ namespace OpenSim.Region.Environment.Scenes // We got an intersection. putting together an EntityIntersection object with the // intersection information Vector3 ipoint = - new Vector3(iray.Origin.x + (iray.Direction.x * root), iray.Origin.y + (iray.Direction.y * root), - iray.Origin.z + (iray.Direction.z * root)); + new Vector3(iray.Origin.x + (iray.Direction.x*root), iray.Origin.y + (iray.Direction.y*root), + iray.Origin.z + (iray.Direction.z*root)); returnresult.HitTF = true; returnresult.ipoint = ipoint; @@ -1174,7 +1092,7 @@ namespace OpenSim.Region.Environment.Scenes // Variables prefixed with AX are Axiom.Math copies of the LL variety. - Quaternion AXrot = new Quaternion(rot.W, rot.X, rot.Y, rot.Z); + Quaternion AXrot = new Quaternion(rot.W,rot.X,rot.Y,rot.Z); AXrot.Normalize(); Vector3 AXpos = new Vector3(pos.X, pos.Y, pos.Z); @@ -1183,33 +1101,31 @@ namespace OpenSim.Region.Environment.Scenes // it's different for each vertex because we've got to rotate it // to get the world position of the vertex to produce the Oriented Bounding Box - Vector3 tScale = new Vector3(); + Vector3 tScale = new Vector3(); Vector3 AXscale = new Vector3(m_shape.Scale.X * 0.5f, m_shape.Scale.Y * 0.5f, m_shape.Scale.Z * 0.5f); //Vector3 pScale = (AXscale) - (AXrot.Inverse() * (AXscale)); //Vector3 nScale = (AXscale * -1) - (AXrot.Inverse() * (AXscale * -1)); - + // rScale is the rotated offset to find a vertex based on the scale and the world rotation. Vector3 rScale = new Vector3(); // Get Vertexes for Faces Stick them into ABCD for each Face // Form: Face[face] that corresponds to the below diagram - #region ABCD Face Vertex Map Comment Diagram - // A _________ B // | | // | 4 top | // |_________| // C D - + // A _________ B // | Back | // | 3 | // |_________| // C D - + // A _________ B B _________ A // | Left | | Right | // | 0 | | 2 | @@ -1227,15 +1143,13 @@ namespace OpenSim.Region.Environment.Scenes // | 5 bot | // |_________| // A B - #endregion #region Plane Decomposition of Oriented Bounding Box - tScale = new Vector3(AXscale.x, -AXscale.y, AXscale.z); rScale = ((AXrot * tScale)); vertexes[0] = (new Vector3((pos.X + rScale.x), (pos.Y + rScale.y), (pos.Z + rScale.z))); - // vertexes[0].x = pos.X + vertexes[0].x; + // vertexes[0].x = pos.X + vertexes[0].x; //vertexes[0].y = pos.Y + vertexes[0].y; //vertexes[0].z = pos.Z + vertexes[0].z; @@ -1247,8 +1161,8 @@ namespace OpenSim.Region.Environment.Scenes rScale = ((AXrot * tScale)); vertexes[1] = (new Vector3((pos.X + rScale.x), (pos.Y + rScale.y), (pos.Z + rScale.z))); - // vertexes[1].x = pos.X + vertexes[1].x; - // vertexes[1].y = pos.Y + vertexes[1].y; + // vertexes[1].x = pos.X + vertexes[1].x; + // vertexes[1].y = pos.Y + vertexes[1].y; //vertexes[1].z = pos.Z + vertexes[1].z; FaceB[0] = vertexes[1]; @@ -1273,8 +1187,8 @@ namespace OpenSim.Region.Environment.Scenes vertexes[3] = (new Vector3((pos.X + rScale.x), (pos.Y + rScale.y), (pos.Z + rScale.z))); //vertexes[3].x = pos.X + vertexes[3].x; - // vertexes[3].y = pos.Y + vertexes[3].y; - // vertexes[3].z = pos.Z + vertexes[3].z; + // vertexes[3].y = pos.Y + vertexes[3].y; + // vertexes[3].z = pos.Z + vertexes[3].z; FaceD[0] = vertexes[3]; FaceC[1] = vertexes[3]; @@ -1284,9 +1198,9 @@ namespace OpenSim.Region.Environment.Scenes rScale = ((AXrot * tScale)); vertexes[4] = (new Vector3((pos.X + rScale.x), (pos.Y + rScale.y), (pos.Z + rScale.z))); - // vertexes[4].x = pos.X + vertexes[4].x; - // vertexes[4].y = pos.Y + vertexes[4].y; - // vertexes[4].z = pos.Z + vertexes[4].z; + // vertexes[4].x = pos.X + vertexes[4].x; + // vertexes[4].y = pos.Y + vertexes[4].y; + // vertexes[4].z = pos.Z + vertexes[4].z; FaceB[1] = vertexes[4]; FaceA[2] = vertexes[4]; @@ -1296,9 +1210,9 @@ namespace OpenSim.Region.Environment.Scenes rScale = ((AXrot * tScale)); vertexes[5] = (new Vector3((pos.X + rScale.x), (pos.Y + rScale.y), (pos.Z + rScale.z))); - // vertexes[5].x = pos.X + vertexes[5].x; - // vertexes[5].y = pos.Y + vertexes[5].y; - // vertexes[5].z = pos.Z + vertexes[5].z; + // vertexes[5].x = pos.X + vertexes[5].x; + // vertexes[5].y = pos.Y + vertexes[5].y; + // vertexes[5].z = pos.Z + vertexes[5].z; FaceD[1] = vertexes[5]; FaceC[2] = vertexes[5]; @@ -1308,9 +1222,9 @@ namespace OpenSim.Region.Environment.Scenes rScale = ((AXrot * tScale)); vertexes[6] = (new Vector3((pos.X + rScale.x), (pos.Y + rScale.y), (pos.Z + rScale.z))); - // vertexes[6].x = pos.X + vertexes[6].x; - // vertexes[6].y = pos.Y + vertexes[6].y; - // vertexes[6].z = pos.Z + vertexes[6].z; + // vertexes[6].x = pos.X + vertexes[6].x; + // vertexes[6].y = pos.Y + vertexes[6].y; + // vertexes[6].z = pos.Z + vertexes[6].z; FaceB[2] = vertexes[6]; FaceA[3] = vertexes[6]; @@ -1320,36 +1234,35 @@ namespace OpenSim.Region.Environment.Scenes rScale = ((AXrot * tScale)); vertexes[7] = (new Vector3((pos.X + rScale.x), (pos.Y + rScale.y), (pos.Z + rScale.z))); - // vertexes[7].x = pos.X + vertexes[7].x; - // vertexes[7].y = pos.Y + vertexes[7].y; - // vertexes[7].z = pos.Z + vertexes[7].z; + // vertexes[7].x = pos.X + vertexes[7].x; + // vertexes[7].y = pos.Y + vertexes[7].y; + // vertexes[7].z = pos.Z + vertexes[7].z; FaceD[2] = vertexes[7]; FaceC[3] = vertexes[7]; FaceD[5] = vertexes[7]; - #endregion // Get our plane normals for (int i = 0; i < 6; i++) { //m_log.Info("[FACECALCULATION]: FaceA[" + i + "]=" + FaceA[i] + " FaceB[" + i + "]=" + FaceB[i] + " FaceC[" + i + "]=" + FaceC[i] + " FaceD[" + i + "]=" + FaceD[i]); - + // Our Plane direction AmBa = FaceA[i] - FaceB[i]; AmBb = FaceB[i] - FaceC[i]; - + cross = AmBb.Cross(AmBa); // normalize the cross product to get the normal. - normals[i] = cross / cross.Length; - + normals[i] = cross / cross.Length; + //m_log.Info("[NORMALS]: normals[ " + i + "]" + normals[i].ToString()); //distance[i] = (normals[i].x * AmBa.x + normals[i].y * AmBa.y + normals[i].z * AmBa.z) * -1; } EntityIntersection returnresult = new EntityIntersection(); - + returnresult.distance = 1024; float c = 0; float a = 0; @@ -1357,59 +1270,57 @@ namespace OpenSim.Region.Environment.Scenes Vector3 q = new Vector3(); #region OBB Version 2 Experiment - //float fmin = 999999; //float fmax = -999999; //float s = 0; //for (int i=0;i<6;i++) //{ - //s = iray.Direction.Dot(normals[i]); - //d = normals[i].Dot(FaceB[i]); + //s = iray.Direction.Dot(normals[i]); + //d = normals[i].Dot(FaceB[i]); - //if (s == 0) - //{ - //if (iray.Origin.Dot(normals[i]) > d) - //{ - //return returnresult; - //} - // else - //{ - //continue; - //} - //} - //a = (d - iray.Origin.Dot(normals[i])) / s; - //if ( iray.Direction.Dot(normals[i]) < 0) - //{ - //if (a > fmax) - //{ - //if (a > fmin) - //{ - //return returnresult; - //} - //fmax = a; - //} + //if (s == 0) + //{ + //if (iray.Origin.Dot(normals[i]) > d) + //{ + //return returnresult; + //} + // else + //{ + //continue; + //} + //} + //a = (d - iray.Origin.Dot(normals[i])) / s; + //if ( iray.Direction.Dot(normals[i]) < 0) + //{ + //if (a > fmax) + //{ + //if (a > fmin) + //{ + //return returnresult; + //} + //fmax = a; + //} - //} - //else - //{ - //if (a < fmin) - //{ - //if (a < 0 || a < fmax) - //{ - //return returnresult; - //} - //fmin = a; - //} - //} + //} + //else + //{ + //if (a < fmin) + //{ + //if (a < 0 || a < fmax) + //{ + //return returnresult; + //} + //fmin = a; + //} + //} //} //if (fmax > 0) // a= fmax; //else - // a=fmin; + // a=fmin; //q = iray.Origin + a * iray.Direction; - #endregion // Loop over faces (6 of them) @@ -1430,6 +1341,7 @@ namespace OpenSim.Region.Environment.Scenes // If the normal is pointing outside the object if (iray.Direction.Dot(normals[i]) < 0 || !frontFacesOnly) { + if (faceCenters) { q = AXpos + a * AAfacenormals[i]; //(FaceA[i] + FaceB[i] + FaceC[1] + FaceD[i]) / 4f; @@ -1439,13 +1351,13 @@ namespace OpenSim.Region.Environment.Scenes q = iray.Origin + a * iray.Direction; } - float distance2 = (float) GetDistanceTo(q, AXpos); + float distance2 = (float)GetDistanceTo(q, AXpos); // Is this the closest hit to the object's origin? if (faceCenters) { - distance2 = (float) GetDistanceTo(q, iray.Origin); + distance2 = (float)GetDistanceTo(q, iray.Origin); } - + if (distance2 < returnresult.distance) { @@ -1456,12 +1368,14 @@ namespace OpenSim.Region.Environment.Scenes //m_log.Info("[POINT]: " + q.ToString()); returnresult.normal = normals[i]; returnresult.AAfaceNormal = AAfacenormals[i]; + } } + } return returnresult; } - + // Use this for attachments! LocalID should be avatar's localid public void SetParentLocalId(uint localID) { @@ -1471,14 +1385,14 @@ namespace OpenSim.Region.Environment.Scenes public void SetAttachmentPoint(uint AttachmentPoint) { m_attachmentPoint = AttachmentPoint; - + // save the attachment point. //if (AttachmentPoint != 0) //{ - m_shape.State = (byte) AttachmentPoint; + m_shape.State = (byte)AttachmentPoint; //} + } - /// /// /// @@ -1500,12 +1414,13 @@ namespace OpenSim.Region.Environment.Scenes PhysActor.Buoyancy = fvalue; } } - + public void SetAxisRotation(int axis, int rotate) { if (m_parentGroup != null) { m_parentGroup.SetAxisRotation(axis, rotate); + } } @@ -1527,9 +1442,10 @@ namespace OpenSim.Region.Environment.Scenes { PhysActor.FloatOnWater = false; } + } } - + public LLVector3 GetSitTargetPositionLL() { @@ -1600,6 +1516,53 @@ namespace OpenSim.Region.Environment.Scenes return part; } + #region Copying + + /// + /// Duplicates this part. + /// + /// + public SceneObjectPart Copy(uint localID, LLUUID AgentID, LLUUID GroupID, int linkNum) + { + SceneObjectPart dupe = (SceneObjectPart) MemberwiseClone(); + dupe.m_shape = m_shape.Copy(); + dupe.m_regionHandle = m_regionHandle; + dupe.UUID = LLUUID.Random(); + dupe.LocalId = localID; + dupe.OwnerID = AgentID; + dupe.GroupID = GroupID; + dupe.GroupPosition = new LLVector3(GroupPosition.X, GroupPosition.Y, GroupPosition.Z); + dupe.OffsetPosition = new LLVector3(OffsetPosition.X, OffsetPosition.Y, OffsetPosition.Z); + dupe.RotationOffset = + new LLQuaternion(RotationOffset.X, RotationOffset.Y, RotationOffset.Z, RotationOffset.W); + dupe.Velocity = new LLVector3(0, 0, 0); + dupe.Acceleration = new LLVector3(0, 0, 0); + dupe.AngularVelocity = new LLVector3(0, 0, 0); + dupe.ObjectFlags = ObjectFlags; + + dupe.OwnershipCost = OwnershipCost; + dupe.ObjectSaleType = ObjectSaleType; + dupe.SalePrice = SalePrice; + dupe.Category = Category; + + dupe.TaskInventory = (TaskInventoryDictionary)dupe.TaskInventory.Clone(); + + dupe.ResetIDs(linkNum); + + // This may be wrong... it might have to be applied in SceneObjectGroup to the object that's being duplicated. + dupe.LastOwnerID = ObjectOwner; + + byte[] extraP = new byte[Shape.ExtraParams.Length]; + Array.Copy(Shape.ExtraParams, extraP, extraP.Length); + dupe.Shape.ExtraParams = extraP; + bool UsePhysics = ((dupe.ObjectFlags & (uint) LLObject.ObjectFlags.Physics) != 0); + dupe.DoPhysicsPropertyUpdate(UsePhysics, true); + + return dupe; + } + + #endregion + /// /// Reset LLUUIDs for this part. This involves generate this part's own LLUUID and /// generating new LLUUIDs for all the items in the inventory. @@ -1608,395 +1571,11 @@ namespace OpenSim.Region.Environment.Scenes public void ResetIDs(int linkNum) { UUID = LLUUID.Random(); - LinkNum = linkNum; - + LinkNum = linkNum; + ResetInventoryIDs(); } - public void UpdatePermissions(LLUUID AgentID, byte field, uint localID, uint mask, byte addRemTF) - { - bool set = addRemTF == 1; - - // Are we the owner? - if (AgentID == OwnerID) - { - switch (field) - { - case 2: - OwnerMask = ApplyMask(OwnerMask, set, mask); - break; - case 4: - GroupMask = ApplyMask(GroupMask, set, mask); - break; - case 8: - EveryoneMask = ApplyMask(EveryoneMask, set, mask); - break; - case 16: - NextOwnerMask = ApplyMask(NextOwnerMask, set, mask); - break; - } - SendFullUpdateToAllClients(); - - SendObjectPropertiesToClient(AgentID); - } - } - - private void SendObjectPropertiesToClient(LLUUID AgentID) - { - List avatars = m_parentGroup.GetScenePresences(); - for (int i = 0; i < avatars.Count; i++) - { - // Ugly reference :( - if (avatars[i].UUID == AgentID) - { - m_parentGroup.GetProperties(avatars[i].ControllingClient); - } - } - } - - private uint ApplyMask(uint val, bool set, uint mask) - { - if (set) - { - return val |= mask; - } - else - { - return val &= ~mask; - } - } - - public virtual void UpdateMovement() - { - } - - public void PhysicsOutOfBounds(PhysicsVector pos) - { - m_log.Info("[PHYSICS]: Physical Object went out of bounds."); - RemFlag(LLObject.ObjectFlags.Physics); - DoPhysicsPropertyUpdate(false, true); - //m_parentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(PhysActor); - } - - public virtual void OnGrab(LLVector3 offsetPos, IClientAPI remoteClient) - { - } - - - public void SetText(string text) - { - Text = text; - ScheduleFullUpdate(); - } - - public int registerTargetWaypoint(LLVector3 target, float tolerance) - { - if (m_parentGroup != null) - { - return m_parentGroup.registerTargetWaypoint(target, tolerance); - } - return 0; - } - - public void unregisterTargetWaypoint(int handle) - { - if (m_parentGroup != null) - { - m_parentGroup.unregisterTargetWaypoint(handle); - } - } - - - public void Undo() - { - if (m_undo.Count > 0) - { - UndoState goback = m_undo.Pop(); - if (goback != null) - goback.PlaybackState(this); - } - } - - public void SetScriptEvents(LLUUID scriptid, int events) - { - scriptEvents oldparts; - lock (m_scriptEvents) - { - if (m_scriptEvents.ContainsKey(scriptid)) - { - oldparts = m_scriptEvents[scriptid]; - - // remove values from aggregated script events - m_scriptEvents[scriptid] = (scriptEvents) events; - } - else - { - m_scriptEvents.Add(scriptid, (scriptEvents) events); - } - } - aggregateScriptEvents(); - } - - public void RemoveScriptEvents(LLUUID scriptid) - { - lock (m_scriptEvents) - { - if (m_scriptEvents.ContainsKey(scriptid)) - { - scriptEvents oldparts = scriptEvents.None; - oldparts = m_scriptEvents[scriptid]; - - // remove values from aggregated script events - m_aggregateScriptEvents &= ~oldparts; - m_scriptEvents.Remove(scriptid); - } - } - aggregateScriptEvents(); - } - - public void aggregateScriptEvents() - { - // Aggregate script events - lock (m_scriptEvents) - { - foreach (scriptEvents s in m_scriptEvents.Values) - { - m_aggregateScriptEvents |= s; - } - } - - uint objectflagupdate = 0; - - if ( - ((m_aggregateScriptEvents & scriptEvents.touch) != 0) || - ((m_aggregateScriptEvents & scriptEvents.touch_end) != 0) || - ((m_aggregateScriptEvents & scriptEvents.touch_start) != 0) - ) - { - objectflagupdate |= (uint) LLObject.ObjectFlags.Touch; - } - - if ((m_aggregateScriptEvents & scriptEvents.money) != 0) - { - objectflagupdate |= (uint) LLObject.ObjectFlags.Money; - } - - if ( - ((m_aggregateScriptEvents & scriptEvents.collision) != 0) || - ((m_aggregateScriptEvents & scriptEvents.collision_end) != 0) || - ((m_aggregateScriptEvents & scriptEvents.collision_start) != 0) - ) - { - // subscribe to physics updates. - } - - LocalFlags = (LLObject.ObjectFlags) objectflagupdate; - - if (m_parentGroup != null && m_parentGroup.RootPart == this) - m_parentGroup.aggregateScriptEvents(); - else - ScheduleFullUpdate(); - } - - #region Events - - public void PhysicsRequestingTerseUpdate() - { - if (PhysActor != null) - { - LLVector3 newpos = new LLVector3(PhysActor.Position.GetBytes(), 0); - if (newpos.X > 257f || newpos.X < -1f || newpos.Y > 257f || newpos.Y < -1f) - { - m_parentGroup.AbsolutePosition = newpos; - return; - } - } - ScheduleTerseUpdate(); - - //SendTerseUpdateToAllClients(); - } - - #endregion - - #region Client Update Methods - - /// - /// Tell all scene presences that they should send updates for this part to their clients - /// - public void AddFullUpdateToAllAvatars() - { - List avatars = m_parentGroup.GetScenePresences(); - for (int i = 0; i < avatars.Count; i++) - { - avatars[i].QueuePartForUpdate(this); - } - } - - public void SendFullUpdateToAllClientsExcept(LLUUID agentID) - { - List avatars = m_parentGroup.GetScenePresences(); - for (int i = 0; i < avatars.Count; i++) - { - // Ugly reference :( - if (avatars[i].UUID != agentID) - { - m_parentGroup.SendPartFullUpdate(avatars[i].ControllingClient, this, - avatars[i].GenerateClientFlags(UUID)); - } - } - } - - - public void AddFullUpdateToAvatar(ScenePresence presence) - { - presence.QueuePartForUpdate(this); - } - - /// - /// - /// - public void SendFullUpdateToAllClients() - { - List avatars = m_parentGroup.GetScenePresences(); - for (int i = 0; i < avatars.Count; i++) - { - // Ugly reference :( - m_parentGroup.SendPartFullUpdate(avatars[i].ControllingClient, this, - avatars[i].GenerateClientFlags(UUID)); - } - } - - /// - /// - /// - /// - public void SendFullUpdate(IClientAPI remoteClient, uint clientFlags) - { - m_parentGroup.SendPartFullUpdate(remoteClient, this, clientFlags); - } - - /// - /// Sends a full update to the client - /// - /// - /// - public void SendFullUpdateToClient(IClientAPI remoteClient, uint clientflags) - { - LLVector3 lPos; - lPos = OffsetPosition; - SendFullUpdateToClient(remoteClient, lPos, clientflags); - } - - /// - /// Sends a full update to the client - /// - /// - /// - /// - public void SendFullUpdateToClient(IClientAPI remoteClient, LLVector3 lPos, uint clientFlags) - { - LLQuaternion lRot; - lRot = RotationOffset; - clientFlags &= ~(uint) LLObject.ObjectFlags.CreateSelected; - - if (remoteClient.AgentId == OwnerID) - { - if ((uint) (Flags & LLObject.ObjectFlags.CreateSelected) != 0) - { - clientFlags |= (uint) LLObject.ObjectFlags.CreateSelected; - Flags &= ~LLObject.ObjectFlags.CreateSelected; - } - } - - - byte[] color = new[] {m_color.R, m_color.G, m_color.B, m_color.A}; - remoteClient.SendPrimitiveToClient(m_regionHandle, (ushort) (m_parentGroup.GetTimeDilation() * ushort.MaxValue), LocalId, m_shape, lPos, clientFlags, - m_uuid, - OwnerID, - m_text, color, ParentID, m_particleSystem, lRot, m_clickAction, m_TextureAnimation, m_IsAttachment, - m_attachmentPoint, fromAssetID); - } - - /// Terse updates - public void AddTerseUpdateToAllAvatars() - { - List avatars = m_parentGroup.GetScenePresences(); - for (int i = 0; i < avatars.Count; i++) - { - avatars[i].QueuePartForUpdate(this); - } - } - - public void AddTerseUpdateToAvatar(ScenePresence presence) - { - presence.QueuePartForUpdate(this); - } - - /// - /// - /// - public void SendTerseUpdateToAllClients() - { - List avatars = m_parentGroup.GetScenePresences(); - for (int i = 0; i < avatars.Count; i++) - { - m_parentGroup.SendPartTerseUpdate(avatars[i].ControllingClient, this); - } - } - - /// - /// Send a terse update to the client. - /// - /// - public void SendTerseUpdate(IClientAPI remoteClient) - { - m_parentGroup.SendPartTerseUpdate(remoteClient, this); - } - - public void SendTerseUpdateToClient(IClientAPI remoteClient) - { - LLVector3 lPos; - lPos = OffsetPosition; - LLQuaternion mRot = RotationOffset; - if ((ObjectFlags & (uint) LLObject.ObjectFlags.Physics) == 0) - { - remoteClient.SendPrimTerseUpdate(m_regionHandle, (ushort) (m_parentGroup.GetTimeDilation() * ushort.MaxValue), LocalId, lPos, mRot, Shape.State, - fromAssetID); - } - else - { - remoteClient.SendPrimTerseUpdate(m_regionHandle, (ushort) (m_parentGroup.GetTimeDilation() * ushort.MaxValue), LocalId, lPos, mRot, Velocity, - RotationalVelocity); - //System.Console.WriteLine("LID: " + LocalID + " RVel:" + RotationalVelocity.ToString() + " TD: " + ((ushort)(m_parentGroup.Scene.TimeDilation * 500000f)).ToString() + ":" + m_parentGroup.Scene.TimeDilation.ToString()); - } - } - - public void SendTerseUpdateToClient(IClientAPI remoteClient, LLVector3 lPos) - { - LLQuaternion mRot = RotationOffset; - if (m_IsAttachment) - { - remoteClient.SendPrimTerseUpdate(m_regionHandle, (ushort) (m_parentGroup.GetTimeDilation() * ushort.MaxValue), LocalId, lPos, mRot, - (byte) ((m_attachmentPoint % 16) * 16 + (m_attachmentPoint / 16)), fromAssetID); - } - else - { - if ((ObjectFlags & (uint) LLObject.ObjectFlags.Physics) == 0) - { - remoteClient.SendPrimTerseUpdate(m_regionHandle, (ushort) (m_parentGroup.GetTimeDilation() * ushort.MaxValue), LocalId, lPos, mRot, - Shape.State, fromAssetID); - } - else - { - remoteClient.SendPrimTerseUpdate(m_regionHandle, (ushort) (m_parentGroup.GetTimeDilation() * ushort.MaxValue), LocalId, lPos, mRot, Velocity, - RotationalVelocity); - //System.Console.WriteLine("LID: " + LocalID + "RVel:" + RotationalVelocity.ToString() + " TD: " + ((ushort)(m_parentGroup.Scene.TimeDilation * 500000f)).ToString() + ":" + m_parentGroup.Scene.TimeDilation.ToString()); - } - } - } - - #endregion - #region Update Scheduling /// @@ -2017,9 +1596,9 @@ namespace OpenSim.Region.Environment.Scenes m_parentGroup.HasGroupChanged = true; m_parentGroup.QueueForUpdateCheck(); } - + int timeNow = Util.UnixTimeSinceEpoch(); - + // If multiple updates are scheduled on the same second, we still need to perform all of them // So we'll force the issue by bumping up the timestamp so that later processing sees these need // to be performed. @@ -2029,11 +1608,11 @@ namespace OpenSim.Region.Environment.Scenes } else { - TimeStampFull = (uint) timeNow; + TimeStampFull = (uint)timeNow; } - + m_updateFlag = 2; - + // m_log.DebugFormat( // "[SCENE OBJECT PART]: Scheduling full update for {0}, {1} at {2}", // UUID, Name, TimeStampFull); @@ -2156,13 +1735,15 @@ namespace OpenSim.Region.Environment.Scenes public void UpdatePrimFlags(ushort type, bool inUse, byte[] data) { + + //m_log.Info("TSomething1:" + ((type & (ushort)ExtraParamType.Something1) == (ushort)ExtraParamType.Something1)); //m_log.Info("TSomething2:" + ((type & (ushort)ExtraParamType.Something2) == (ushort)ExtraParamType.Something2)); //m_log.Info("TSomething3:" + ((type & (ushort)ExtraParamType.Something3) == (ushort)ExtraParamType.Something3)); //m_log.Info("TSomething4:" + ((type & (ushort)ExtraParamType.Something4) == (ushort)ExtraParamType.Something4)); //m_log.Info("TSomething5:" + ((type & (ushort)ExtraParamType.Something5) == (ushort)ExtraParamType.Something5)); //m_log.Info("TSomething6:" + ((type & (ushort)ExtraParamType.Something6) == (ushort)ExtraParamType.Something6)); - + bool usePhysics = false; bool IsTemporary = false; bool IsPhantom = false; @@ -2170,7 +1751,7 @@ namespace OpenSim.Region.Environment.Scenes bool wasUsingPhysics = ((ObjectFlags & (uint) LLObject.ObjectFlags.Physics) != 0); //bool IsLocked = false; int i = 0; - + try { @@ -2254,7 +1835,6 @@ namespace OpenSim.Region.Environment.Scenes // System.Console.WriteLine("Update: PHY:" + UsePhysics.ToString() + ", T:" + IsTemporary.ToString() + ", PHA:" + IsPhantom.ToString() + " S:" + CastsShadows.ToString()); ScheduleFullUpdate(); } - public void ScriptSetPhysicsStatus(bool UsePhysics) { if (m_parentGroup != null) @@ -2262,7 +1842,6 @@ namespace OpenSim.Region.Environment.Scenes m_parentGroup.ScriptSetPhysicsStatus(UsePhysics); } } - public void ScriptSetPhantomStatus(bool Phantom) { if (m_parentGroup != null) @@ -2270,7 +1849,6 @@ namespace OpenSim.Region.Environment.Scenes m_parentGroup.ScriptSetPhantomStatus(Phantom); } } - public void DoPhysicsPropertyUpdate(bool UsePhysics, bool isNew) { if (PhysActor != null) @@ -2319,6 +1897,7 @@ namespace OpenSim.Region.Environment.Scenes PhysActor.link(ParentGroup.RootPart.PhysActor); } } + } } } @@ -2332,13 +1911,13 @@ namespace OpenSim.Region.Environment.Scenes int i = 0; uint length = (uint) data.Length; m_shape.ExtraParams[i++] = 1; - m_shape.ExtraParams[i++] = (byte) (type % 256); - m_shape.ExtraParams[i++] = (byte) ((type >> 8) % 256); + m_shape.ExtraParams[i++] = (byte) (type%256); + m_shape.ExtraParams[i++] = (byte) ((type >> 8)%256); - m_shape.ExtraParams[i++] = (byte) (length % 256); - m_shape.ExtraParams[i++] = (byte) ((length >> 8) % 256); - m_shape.ExtraParams[i++] = (byte) ((length >> 16) % 256); - m_shape.ExtraParams[i++] = (byte) ((length >> 24) % 256); + m_shape.ExtraParams[i++] = (byte) (length%256); + m_shape.ExtraParams[i++] = (byte) ((length >> 8)%256); + m_shape.ExtraParams[i++] = (byte) ((length >> 16)%256); + m_shape.ExtraParams[i++] = (byte) ((length >> 24)%256); Array.Copy(data, 0, m_shape.ExtraParams, i, data.Length); ScheduleFullUpdate(); @@ -2416,14 +1995,14 @@ namespace OpenSim.Region.Environment.Scenes public byte ConvertScriptUintToByte(uint indata) { - byte outdata = (byte) TextureAnimFlags.NONE; - if ((indata & 1) != 0) outdata |= (byte) TextureAnimFlags.ANIM_ON; - if ((indata & 2) != 0) outdata |= (byte) TextureAnimFlags.LOOP; - if ((indata & 4) != 0) outdata |= (byte) TextureAnimFlags.REVERSE; - if ((indata & 8) != 0) outdata |= (byte) TextureAnimFlags.PING_PONG; - if ((indata & 16) != 0) outdata |= (byte) TextureAnimFlags.SMOOTH; - if ((indata & 32) != 0) outdata |= (byte) TextureAnimFlags.ROTATE; - if ((indata & 64) != 0) outdata |= (byte) TextureAnimFlags.SCALE; + byte outdata = (byte)TextureAnimFlags.NONE; + if ((indata & 1) != 0) outdata |= (byte)TextureAnimFlags.ANIM_ON; + if ((indata & 2) != 0) outdata |= (byte)TextureAnimFlags.LOOP; + if ((indata & 4) != 0) outdata |= (byte)TextureAnimFlags.REVERSE; + if ((indata & 8) != 0) outdata |= (byte)TextureAnimFlags.PING_PONG; + if ((indata & 16) != 0) outdata |= (byte)TextureAnimFlags.SMOOTH; + if ((indata & 32) != 0) outdata |= (byte)TextureAnimFlags.ROTATE; + if ((indata & 64) != 0) outdata |= (byte)TextureAnimFlags.SCALE; return outdata; } @@ -2435,17 +2014,13 @@ namespace OpenSim.Region.Environment.Scenes // The flags don't like conversion from uint to byte, so we have to do // it the crappy way. See the above function :( - data[pos] = ConvertScriptUintToByte(pTexAnim.Flags); - pos++; - data[pos] = (byte) pTexAnim.Face; - pos++; - data[pos] = (byte) pTexAnim.SizeX; - pos++; - data[pos] = (byte) pTexAnim.SizeY; - pos++; + data[pos] = ConvertScriptUintToByte(pTexAnim.Flags); pos++; + data[pos] = (byte)pTexAnim.Face; pos++; + data[pos] = (byte)pTexAnim.SizeX; pos++; + data[pos] = (byte)pTexAnim.SizeY; pos++; Helpers.FloatToBytes(pTexAnim.Start).CopyTo(data, pos); - Helpers.FloatToBytes(pTexAnim.Length).CopyTo(data, pos + 4); + Helpers.FloatToBytes(pTexAnim.Length ).CopyTo(data, pos + 4); Helpers.FloatToBytes(pTexAnim.Rate).CopyTo(data, pos + 8); m_TextureAnimation = data; @@ -2496,7 +2071,6 @@ namespace OpenSim.Region.Environment.Scenes #endregion #region Sound - public void PreloadSound(string sound) { LLUUID ownerID = OwnerID; @@ -2522,7 +2096,7 @@ namespace OpenSim.Region.Environment.Scenes foreach (ScenePresence p in avatarts) { // TODO: some filtering by distance of avatar - + p.ControllingClient.SendPreLoadSound(objectID, objectID, soundID); } } @@ -2537,7 +2111,7 @@ namespace OpenSim.Region.Environment.Scenes List avatarts = m_parentGroup.Scene.GetAvatars(); foreach (ScenePresence p in avatarts) { - p.ControllingClient.SendAttachedSoundGainChange(UUID, (float) volume); + p.ControllingClient.SendAttachedSoundGainChange(UUID, (float)volume); } } @@ -2563,7 +2137,7 @@ namespace OpenSim.Region.Environment.Scenes SceneObjectPart op = this; foreach (KeyValuePair item in op.TaskInventory) { - if (item.Value.Name == sound && item.Value.Type == (int) AssetType.Sound) + if (item.Value.Name == sound && item.Value.Type == (int)AssetType.Sound) { soundID = item.Value.ItemID; break; @@ -2571,26 +2145,26 @@ namespace OpenSim.Region.Environment.Scenes } } - if (soundID == LLUUID.Zero) + if(soundID == LLUUID.Zero) return; List avatarts = m_parentGroup.Scene.GetAvatars(); foreach (ScenePresence p in avatarts) { - double dis = Util.GetDistanceTo(p.AbsolutePosition, position); - if (dis > 100.0) // Max audio distance + double dis=Util.GetDistanceTo(p.AbsolutePosition, position); + if(dis > 100.0) // Max audio distance continue; // Scale by distance - volume *= ((100.0 - dis) / 100.0); + volume*=((100.0-dis)/100.0); if (triggered) { - p.ControllingClient.SendTriggeredSound(soundID, ownerID, objectID, parentID, regionHandle, position, (float) volume); + p.ControllingClient.SendTriggeredSound(soundID, ownerID, objectID, parentID, regionHandle, position, (float)volume); } else { - p.ControllingClient.SendPlayAttachedSound(soundID, objectID, ownerID, (float) volume, flags); + p.ControllingClient.SendPlayAttachedSound(soundID, objectID, ownerID, (float)volume, flags); } } } @@ -2607,57 +2181,513 @@ namespace OpenSim.Region.Environment.Scenes { StoreUndoState(); m_shape.Scale = scale; - + ScheduleFullUpdate(); } #endregion - #region Copying + public void UpdatePermissions(LLUUID AgentID, byte field, uint localID, uint mask, byte addRemTF) + { + bool set = addRemTF == 1; + + // Are we the owner? + if (AgentID == OwnerID) + { + switch (field) + { + case 2: + OwnerMask = ApplyMask(OwnerMask, set, mask); + break; + case 4: + GroupMask = ApplyMask(GroupMask, set, mask); + break; + case 8: + EveryoneMask = ApplyMask(EveryoneMask, set, mask); + break; + case 16: + NextOwnerMask = ApplyMask(NextOwnerMask, set, mask); + break; + } + SendFullUpdateToAllClients(); + + SendObjectPropertiesToClient(AgentID); + + } + } + + private void SendObjectPropertiesToClient(LLUUID AgentID) + { + List avatars = m_parentGroup.GetScenePresences(); + for (int i = 0; i < avatars.Count; i++) + { + // Ugly reference :( + if (avatars[i].UUID == AgentID) + { + m_parentGroup.GetProperties(avatars[i].ControllingClient); + } + } + } + + private uint ApplyMask(uint val, bool set, uint mask) + { + if (set) + { + return val |= mask; + } + else + { + return val &= ~mask; + } + } + + #region Client Update Methods + + /// + /// Tell all scene presences that they should send updates for this part to their clients + /// + public void AddFullUpdateToAllAvatars() + { + List avatars = m_parentGroup.GetScenePresences(); + for (int i = 0; i < avatars.Count; i++) + { + avatars[i].QueuePartForUpdate(this); + } + } + + public void SendFullUpdateToAllClientsExcept(LLUUID agentID) + { + List avatars = m_parentGroup.GetScenePresences(); + for (int i = 0; i < avatars.Count; i++) + { + // Ugly reference :( + if (avatars[i].UUID != agentID) + { + m_parentGroup.SendPartFullUpdate(avatars[i].ControllingClient, this, + avatars[i].GenerateClientFlags(UUID)); + } + } + } + + + public void AddFullUpdateToAvatar(ScenePresence presence) + { + presence.QueuePartForUpdate(this); + } /// - /// Duplicates this part. + /// /// - /// - public SceneObjectPart Copy(uint localID, LLUUID AgentID, LLUUID GroupID, int linkNum) + public void SendFullUpdateToAllClients() { - SceneObjectPart dupe = (SceneObjectPart) MemberwiseClone(); - dupe.m_shape = m_shape.Copy(); - dupe.m_regionHandle = m_regionHandle; - dupe.UUID = LLUUID.Random(); - dupe.LocalId = localID; - dupe.OwnerID = AgentID; - dupe.GroupID = GroupID; - dupe.GroupPosition = new LLVector3(GroupPosition.X, GroupPosition.Y, GroupPosition.Z); - dupe.OffsetPosition = new LLVector3(OffsetPosition.X, OffsetPosition.Y, OffsetPosition.Z); - dupe.RotationOffset = - new LLQuaternion(RotationOffset.X, RotationOffset.Y, RotationOffset.Z, RotationOffset.W); - dupe.Velocity = new LLVector3(0, 0, 0); - dupe.Acceleration = new LLVector3(0, 0, 0); - dupe.AngularVelocity = new LLVector3(0, 0, 0); - dupe.ObjectFlags = ObjectFlags; + List avatars = m_parentGroup.GetScenePresences(); + for (int i = 0; i < avatars.Count; i++) + { + // Ugly reference :( + m_parentGroup.SendPartFullUpdate(avatars[i].ControllingClient, this, + avatars[i].GenerateClientFlags(UUID)); + } + } - dupe.OwnershipCost = OwnershipCost; - dupe.ObjectSaleType = ObjectSaleType; - dupe.SalePrice = SalePrice; - dupe.Category = Category; + /// + /// + /// + /// + public void SendFullUpdate(IClientAPI remoteClient, uint clientFlags) + { + m_parentGroup.SendPartFullUpdate(remoteClient, this, clientFlags); + } - dupe.TaskInventory = (TaskInventoryDictionary) dupe.TaskInventory.Clone(); + /// + /// Sends a full update to the client + /// + /// + /// + public void SendFullUpdateToClient(IClientAPI remoteClient, uint clientflags) + { + LLVector3 lPos; + lPos = OffsetPosition; + SendFullUpdateToClient(remoteClient, lPos, clientflags); + } + + /// + /// Sends a full update to the client + /// + /// + /// + /// + public void SendFullUpdateToClient(IClientAPI remoteClient, LLVector3 lPos, uint clientFlags) + { + LLQuaternion lRot; + lRot = RotationOffset; + clientFlags &= ~(uint) LLObject.ObjectFlags.CreateSelected; - dupe.ResetIDs(linkNum); + if (remoteClient.AgentId == OwnerID) + { + if ((uint) (Flags & LLObject.ObjectFlags.CreateSelected) != 0) + { + clientFlags |= (uint) LLObject.ObjectFlags.CreateSelected; + Flags &= ~LLObject.ObjectFlags.CreateSelected; + } + } - // This may be wrong... it might have to be applied in SceneObjectGroup to the object that's being duplicated. - dupe.LastOwnerID = ObjectOwner; - byte[] extraP = new byte[Shape.ExtraParams.Length]; - Array.Copy(Shape.ExtraParams, extraP, extraP.Length); - dupe.Shape.ExtraParams = extraP; - bool UsePhysics = ((dupe.ObjectFlags & (uint) LLObject.ObjectFlags.Physics) != 0); - dupe.DoPhysicsPropertyUpdate(UsePhysics, true); + byte[] color = new byte[] {m_color.R, m_color.G, m_color.B, m_color.A}; + remoteClient.SendPrimitiveToClient(m_regionHandle, (ushort)(m_parentGroup.GetTimeDilation() * (float)ushort.MaxValue), LocalId, m_shape, lPos, clientFlags, m_uuid, + OwnerID, + m_text, color, ParentID, m_particleSystem, lRot, m_clickAction, m_TextureAnimation, m_IsAttachment, m_attachmentPoint,fromAssetID); + } - return dupe; + /// Terse updates + public void AddTerseUpdateToAllAvatars() + { + List avatars = m_parentGroup.GetScenePresences(); + for (int i = 0; i < avatars.Count; i++) + { + avatars[i].QueuePartForUpdate(this); + } + } + + public void AddTerseUpdateToAvatar(ScenePresence presence) + { + presence.QueuePartForUpdate(this); + } + + /// + /// + /// + public void SendTerseUpdateToAllClients() + { + List avatars = m_parentGroup.GetScenePresences(); + for (int i = 0; i < avatars.Count; i++) + { + m_parentGroup.SendPartTerseUpdate(avatars[i].ControllingClient, this); + } + } + + /// + /// Send a terse update to the client. + /// + /// + public void SendTerseUpdate(IClientAPI remoteClient) + { + m_parentGroup.SendPartTerseUpdate(remoteClient, this); + } + + public void SendTerseUpdateToClient(IClientAPI remoteClient) + { + LLVector3 lPos; + lPos = OffsetPosition; + LLQuaternion mRot = RotationOffset; + if ((ObjectFlags & (uint) LLObject.ObjectFlags.Physics) == 0) + { + remoteClient.SendPrimTerseUpdate(m_regionHandle, (ushort)(m_parentGroup.GetTimeDilation() * (float)ushort.MaxValue), LocalId, lPos, mRot, Shape.State, fromAssetID); + } + else + { + remoteClient.SendPrimTerseUpdate(m_regionHandle, (ushort)(m_parentGroup.GetTimeDilation() * (float)ushort.MaxValue), LocalId, lPos, mRot, Velocity, + RotationalVelocity); + //System.Console.WriteLine("LID: " + LocalID + " RVel:" + RotationalVelocity.ToString() + " TD: " + ((ushort)(m_parentGroup.Scene.TimeDilation * 500000f)).ToString() + ":" + m_parentGroup.Scene.TimeDilation.ToString()); + } + } + + public void SendTerseUpdateToClient(IClientAPI remoteClient, LLVector3 lPos) + { + LLQuaternion mRot = RotationOffset; + if (m_IsAttachment) + { + remoteClient.SendPrimTerseUpdate(m_regionHandle, (ushort)(m_parentGroup.GetTimeDilation() * (float)ushort.MaxValue), LocalId, lPos, mRot, (byte)((m_attachmentPoint % 16) * 16 + (m_attachmentPoint / 16)),fromAssetID); + } + else + { + if ((ObjectFlags & (uint)LLObject.ObjectFlags.Physics) == 0) + { + remoteClient.SendPrimTerseUpdate(m_regionHandle, (ushort)(m_parentGroup.GetTimeDilation() * (float)ushort.MaxValue), LocalId, lPos, mRot, Shape.State, fromAssetID); + } + else + { + remoteClient.SendPrimTerseUpdate(m_regionHandle, (ushort)(m_parentGroup.GetTimeDilation() * (float)ushort.MaxValue), LocalId, lPos, mRot, Velocity, + RotationalVelocity); + //System.Console.WriteLine("LID: " + LocalID + "RVel:" + RotationalVelocity.ToString() + " TD: " + ((ushort)(m_parentGroup.Scene.TimeDilation * 500000f)).ToString() + ":" + m_parentGroup.Scene.TimeDilation.ToString()); + } + } } #endregion + + public virtual void UpdateMovement() + { + } + + #region Events + + public void PhysicsRequestingTerseUpdate() + { + if (PhysActor != null) + { + LLVector3 newpos = new LLVector3(PhysActor.Position.GetBytes(), 0); + if (newpos.X > 257f || newpos.X < -1f || newpos.Y > 257f || newpos.Y < -1f) + { + m_parentGroup.AbsolutePosition = newpos; + return; + } + + } + ScheduleTerseUpdate(); + + //SendTerseUpdateToAllClients(); + } + + #endregion + + public void PhysicsOutOfBounds(PhysicsVector pos) + { + m_log.Info("[PHYSICS]: Physical Object went out of bounds."); + RemFlag(LLObject.ObjectFlags.Physics); + DoPhysicsPropertyUpdate(false, true); + //m_parentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(PhysActor); + } + + public virtual void OnGrab(LLVector3 offsetPos, IClientAPI remoteClient) + { + } + + + public void SetText(string text) + { + Text = text; + ScheduleFullUpdate(); + } + + public void SetText(string text, Vector3 color, double alpha) + { + Color = Color.FromArgb(0xff - (int) (alpha*0xff), + (int) (color.x*0xff), + (int) (color.y*0xff), + (int) (color.z*0xff)); + SetText( text ); + } + + public int registerTargetWaypoint(LLVector3 target, float tolerance) + { + if (m_parentGroup != null) + { + return m_parentGroup.registerTargetWaypoint(target, tolerance); + } + return 0; + } + public void unregisterTargetWaypoint(int handle) + { + if (m_parentGroup != null) + { + m_parentGroup.unregisterTargetWaypoint(handle); + } + } + protected SceneObjectPart(SerializationInfo info, StreamingContext context) + { + //System.Console.WriteLine("SceneObjectPart Deserialize BGN"); + + if (info == null) + { + throw new ArgumentNullException("info"); + } + + /* + m_queue = (Queue)info.GetValue("m_queue", typeof(Queue)); + m_ids = (List)info.GetValue("m_ids", typeof(List)); + */ + + //System.Console.WriteLine("SceneObjectPart 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_inventoryFileName", m_inventoryFileName); + info.AddValue("m_folderID", m_folderID.UUID); + info.AddValue("PhysActor", PhysActor); + + Dictionary TaskInventory_work = new Dictionary(); + + foreach (LLUUID id in TaskInventory.Keys) + { + TaskInventory_work.Add(id.UUID, TaskInventory[id]); + } + + info.AddValue("TaskInventory", TaskInventory_work); + + info.AddValue("LastOwnerID", LastOwnerID.UUID); + info.AddValue("OwnerID", OwnerID.UUID); + info.AddValue("GroupID", GroupID.UUID); + + info.AddValue("OwnershipCost", OwnershipCost); + info.AddValue("ObjectSaleType", ObjectSaleType); + info.AddValue("SalePrice", SalePrice); + info.AddValue("Category", Category); + + info.AddValue("CreationDate", CreationDate); + info.AddValue("ParentID", ParentID); + + info.AddValue("OwnerMask", OwnerMask); + info.AddValue("NextOwnerMask", NextOwnerMask); + info.AddValue("GroupMask", GroupMask); + info.AddValue("EveryoneMask", EveryoneMask); + info.AddValue("BaseMask", BaseMask); + + info.AddValue("m_particleSystem", m_particleSystem); + + info.AddValue("TimeStampFull", TimeStampFull); + info.AddValue("TimeStampTerse", TimeStampTerse); + info.AddValue("TimeStampLastActivity", TimeStampLastActivity); + + info.AddValue("m_updateFlag", m_updateFlag); + info.AddValue("CreatorID", CreatorID.UUID); + + info.AddValue("m_inventorySerial", m_inventorySerial); + info.AddValue("m_uuid", m_uuid.UUID); + info.AddValue("m_localID", m_localId); + info.AddValue("m_name", m_name); + info.AddValue("m_flags", Flags); + info.AddValue("m_material", m_material); + info.AddValue("m_regionHandle", m_regionHandle); + + info.AddValue("m_groupPosition.X", m_groupPosition.X); + info.AddValue("m_groupPosition.Y", m_groupPosition.Y); + info.AddValue("m_groupPosition.Z", m_groupPosition.Z); + + info.AddValue("m_offsetPosition.X", m_offsetPosition.X); + info.AddValue("m_offsetPosition.Y", m_offsetPosition.Y); + info.AddValue("m_offsetPosition.Z", m_offsetPosition.Z); + + info.AddValue("m_rotationOffset.W", m_rotationOffset.W); + info.AddValue("m_rotationOffset.X", m_rotationOffset.X); + info.AddValue("m_rotationOffset.Y", m_rotationOffset.Y); + info.AddValue("m_rotationOffset.Z", m_rotationOffset.Z); + + info.AddValue("m_velocity.X", m_velocity.X); + info.AddValue("m_velocity.Y", m_velocity.Y); + info.AddValue("m_velocity.Z", m_velocity.Z); + + info.AddValue("m_rotationalvelocity.X", m_rotationalvelocity.X); + info.AddValue("m_rotationalvelocity.Y", m_rotationalvelocity.Y); + info.AddValue("m_rotationalvelocity.Z", m_rotationalvelocity.Z); + + info.AddValue("m_angularVelocity.X", m_angularVelocity.X); + info.AddValue("m_angularVelocity.Y", m_angularVelocity.Y); + info.AddValue("m_angularVelocity.Z", m_angularVelocity.Z); + + info.AddValue("m_acceleration.X", m_acceleration.X); + info.AddValue("m_acceleration.Y", m_acceleration.Y); + info.AddValue("m_acceleration.Z", m_acceleration.Z); + + info.AddValue("m_description", m_description); + info.AddValue("m_color", m_color); + info.AddValue("m_text", m_text); + info.AddValue("m_sitName", m_sitName); + info.AddValue("m_touchName", m_touchName); + info.AddValue("m_clickAction", m_clickAction); + info.AddValue("m_shape", m_shape); + info.AddValue("m_parentGroup", m_parentGroup); + info.AddValue("PayPrice", PayPrice); + } + + + public void Undo() + { + if (m_undo.Count > 0) + { + UndoState goback = m_undo.Pop(); + if (goback != null) + goback.PlaybackState(this); + } + } + + public void SetScriptEvents(LLUUID scriptid, int events) + { + scriptEvents oldparts; + lock (m_scriptEvents) + { + if (m_scriptEvents.ContainsKey(scriptid)) + { + oldparts = m_scriptEvents[scriptid]; + + // remove values from aggregated script events + m_scriptEvents[scriptid] = (scriptEvents) events; + } + else + { + m_scriptEvents.Add(scriptid, (scriptEvents) events); + } + } + aggregateScriptEvents(); + } + + public void RemoveScriptEvents(LLUUID scriptid) + { + lock (m_scriptEvents) + { + if (m_scriptEvents.ContainsKey(scriptid)) + { + scriptEvents oldparts = scriptEvents.None; + oldparts = (scriptEvents) m_scriptEvents[scriptid]; + + // remove values from aggregated script events + m_aggregateScriptEvents &= ~oldparts; + m_scriptEvents.Remove(scriptid); + } + } + aggregateScriptEvents(); + } + + public void aggregateScriptEvents() + { + // Aggregate script events + lock (m_scriptEvents) + { + foreach (scriptEvents s in m_scriptEvents.Values) + { + m_aggregateScriptEvents |= s; + } + } + + uint objectflagupdate = 0; + + if ( + ((m_aggregateScriptEvents & scriptEvents.touch) != 0) || + ((m_aggregateScriptEvents & scriptEvents.touch_end) != 0) || + ((m_aggregateScriptEvents & scriptEvents.touch_start) != 0) + ) + { + objectflagupdate |= (uint) LLObject.ObjectFlags.Touch; + } + + if ((m_aggregateScriptEvents & scriptEvents.money) != 0) + { + objectflagupdate |= (uint) LLObject.ObjectFlags.Money; + } + + if ( + ((m_aggregateScriptEvents & scriptEvents.collision) != 0) || + ((m_aggregateScriptEvents & scriptEvents.collision_end) != 0) || + ((m_aggregateScriptEvents & scriptEvents.collision_start) != 0) + ) + { + // subscribe to physics updates. + } + + LocalFlags=(LLObject.ObjectFlags)objectflagupdate; + + if(m_parentGroup != null && m_parentGroup.RootPart == this) + m_parentGroup.aggregateScriptEvents(); + else + ScheduleFullUpdate(); + } } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index 4cdf7f185b..74e9cdcfc4 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs @@ -40,112 +40,118 @@ using OpenSim.Region.Physics.Manager; namespace OpenSim.Region.Environment.Scenes { - [Serializable] + [Serializable] public class ScenePresence : EntityBase, ISerializable { // ~ScenePresence() // { // System.Console.WriteLine("[ScenePresence] Destructor called"); // } - - #region Delegates - - public delegate void SignificantClientMovement(IClientAPI remote_client); - - #endregion - + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); public static AvatarAnimations Animations = new AvatarAnimations(); public static byte[] DefaultTexture; - private readonly Vector3[] Dir_Vectors = new Vector3[6]; - private readonly uint m_AgentControlFlags = 0; - private readonly List m_animations = new List(); - private readonly List m_animationSeqs = new List(); - private readonly List m_forcesList = new List(); - private readonly List m_knownChildRegions = new List(); - private readonly List m_knownPrimUUID = new List(); - private readonly UpdateQueue m_partsUpdateQueue = new UpdateQueue(); - private readonly byte m_state = 0; - private readonly Dictionary m_updateTimes = new Dictionary(); - protected ulong crossingFromRegion; public LLUUID currentParcelUUID = LLUUID.Zero; - private SignificantClientMovement handlerSignificantClientMovement; //OnSignificantClientMovement; + private List m_animations = new List(); + private List m_animationSeqs = new List(); + public Vector3 lastKnownAllowedPosition = new Vector3(); + public bool sentMessageAboutRestrictedParcelFlyingDown = false; - public bool IsRestrictedToRegion; + private bool m_updateflag = false; + private byte m_movementflag = 0; + private readonly List m_forcesList = new List(); + private short m_updateCount = 0; + private uint m_requestedSitTargetID = 0; + private LLVector3 m_requestedSitOffset = new LLVector3(); + private float m_sitAvatarHeight = 2.0f; + private float m_godlevel = 0; + private LLVector3 m_LastChildAgentUpdatePosition = new LLVector3(); - public string JID = string.Empty; - public Vector3 lastKnownAllowedPosition; + private int m_perfMonMS = 0; - // Agent moves with a PID controller causing a force to be exerted. - private LLVector3 lastPhysPos; - protected AvatarAppearance m_appearance; + private bool m_setAlwaysRun = false; - protected List m_attachments = new List(); - private float m_avHeight = 127.0f; private Quaternion m_bodyRot; + public bool IsRestrictedToRegion = false; + + public string JID = string.Empty; + + // Agent moves with a PID controller causing a force to be exerted. + private bool m_newForce = false; + private bool m_newCoarseLocations = true; + private bool m_gotAllObjectsInScene = false; + + private LLVector3 m_lastVelocity = LLVector3.Zero; + + // Default AV Height + private float m_avHeight = 127.0f; + + protected RegionInfo m_regionInfo; + protected ulong crossingFromRegion = 0; + + private readonly Vector3[] Dir_Vectors = new Vector3[6]; + private LLVector3 lastPhysPos = new LLVector3(); + // Position of agent's camera in world (region cordinates) + protected Vector3 m_CameraCenter = new Vector3(0, 0, 0); // Use these three vectors to figure out what the agent is looking at // Convert it to a Matrix and/or Quaternion protected Vector3 m_CameraAtAxis = new Vector3(0, 0, 0); - protected Vector3 m_CameraCenter = new Vector3(0, 0, 0); protected Vector3 m_CameraLeftAxis = new Vector3(0, 0, 0); protected Vector3 m_CameraUpAxis = new Vector3(0, 0, 0); - protected float m_DrawDistance; - private float m_godlevel; - private bool m_gotAllObjectsInScene; - private LLQuaternion m_headrotation; - private LLVector3 m_LastChildAgentUpdatePosition; - private LLVector3 m_lastVelocity = LLVector3.Zero; - private byte m_movementflag; - private bool m_newCoarseLocations = true; - private bool m_newForce; - private int m_perfMonMS; - protected RegionInfo m_regionInfo; - private LLVector3 m_requestedSitOffset; - private uint m_requestedSitTargetID; - private bool m_setAlwaysRun; - private float m_sitAvatarHeight = 2.0f; - private short m_updateCount; - private bool m_updateflag; + private uint m_AgentControlFlags = (uint) 0; + private LLQuaternion m_headrotation = new LLQuaternion(); + private byte m_state = (byte) 0; //Reuse the LLVector3 instead of creating a new one on the UpdateMovement method - private LLVector3 movementvector; + private LLVector3 movementvector = new LLVector3(); + + private List m_knownPrimUUID = new List(); + + // Agent's Draw distance. + protected float m_DrawDistance = 0f; + + protected AvatarAppearance m_appearance; + + protected List m_attachments = new List(); + + //neighbouring regions we have enabled a child agent in + private readonly List m_knownChildRegions = new List(); + + private SignificantClientMovement handlerSignificantClientMovement = null; //OnSignificantClientMovement; + + /// + /// Implemented Control Flags + /// + private enum Dir_ControlFlags + { + DIR_CONTROL_FLAG_FORWARD = AgentManager.ControlFlags.AGENT_CONTROL_AT_POS, + DIR_CONTROL_FLAG_BACK = AgentManager.ControlFlags.AGENT_CONTROL_AT_NEG, + DIR_CONTROL_FLAG_LEFT = AgentManager.ControlFlags.AGENT_CONTROL_LEFT_POS, + DIR_CONTROL_FLAG_RIGHT = AgentManager.ControlFlags.AGENT_CONTROL_LEFT_NEG, + DIR_CONTROL_FLAG_UP = AgentManager.ControlFlags.AGENT_CONTROL_UP_POS, + DIR_CONTROL_FLAG_DOWN = AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG, + DIR_CONTROL_FLAG_DOWN_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG + } /// /// Position at which a significant movement was made /// - private LLVector3 posLastSignificantMove; + private LLVector3 posLastSignificantMove = new LLVector3(); - public bool sentMessageAboutRestrictedParcelFlyingDown; + public delegate void SignificantClientMovement(IClientAPI remote_client); + + public event SignificantClientMovement OnSignificantClientMovement; + + private UpdateQueue m_partsUpdateQueue = new UpdateQueue(); + private Dictionary m_updateTimes = new Dictionary(); #region Properties - private readonly string m_firstname; - private readonly string m_lastname; - private readonly ulong m_regionHandle; - protected bool m_allowMovement = true; - - /// - /// This works out to be the ClientView object associated with this avatar, or it's UDP connection manager - /// - private IClientAPI m_controllingClient; - - /// - /// If this is true, agent doesn't have a representation in this scene. - /// this is an agent 'looking into' this scene from a nearby scene(region) - /// - /// if False, this agent has a representation in this scene - /// - private bool m_isChildAgent = true; - - private uint m_parentID; - protected LLVector3 m_parentPosition; - protected PhysicsActor m_physicsActor; - /// /// Physical scene representation of this Avatar. /// @@ -161,6 +167,16 @@ namespace OpenSim.Region.Environment.Scenes get { return m_movementflag; } } + public bool KnownPrim(LLUUID primID) + { + if (m_knownPrimUUID.Contains(primID)) + { + return true; + } + m_knownPrimUUID.Add(primID); + return false; + } + public bool Updated { @@ -168,6 +184,8 @@ namespace OpenSim.Region.Environment.Scenes get { return m_updateflag; } } + private readonly ulong m_regionHandle; + public ulong RegionHandle { get { return m_regionHandle; } @@ -178,11 +196,15 @@ namespace OpenSim.Region.Environment.Scenes get { return m_CameraCenter; } } + private readonly string m_firstname; + public string Firstname { get { return m_firstname; } } + private readonly string m_lastname; + public string Lastname { get { return m_lastname; } @@ -193,18 +215,29 @@ namespace OpenSim.Region.Environment.Scenes get { return m_DrawDistance; } } + protected bool m_allowMovement = true; + public bool AllowMovement { get { return m_allowMovement; } set { m_allowMovement = value; } } + /// + /// This works out to be the ClientView object associated with this avatar, or it's UDP connection manager + /// + private IClientAPI m_controllingClient; + + protected PhysicsActor m_physicsActor; + public IClientAPI ControllingClient { get { return m_controllingClient; } set { m_controllingClient = value; } } + protected LLVector3 m_parentPosition = new LLVector3(); + /// /// Absolute position of this avatar in 'region cordinates' /// @@ -239,7 +272,7 @@ namespace OpenSim.Region.Environment.Scenes } m_pos = value; - m_parentPosition = new LLVector3(0, 0, 0); + m_parentPosition=new LLVector3(0, 0, 0); } } @@ -280,12 +313,22 @@ namespace OpenSim.Region.Environment.Scenes } } + /// + /// If this is true, agent doesn't have a representation in this scene. + /// this is an agent 'looking into' this scene from a nearby scene(region) + /// + /// if False, this agent has a representation in this scene + /// + private bool m_isChildAgent = true; + public bool IsChildAgent { get { return m_isChildAgent; } set { m_isChildAgent = value; } } + private uint m_parentID = 0; + public uint ParentID { get { return m_parentID; } @@ -300,16 +343,6 @@ namespace OpenSim.Region.Environment.Scenes get { return m_knownChildRegions; } } - public bool KnownPrim(LLUUID primID) - { - if (m_knownPrimUUID.Contains(primID)) - { - return true; - } - m_knownPrimUUID.Add(primID); - return false; - } - #endregion #region Constructor(s) @@ -387,360 +420,6 @@ namespace OpenSim.Region.Environment.Scenes #endregion - static ScenePresence() - { - LLObject.TextureEntry textu = AvatarAppearance.GetDefaultTextureEntry(); - DefaultTexture = textu.ToBytes(); - } - - public ScenePresence() - { -/* JB - if (Animations == null) - { - Animations = new AvatarAnimations(); - Animations.LoadAnims(); - } -*/ - if (DefaultTexture == null) - { - LLObject.TextureEntry textu = AvatarAppearance.GetDefaultTextureEntry(); - DefaultTexture = textu.ToBytes(); - } - } - - protected ScenePresence(SerializationInfo info, StreamingContext context) - : base(info, context) - { - //System.Console.WriteLine("ScenePresence Deserialize BGN"); - - if (info == null) - { - throw new ArgumentNullException("info"); - } -/* JB - if (Animations == null) - { - Animations = new AvatarAnimations(); - Animations.LoadAnims(); - } -*/ - if (DefaultTexture == null) - { - LLObject.TextureEntry textu = AvatarAppearance.GetDefaultTextureEntry(); - DefaultTexture = textu.ToBytes(); - } - - List animations_work = (List) info.GetValue("m_animations", typeof (List)); - - foreach (Guid guid in animations_work) - { - m_animations.Add(new LLUUID(guid)); - } - - m_animationSeqs = (List) info.GetValue("m_animationSeqs", typeof (List)); - m_updateflag = (bool) info.GetValue("m_updateflag", typeof (bool)); - m_movementflag = (byte) info.GetValue("m_movementflag", typeof (byte)); - m_forcesList = (List) info.GetValue("m_forcesList", typeof (List)); - m_updateCount = (short) info.GetValue("m_updateCount", typeof (short)); - m_requestedSitTargetID = (uint) info.GetValue("m_requestedSitTargetID", typeof (uint)); - - m_requestedSitOffset - = new LLVector3( - (float) info.GetValue("m_requestedSitOffset.X", typeof (float)), - (float) info.GetValue("m_requestedSitOffset.Y", typeof (float)), - (float) info.GetValue("m_requestedSitOffset.Z", typeof (float))); - - m_sitAvatarHeight = (float) info.GetValue("m_sitAvatarHeight", typeof (float)); - m_godlevel = (float) info.GetValue("m_godlevel", typeof (float)); - m_setAlwaysRun = (bool) info.GetValue("m_setAlwaysRun", typeof (bool)); - - m_bodyRot - = new Quaternion( - (float) info.GetValue("m_bodyRot.w", typeof (float)), - (float) info.GetValue("m_bodyRot.x", typeof (float)), - (float) info.GetValue("m_bodyRot.y", typeof (float)), - (float) info.GetValue("m_bodyRot.z", typeof (float))); - - IsRestrictedToRegion = (bool) info.GetValue("IsRestrictedToRegion", typeof (bool)); - m_newForce = (bool) info.GetValue("m_newForce", typeof (bool)); - //m_newAvatar = (bool)info.GetValue("m_newAvatar", typeof(bool)); - m_newCoarseLocations = (bool) info.GetValue("m_newCoarseLocations", typeof (bool)); - m_gotAllObjectsInScene = (bool) info.GetValue("m_gotAllObjectsInScene", typeof (bool)); - m_avHeight = (float) info.GetValue("m_avHeight", typeof (float)); - crossingFromRegion = (ulong) info.GetValue("crossingFromRegion", typeof (ulong)); - - List Dir_Vectors_work = (List) info.GetValue("Dir_Vectors", typeof (List)); - List Dir_Vectors_work2 = new List(); - - foreach (float[] f3 in Dir_Vectors_work) - { - Dir_Vectors_work2.Add(new Vector3(f3[0], f3[1], f3[2])); - } - - Dir_Vectors = Dir_Vectors_work2.ToArray(); - - lastPhysPos - = new LLVector3( - (float) info.GetValue("lastPhysPos.X", typeof (float)), - (float) info.GetValue("lastPhysPos.Y", typeof (float)), - (float) info.GetValue("lastPhysPos.Z", typeof (float))); - - m_CameraCenter - = new Vector3( - (float) info.GetValue("m_CameraCenter.X", typeof (float)), - (float) info.GetValue("m_CameraCenter.Y", typeof (float)), - (float) info.GetValue("m_CameraCenter.Z", typeof (float))); - - m_CameraAtAxis - = new Vector3( - (float) info.GetValue("m_CameraAtAxis.X", typeof (float)), - (float) info.GetValue("m_CameraAtAxis.Y", typeof (float)), - (float) info.GetValue("m_CameraAtAxis.Z", typeof (float))); - - m_CameraLeftAxis - = new Vector3( - (float) info.GetValue("m_CameraLeftAxis.X", typeof (float)), - (float) info.GetValue("m_CameraLeftAxis.Y", typeof (float)), - (float) info.GetValue("m_CameraLeftAxis.Z", typeof (float))); - - m_CameraUpAxis - = new Vector3( - (float) info.GetValue("m_CameraUpAxis.X", typeof (float)), - (float) info.GetValue("m_CameraUpAxis.Y", typeof (float)), - (float) info.GetValue("m_CameraUpAxis.Z", typeof (float))); - - m_DrawDistance = (float) info.GetValue("m_DrawDistance", typeof (float)); - m_appearance = (AvatarAppearance) info.GetValue("m_appearance", typeof (AvatarAppearance)); - m_knownChildRegions = (List) info.GetValue("m_knownChildRegions", typeof (List)); - - posLastSignificantMove - = new LLVector3( - (float) info.GetValue("posLastSignificantMove.X", typeof (float)), - (float) info.GetValue("posLastSignificantMove.Y", typeof (float)), - (float) info.GetValue("posLastSignificantMove.Z", typeof (float))); - - // m_partsUpdateQueue = (UpdateQueue)info.GetValue("m_partsUpdateQueue", typeof(UpdateQueue)); - - /* - Dictionary updateTimes_work - = (Dictionary)info.GetValue("m_updateTimes", typeof(Dictionary)); - - foreach (Guid id in updateTimes_work.Keys) - { - m_updateTimes.Add(new LLUUID(id), updateTimes_work[id]); - } - */ - m_regionHandle = (ulong) info.GetValue("m_regionHandle", typeof (ulong)); - m_firstname = (string) info.GetValue("m_firstname", typeof (string)); - m_lastname = (string) info.GetValue("m_lastname", typeof (string)); - m_allowMovement = (bool) info.GetValue("m_allowMovement", typeof (bool)); - m_parentPosition = new LLVector3((float) info.GetValue("m_parentPosition.X", typeof (float)), - (float) info.GetValue("m_parentPosition.Y", typeof (float)), - (float) info.GetValue("m_parentPosition.Z", typeof (float))); - - m_isChildAgent = (bool) info.GetValue("m_isChildAgent", typeof (bool)); - m_parentID = (uint) info.GetValue("m_parentID", typeof (uint)); - -// for OpenSim_v0.5 - currentParcelUUID = new LLUUID((Guid) info.GetValue("currentParcelUUID", typeof (Guid))); - - lastKnownAllowedPosition - = new Vector3( - (float) info.GetValue("lastKnownAllowedPosition.X", typeof (float)), - (float) info.GetValue("lastKnownAllowedPosition.Y", typeof (float)), - (float) info.GetValue("lastKnownAllowedPosition.Z", typeof (float))); - - sentMessageAboutRestrictedParcelFlyingDown = (bool) info.GetValue("sentMessageAboutRestrictedParcelFlyingDown", typeof (bool)); - - m_LastChildAgentUpdatePosition - = new LLVector3( - (float) info.GetValue("m_LastChildAgentUpdatePosition.X", typeof (float)), - (float) info.GetValue("m_LastChildAgentUpdatePosition.Y", typeof (float)), - (float) info.GetValue("m_LastChildAgentUpdatePosition.Z", typeof (float))); - - m_perfMonMS = (int) info.GetValue("m_perfMonMS", typeof (int)); - m_AgentControlFlags = (uint) info.GetValue("m_AgentControlFlags", typeof (uint)); - - m_headrotation - = new LLQuaternion( - (float) info.GetValue("m_headrotation.W", typeof (float)), - (float) info.GetValue("m_headrotation.X", typeof (float)), - (float) info.GetValue("m_headrotation.Y", typeof (float)), - (float) info.GetValue("m_headrotation.Z", typeof (float))); - - m_state = (byte) info.GetValue("m_state", typeof (byte)); - - List knownPrimUUID_work = (List) info.GetValue("m_knownPrimUUID", typeof (List)); - - foreach (Guid id in knownPrimUUID_work) - { - m_knownPrimUUID.Add(new LLUUID(id)); - } - - //System.Console.WriteLine("ScenePresence Deserialize END"); - } - - #region ISerializable Members - - [SecurityPermission(SecurityAction.LinkDemand, - Flags = SecurityPermissionFlag.SerializationFormatter)] - public override void GetObjectData( - SerializationInfo info, StreamingContext context) - { - if (info == null) - { - throw new ArgumentNullException("info"); - } - - base.GetObjectData(info, context); - - List animations_work = new List(); - - foreach (LLUUID uuid in m_animations) - { - animations_work.Add(uuid.UUID); - } - - info.AddValue("m_animations", animations_work); - - info.AddValue("m_animationSeqs", m_animationSeqs); - info.AddValue("m_updateflag", m_updateflag); - info.AddValue("m_movementflag", m_movementflag); - info.AddValue("m_forcesList", m_forcesList); - info.AddValue("m_updateCount", m_updateCount); - info.AddValue("m_requestedSitTargetID", m_requestedSitTargetID); - - // LLVector3 - info.AddValue("m_requestedSitOffset.X", m_requestedSitOffset.X); - info.AddValue("m_requestedSitOffset.Y", m_requestedSitOffset.Y); - info.AddValue("m_requestedSitOffset.Z", m_requestedSitOffset.Z); - - info.AddValue("m_sitAvatarHeight", m_sitAvatarHeight); - info.AddValue("m_godlevel", m_godlevel); - info.AddValue("m_setAlwaysRun", m_setAlwaysRun); - - // Quaternion - info.AddValue("m_bodyRot.w", m_bodyRot.w); - info.AddValue("m_bodyRot.x", m_bodyRot.x); - info.AddValue("m_bodyRot.y", m_bodyRot.y); - info.AddValue("m_bodyRot.z", m_bodyRot.z); - - info.AddValue("IsRestrictedToRegion", IsRestrictedToRegion); - info.AddValue("m_newForce", m_newForce); - //info.AddValue("m_newAvatar", m_newAvatar); - info.AddValue("m_newCoarseLocations", m_newCoarseLocations); - info.AddValue("m_gotAllObjectsInScene", m_gotAllObjectsInScene); - info.AddValue("m_avHeight", m_avHeight); - - // info.AddValue("m_regionInfo", m_regionInfo); - - info.AddValue("crossingFromRegion", crossingFromRegion); - - List Dir_Vectors_work = new List(); - - foreach (Vector3 v3 in Dir_Vectors) - { - Dir_Vectors_work.Add(new[] {v3.x, v3.y, v3.z}); - } - - info.AddValue("Dir_Vectors", Dir_Vectors_work); - - // LLVector3 - info.AddValue("lastPhysPos.X", lastPhysPos.X); - info.AddValue("lastPhysPos.Y", lastPhysPos.Y); - info.AddValue("lastPhysPos.Z", lastPhysPos.Z); - - // Vector3 - info.AddValue("m_CameraCenter.X", m_CameraCenter.x); - info.AddValue("m_CameraCenter.Y", m_CameraCenter.y); - info.AddValue("m_CameraCenter.Z", m_CameraCenter.z); - - // Vector3 - info.AddValue("m_CameraAtAxis.X", m_CameraAtAxis.x); - info.AddValue("m_CameraAtAxis.Y", m_CameraAtAxis.y); - info.AddValue("m_CameraAtAxis.Z", m_CameraAtAxis.z); - - // Vector3 - info.AddValue("m_CameraLeftAxis.X", m_CameraLeftAxis.x); - info.AddValue("m_CameraLeftAxis.Y", m_CameraLeftAxis.y); - info.AddValue("m_CameraLeftAxis.Z", m_CameraLeftAxis.z); - - // Vector3 - info.AddValue("m_CameraUpAxis.X", m_CameraUpAxis.x); - info.AddValue("m_CameraUpAxis.Y", m_CameraUpAxis.y); - info.AddValue("m_CameraUpAxis.Z", m_CameraUpAxis.z); - - info.AddValue("m_DrawDistance", m_DrawDistance); - info.AddValue("m_appearance", m_appearance); - info.AddValue("m_knownChildRegions", m_knownChildRegions); - - // LLVector3 - info.AddValue("posLastSignificantMove.X", posLastSignificantMove.X); - info.AddValue("posLastSignificantMove.Y", posLastSignificantMove.Y); - info.AddValue("posLastSignificantMove.Z", posLastSignificantMove.Z); - - //info.AddValue("m_partsUpdateQueue", m_partsUpdateQueue); - - /* - Dictionary updateTimes_work = new Dictionary(); - - foreach ( LLUUID id in m_updateTimes.Keys) - { - updateTimes_work.Add(id.UUID, m_updateTimes[id]); - } - - info.AddValue("m_updateTimes", updateTimes_work); - */ - - info.AddValue("m_regionHandle", m_regionHandle); - info.AddValue("m_firstname", m_firstname); - info.AddValue("m_lastname", m_lastname); - info.AddValue("m_allowMovement", m_allowMovement); - //info.AddValue("m_physicsActor", m_physicsActor); - info.AddValue("m_parentPosition.X", m_parentPosition.X); - info.AddValue("m_parentPosition.Y", m_parentPosition.Y); - info.AddValue("m_parentPosition.Z", m_parentPosition.Z); - info.AddValue("m_isChildAgent", m_isChildAgent); - info.AddValue("m_parentID", m_parentID); - -// for OpenSim_v0.5 - info.AddValue("currentParcelUUID", currentParcelUUID.UUID); - - info.AddValue("lastKnownAllowedPosition.X", lastKnownAllowedPosition.x); - info.AddValue("lastKnownAllowedPosition.Y", lastKnownAllowedPosition.y); - info.AddValue("lastKnownAllowedPosition.Z", lastKnownAllowedPosition.z); - - info.AddValue("sentMessageAboutRestrictedParcelFlyingDown", sentMessageAboutRestrictedParcelFlyingDown); - - info.AddValue("m_LastChildAgentUpdatePosition.X", m_LastChildAgentUpdatePosition.X); - info.AddValue("m_LastChildAgentUpdatePosition.Y", m_LastChildAgentUpdatePosition.Y); - info.AddValue("m_LastChildAgentUpdatePosition.Z", m_LastChildAgentUpdatePosition.Z); - - info.AddValue("m_perfMonMS", m_perfMonMS); - info.AddValue("m_AgentControlFlags", m_AgentControlFlags); - - info.AddValue("m_headrotation.W", m_headrotation.W); - info.AddValue("m_headrotation.X", m_headrotation.X); - info.AddValue("m_headrotation.Y", m_headrotation.Y); - info.AddValue("m_headrotation.Z", m_headrotation.Z); - - info.AddValue("m_state", m_state); - - List knownPrimUUID_work = new List(); - - foreach (LLUUID id in m_knownPrimUUID) - { - knownPrimUUID_work.Add(id.UUID); - } - - info.AddValue("m_knownPrimUUID", knownPrimUUID_work); - } - - #endregion - - public event SignificantClientMovement OnSignificantClientMovement; - /// /// Add the part to the queue of parts for which we need to send an update to the client /// @@ -778,12 +457,12 @@ namespace OpenSim.Region.Environment.Scenes if (!m_gotAllObjectsInScene) { if (!m_isChildAgent || m_scene.m_seeIntoRegionFromNeighbor) - { + { m_scene.SendAllSceneObjectsToClient(this); - m_gotAllObjectsInScene = true; + m_gotAllObjectsInScene = true; } } - + if (m_partsUpdateQueue.Count > 0) { bool runUpdate = true; @@ -802,7 +481,7 @@ namespace OpenSim.Region.Environment.Scenes // m_log.DebugFormat( // "[SCENE PRESENCE]: Fully updating prim {0}, {1} - part timestamp {2}", // part.Name, part.UUID, part.TimeStampFull); - + part.SendFullUpdate(ControllingClient, GenerateClientFlags(part.UUID)); // We'll update to the part's timestamp rather than the current time to @@ -818,7 +497,7 @@ namespace OpenSim.Region.Environment.Scenes // m_log.DebugFormat( // "[SCENE PRESENCE]: Tersely updating prim {0}, {1} - part timestamp {2}", // part.Name, part.UUID, part.TimeStampTerse); - + part.SendTerseUpdate(ControllingClient); update.LastTerseUpdateTime = part.TimeStampTerse; @@ -851,235 +530,6 @@ namespace OpenSim.Region.Environment.Scenes AddNewMovement(position, rotation); } - /// - /// This allows the Sim owner the abiility to kick users from their sim currently. - /// It tells the client that the agent has permission to do so. - /// - public void GrantGodlikePowers(LLUUID agentID, LLUUID sessionID, LLUUID token, bool godStatus) - { - GrantGodlikePowersPacket respondPacket = new GrantGodlikePowersPacket(); - GrantGodlikePowersPacket.GrantDataBlock gdb = new GrantGodlikePowersPacket.GrantDataBlock(); - GrantGodlikePowersPacket.AgentDataBlock adb = new GrantGodlikePowersPacket.AgentDataBlock(); - - adb.AgentID = agentID; - adb.SessionID = sessionID; // More security - - if (godStatus) - { - gdb.GodLevel = 250; - m_godlevel = 250; - } - else - { - gdb.GodLevel = 0; - m_godlevel = 0; - } - - gdb.Token = token; - //respondPacket.AgentData = (GrantGodlikePowersPacket.AgentDataBlock)ablock; - respondPacket.GrantData = gdb; - respondPacket.AgentData = adb; - ControllingClient.OutPacket(respondPacket, ThrottleOutPacketType.Task); - } - - /// - /// This updates important decision making data about a child agent - /// The main purpose is to figure out what objects to send to a child agent that's in a neighboring region - /// - public void ChildAgentDataUpdate(ChildAgentDataUpdate cAgentData, uint tRegionX, uint tRegionY, uint rRegionX, uint rRegionY) - { - // - int shiftx = ((int) rRegionX - (int) tRegionX) * (int) Constants.RegionSize; - int shifty = ((int) rRegionY - (int) tRegionY) * (int) Constants.RegionSize; - - m_DrawDistance = cAgentData.drawdistance; - m_pos = new LLVector3(cAgentData.Position.x + shiftx, cAgentData.Position.y + shifty, cAgentData.Position.z); - - // It's hard to say here.. We can't really tell where the camera position is unless it's in world cordinates from the sending region - m_CameraCenter = - new Vector3(cAgentData.cameraPosition.x, cAgentData.cameraPosition.y, cAgentData.cameraPosition.z); - - - m_godlevel = cAgentData.godlevel; - SetHeight(cAgentData.AVHeight); - - ControllingClient.SetChildAgentThrottle(cAgentData.throttles); - - - // Sends out the objects in the user's draw distance if m_sendTasksToChild is true. - if (m_scene.m_seeIntoRegionFromNeighbor) - m_scene.SendAllSceneObjectsToClient(this); - //cAgentData.AVHeight; - //cAgentData.regionHandle; - //m_velocity = cAgentData.Velocity; - } - - /// - /// Handles part of the PID controller function for moving an avatar. - /// - public override void UpdateMovement() - { - m_newForce = false; - lock (m_forcesList) - { - if (m_forcesList.Count > 0) - { - for (int i = 0; i < m_forcesList.Count; i++) - { - NewForce force = m_forcesList[i]; - - m_updateflag = true; - try - { - movementvector.X = force.X; - movementvector.Y = force.Y; - movementvector.Z = force.Z; - Velocity = movementvector; - } - catch (NullReferenceException) - { - // Under extreme load, this returns a NullReference Exception that we can ignore. - // Ignoring this causes no movement to be sent to the physics engine... - // which when the scene is moving at 1 frame every 10 seconds, it doesn't really matter! - } - m_newForce = true; - } - for (int i = 0; i < m_forcesList.Count; i++) - { - m_forcesList.RemoveAt(0); - } - } - } - } - - public override void SetText(string text, Vector3 color, double alpha) - { - throw new Exception("Can't set Text on avatar."); - } - - /// - /// Adds a physical representation of the avatar to the Physics plugin - /// - public void AddToPhysicalScene() - { - PhysicsScene scene = m_scene.PhysicsScene; - - PhysicsVector pVec = - new PhysicsVector(AbsolutePosition.X, AbsolutePosition.Y, - AbsolutePosition.Z); - if (m_avHeight == 127.0f) - { - m_physicsActor = scene.AddAvatar(Firstname + "." + Lastname, pVec, new PhysicsVector(0, 0, 1.56f)); - } - else - { - m_physicsActor = scene.AddAvatar(Firstname + "." + Lastname, pVec, new PhysicsVector(0, 0, m_avHeight)); - } - //m_physicsActor.OnRequestTerseUpdate += SendTerseUpdateToAllClients; - m_physicsActor.OnCollisionUpdate += PhysicsCollisionUpdate; - m_physicsActor.LocalID = LocalId; - } - - // Event called by the physics plugin to tell the avatar about a collision. - private void PhysicsCollisionUpdate(EventArgs e) - { - bool isUserMoving = Velocity.X > 0 || Velocity.Y > 0; - UpdateMovementAnimations(isUserMoving); - } - - internal void Close() - { - lock (m_attachments) - { - foreach (SceneObjectGroup grp in m_attachments) - { - // ControllingClient may be null at this point! - m_scene.m_innerScene.DetachSingleAttachmentToInv(grp.GetFromAssetID(), ControllingClient); - } - m_attachments.Clear(); - } - lock (m_knownPrimUUID) - { - m_knownPrimUUID.Clear(); - } - lock (m_knownChildRegions) - { - m_knownChildRegions.Clear(); - } - lock (m_updateTimes) - { - m_updateTimes.Clear(); - } - lock (m_partsUpdateQueue) - { - m_partsUpdateQueue.Clear(); - } - - RemoveFromPhysicalScene(); - GC.Collect(); - } - - public void AddAttachment(SceneObjectGroup gobj) - { - lock (m_attachments) - { - m_attachments.Add(gobj); - } - } - - public void RemoveAttachment(SceneObjectGroup gobj) - { - lock (m_attachments) - { - if (m_attachments.Contains(gobj)) - { - m_attachments.Remove(gobj); - } - } - } - - public void CrossAttachmentsIntoNewRegion(ulong regionHandle) - { - lock (m_attachments) - { - foreach (SceneObjectGroup gobj in m_attachments) - { - // If the prim group is null then something must have happened to it! - if (gobj != null) - { - // Set the parent localID to 0 so it transfers over properly. - gobj.RootPart.SetParentLocalId(0); - gobj.RootPart.m_IsAttachment = false; - gobj.AbsolutePosition = gobj.RootPart.m_attachedPos; - gobj.RootPart.LastOwnerID = gobj.GetFromAssetID(); - m_scene.CrossPrimGroupIntoNewRegion(regionHandle, gobj); - } - } - m_attachments.Clear(); - } - } - - public void initializeScenePresence(IClientAPI client, RegionInfo region, Scene scene) - { - m_controllingClient = client; - m_regionInfo = region; - m_scene = scene; - RegisterToEvents(); - - /* - AbsolutePosition = client.StartPos; - - Animations = new AvatarAnimations(); - Animations.LoadAnims(); - - m_animations = new List(); - m_animations.Add(Animations.AnimsLLUUID["STAND"]); - m_animationSeqs.Add(m_controllingClient.NextAnimationSequenceNumber); - - SetDirectionVectors(); - */ - } - #region Status Methods /// @@ -1092,7 +542,7 @@ namespace OpenSim.Region.Environment.Scenes // m_log.DebugFormat( // "[SCENEPRESENCE]: Upgrading child agent {0}, {1} to a root agent in {2}", // Name, UUID, m_scene.RegionInfo.RegionName); - + m_isChildAgent = false; AbsolutePosition = pos; @@ -1108,7 +558,7 @@ namespace OpenSim.Region.Environment.Scenes //{ m_scene.SendAllSceneObjectsToClient(this); m_scene.LandChannel.sendLandUpdate(this, true); - + //m_gotAllObjectsInScene = true; //} } @@ -1122,9 +572,9 @@ namespace OpenSim.Region.Environment.Scenes /// public void MakeChildAgent() { - if (m_animations.Count > 0) + if(m_animations.Count > 0) { - LLUUID movement = m_animations[0]; + LLUUID movement=m_animations[0]; m_animations.Clear(); m_animationSeqs.Clear(); @@ -1134,7 +584,7 @@ namespace OpenSim.Region.Environment.Scenes // m_log.DebugFormat( // "[SCENEPRESENCE]: Downgrading child agent {0}, {1} to a root agent in {2}", // Name, UUID, m_scene.RegionInfo.RegionName); - + Velocity = new LLVector3(0, 0, 0); m_isChildAgent = true; m_scene.SwapRootAgentCount(true); @@ -1391,8 +841,9 @@ namespace OpenSim.Region.Environment.Scenes ((flags & (uint) AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG) != 0)); // Are the collision requirements fulfilled? - bool colliding = m_physicsActor.IsColliding; + bool colliding = (m_physicsActor.IsColliding == true); + if (m_physicsActor.Flying && colliding && controlland) { @@ -1406,9 +857,9 @@ namespace OpenSim.Region.Environment.Scenes UpdateMovementAnimations(update_movementflag); } } - + m_scene.EventManager.TriggerOnClientMovement(this); - + m_scene.AddAgentTime(System.Environment.TickCount - m_perfMonMS); } @@ -1435,9 +886,9 @@ namespace OpenSim.Region.Environment.Scenes AddToPhysicalScene(); } - m_pos += m_parentPosition + new LLVector3(0.0f, 0.0f, 2.0f * m_sitAvatarHeight); + m_pos += m_parentPosition + new LLVector3(0.0f, 0.0f, 2.0f*m_sitAvatarHeight); m_parentPosition = new LLVector3(); - + m_parentID = 0; SendFullUpdateToAllClients(); @@ -1540,7 +991,7 @@ namespace OpenSim.Region.Environment.Scenes } else { - m_log.Warn("Sit requested on unknown object: " + targetID); + m_log.Warn("Sit requested on unknown object: " + targetID.ToString()); } SendSitResponse(remoteClient, targetID, offset); } @@ -1602,11 +1053,11 @@ namespace OpenSim.Region.Environment.Scenes public void AddAnimation(LLUUID animID) { - if (m_isChildAgent) + if(m_isChildAgent) return; // Don't let this animation become the movement animation - if (m_animations.Count < 1) + if(m_animations.Count < 1) SetMovementAnimation(Animations.AnimsLLUUID["STAND"]); if (!m_animations.Contains(animID)) @@ -1619,7 +1070,7 @@ namespace OpenSim.Region.Environment.Scenes public void RemoveAnimation(LLUUID animID) { - if (m_isChildAgent) + if(m_isChildAgent) return; if (m_animations.Contains(animID)) @@ -1633,11 +1084,11 @@ namespace OpenSim.Region.Environment.Scenes // What a HACK!! Anim list really needs to be an object! int idx; - for (idx = 0; idx < m_animations.Count; idx++) + for(idx=0;idx < m_animations.Count;idx++) { - if (m_animations[idx] == animID) + if(m_animations[idx] == animID) { - int seq = m_animationSeqs[idx]; + int seq=m_animationSeqs[idx]; m_animations.Remove(animID); m_animationSeqs.Remove(seq); @@ -1666,7 +1117,7 @@ namespace OpenSim.Region.Environment.Scenes /// protected void SetMovementAnimation(LLUUID anim) { - if (m_animations.Count < 1) + if(m_animations.Count < 1) { m_animations.Add(Animations.AnimsLLUUID["STAND"]); m_animationSeqs.Add(1); @@ -1699,6 +1150,8 @@ namespace OpenSim.Region.Environment.Scenes /// protected void UpdateMovementAnimations(bool update_movementflag) { + + if (update_movementflag) { // Are we moving? @@ -1731,8 +1184,7 @@ namespace OpenSim.Region.Environment.Scenes SetMovementAnimation(Animations.AnimsLLUUID["JUMP"]); } catch (KeyNotFoundException) - { - } + { } } else if (m_setAlwaysRun) { @@ -1742,8 +1194,7 @@ namespace OpenSim.Region.Environment.Scenes SetMovementAnimation(Animations.AnimsLLUUID["RUN"]); } catch (KeyNotFoundException) - { - } + { } } else { @@ -1753,8 +1204,8 @@ namespace OpenSim.Region.Environment.Scenes SetMovementAnimation(Animations.AnimsLLUUID["WALK"]); } catch (KeyNotFoundException) - { - } + { } + } } else @@ -1788,14 +1239,15 @@ namespace OpenSim.Region.Environment.Scenes // We're not moving.. and we're not doing anything.. so play the stand animation try { + SetMovementAnimation(Animations.AnimsLLUUID["STAND"]); } catch (KeyNotFoundException) - { - } + { } } } } + } /// @@ -1810,13 +1262,13 @@ namespace OpenSim.Region.Environment.Scenes } m_perfMonMS = System.Environment.TickCount; - + m_rotation = rotation; NewForce newVelocity = new NewForce(); - Vector3 direc = rotation * vec; + Vector3 direc = rotation*vec; direc.Normalize(); - direc *= 0.03f * 128f; + direc *= 0.03f*128f; if (m_physicsActor.Flying) { direc *= 4; @@ -1848,8 +1300,7 @@ namespace OpenSim.Region.Environment.Scenes SetMovementAnimation(Animations.AnimsLLUUID["JUMP"]); } catch (KeyNotFoundException) - { - } + { } } } } @@ -1895,18 +1346,23 @@ namespace OpenSim.Region.Environment.Scenes m_updateCount = 0; } } - else if ((Util.GetDistanceTo(lastPhysPos, AbsolutePosition) > 0.02) || (Util.GetDistanceTo(m_lastVelocity, m_velocity) > 0.02)) - // physics-related movement + else if ((Util.GetDistanceTo(lastPhysPos, AbsolutePosition) > 0.02) || (Util.GetDistanceTo(m_lastVelocity, m_velocity) > 0.02)) // physics-related movement { + + // Send Terse Update to all clients updates lastPhysPos and m_lastVelocity // doing the above assures us that we know what we sent the clients last SendTerseUpdateToAllClients(); m_updateCount = 0; + + + } // followed suggestion from mic bowman. reversed the two lines below. CheckForBorderCrossing(); CheckForSignificantMovement(); // sends update to the modules. + } } @@ -1925,7 +1381,7 @@ namespace OpenSim.Region.Environment.Scenes LLVector3 pos = m_pos; LLVector3 vel = Velocity; LLQuaternion rot = new LLQuaternion(m_bodyRot.x, m_bodyRot.y, m_bodyRot.z, m_bodyRot.w); - remoteClient.SendAvatarTerseUpdate(m_regionHandle, (ushort) (m_scene.TimeDilation * ushort.MaxValue), LocalId, new LLVector3(pos.X, pos.Y, pos.Z), + remoteClient.SendAvatarTerseUpdate(m_regionHandle, (ushort)(m_scene.TimeDilation * (float)ushort.MaxValue), LocalId, new LLVector3(pos.X, pos.Y, pos.Z), new LLVector3(vel.X, vel.Y, vel.Z), rot); m_scene.AddAgentTime(System.Environment.TickCount - m_perfMonMS); @@ -1945,6 +1401,7 @@ namespace OpenSim.Region.Environment.Scenes lastPhysPos = AbsolutePosition; m_scene.AddAgentTime(System.Environment.TickCount - m_perfMonMS); + } public void SendCoarseLocations() @@ -2040,15 +1497,15 @@ namespace OpenSim.Region.Environment.Scenes /// public void SendAppearanceToAllOtherAgents() { - m_perfMonMS = System.Environment.TickCount; + m_perfMonMS=System.Environment.TickCount; m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence) + { + if (scenePresence.UUID != UUID) { - if (scenePresence.UUID != UUID) - { - m_appearance.SendAppearanceToOtherAgent(scenePresence); - } - }); + m_appearance.SendAppearanceToOtherAgent(scenePresence); + } + }); m_scene.AddAgentTime(System.Environment.TickCount - m_perfMonMS); } @@ -2077,7 +1534,7 @@ namespace OpenSim.Region.Environment.Scenes /// public void SendAnimPack(LLUUID[] animations, int[] seqs) { - if (m_isChildAgent) + if(m_isChildAgent) return; m_scene.Broadcast( @@ -2113,10 +1570,10 @@ namespace OpenSim.Region.Environment.Scenes } // Minimum Draw distance is 64 meters, the Radius of the draw distance sphere is 32m - if (Util.GetDistanceTo(AbsolutePosition, m_LastChildAgentUpdatePosition) > 32) + if (Util.GetDistanceTo(AbsolutePosition,m_LastChildAgentUpdatePosition) > 32) { ChildAgentDataUpdate cadu = new ChildAgentDataUpdate(); - cadu.ActiveGroupID = LLUUID.Zero.UUID; + cadu.ActiveGroupID=LLUUID.Zero.UUID; cadu.AgentID = UUID.UUID; cadu.alwaysrun = m_setAlwaysRun; cadu.AVHeight = m_avHeight; @@ -2128,8 +1585,8 @@ namespace OpenSim.Region.Environment.Scenes cadu.Position = new sLLVector3(AbsolutePosition); cadu.regionHandle = m_scene.RegionInfo.RegionHandle; cadu.throttles = ControllingClient.GetThrottlesPacked(1f); - cadu.Velocity = new sLLVector3(Velocity); - m_scene.SendOutChildAgentUpdates(cadu, this); + cadu.Velocity = new sLLVector3(Velocity); + m_scene.SendOutChildAgentUpdates(cadu,this); m_LastChildAgentUpdatePosition.X = AbsolutePosition.X; m_LastChildAgentUpdatePosition.Y = AbsolutePosition.Y; m_LastChildAgentUpdatePosition.Z = AbsolutePosition.Z; @@ -2149,9 +1606,9 @@ namespace OpenSim.Region.Environment.Scenes LLVector3 vel = Velocity; float timeStep = 0.1f; - pos2.X = pos2.X + (vel.X * timeStep); - pos2.Y = pos2.Y + (vel.Y * timeStep); - pos2.Z = pos2.Z + (vel.Z * timeStep); + pos2.X = pos2.X + (vel.X*timeStep); + pos2.Y = pos2.Y + (vel.Y*timeStep); + pos2.Z = pos2.Z + (vel.Z*timeStep); if ((pos2.X < 0) || (pos2.X > Constants.RegionSize)) { @@ -2206,10 +1663,10 @@ namespace OpenSim.Region.Environment.Scenes } LLVector3 vel = m_velocity; - ulong neighbourHandle = Helpers.UIntsToLong((neighbourx * Constants.RegionSize), (neighboury * Constants.RegionSize)); + ulong neighbourHandle = Helpers.UIntsToLong((uint)(neighbourx * Constants.RegionSize), (uint)(neighboury * Constants.RegionSize)); SimpleRegionInfo neighbourRegion = m_scene.RequestNeighbouringRegionInfo(neighbourHandle); if (neighbourRegion != null) - { + { // When the neighbour is informed of the border crossing, it will set up CAPS handlers for the avatar // This means we need to remove the current caps handler here and possibly compensate later, // in case both scenes are being hosted on the same region server. Messy @@ -2219,17 +1676,17 @@ namespace OpenSim.Region.Environment.Scenes m_scene.InformNeighbourOfCrossing(neighbourHandle, m_controllingClient.AgentId, newpos, m_physicsActor.Flying); if (res) - { + { AgentCircuitData circuitdata = m_controllingClient.RequestClientInfo(); // TODO Should construct this behind a method - string capsPath = + string capsPath = "http://" + neighbourRegion.ExternalHostName + ":" + neighbourRegion.HttpPort - + "/CAPS/" + circuitdata.CapsPath + "0000/"; - + + "/CAPS/" + circuitdata.CapsPath + "0000/"; + m_log.DebugFormat( - "[CAPS]: Sending new CAPS seed url {0} to client {1}", capsPath, m_uuid); - + "[CAPS]: Sending new CAPS seed url {0} to client {1}", capsPath, m_uuid); + m_controllingClient.CrossRegion(neighbourHandle, newpos, vel, neighbourRegion.ExternalEndPoint, capsPath); MakeChildAgent(); @@ -2246,40 +1703,128 @@ namespace OpenSim.Region.Environment.Scenes #endregion - #region Nested type: Dir_ControlFlags - /// - /// Implemented Control Flags + /// This allows the Sim owner the abiility to kick users from their sim currently. + /// It tells the client that the agent has permission to do so. /// - private enum Dir_ControlFlags + public void GrantGodlikePowers(LLUUID agentID, LLUUID sessionID, LLUUID token, bool godStatus) { - DIR_CONTROL_FLAG_FORWARD = AgentManager.ControlFlags.AGENT_CONTROL_AT_POS, - DIR_CONTROL_FLAG_BACK = AgentManager.ControlFlags.AGENT_CONTROL_AT_NEG, - DIR_CONTROL_FLAG_LEFT = AgentManager.ControlFlags.AGENT_CONTROL_LEFT_POS, - DIR_CONTROL_FLAG_RIGHT = AgentManager.ControlFlags.AGENT_CONTROL_LEFT_NEG, - DIR_CONTROL_FLAG_UP = AgentManager.ControlFlags.AGENT_CONTROL_UP_POS, - DIR_CONTROL_FLAG_DOWN = AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG, - DIR_CONTROL_FLAG_DOWN_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG + GrantGodlikePowersPacket respondPacket = new GrantGodlikePowersPacket(); + GrantGodlikePowersPacket.GrantDataBlock gdb = new GrantGodlikePowersPacket.GrantDataBlock(); + GrantGodlikePowersPacket.AgentDataBlock adb = new GrantGodlikePowersPacket.AgentDataBlock(); + + adb.AgentID = agentID; + adb.SessionID = sessionID; // More security + + if (godStatus) + { + gdb.GodLevel = (byte)250; + m_godlevel = 250; + } + else + { + gdb.GodLevel = (byte)0; + m_godlevel = 0; + } + + gdb.Token = token; + //respondPacket.AgentData = (GrantGodlikePowersPacket.AgentDataBlock)ablock; + respondPacket.GrantData = gdb; + respondPacket.AgentData = adb; + ControllingClient.OutPacket(respondPacket, ThrottleOutPacketType.Task); } - #endregion + /// + /// This updates important decision making data about a child agent + /// The main purpose is to figure out what objects to send to a child agent that's in a neighboring region + /// + public void ChildAgentDataUpdate(ChildAgentDataUpdate cAgentData, uint tRegionX, uint tRegionY, uint rRegionX, uint rRegionY) + { + // + int shiftx = ((int)rRegionX - (int)tRegionX) * (int)Constants.RegionSize; + int shifty = ((int)rRegionY - (int)tRegionY) * (int)Constants.RegionSize; + + m_DrawDistance = cAgentData.drawdistance; + m_pos = new LLVector3(cAgentData.Position.x + shiftx, cAgentData.Position.y + shifty, cAgentData.Position.z); - #region Nested type: NewForce + // It's hard to say here.. We can't really tell where the camera position is unless it's in world cordinates from the sending region + m_CameraCenter = + new Vector3(cAgentData.cameraPosition.x, cAgentData.cameraPosition.y, cAgentData.cameraPosition.z); + - [Serializable] + m_godlevel = cAgentData.godlevel; + SetHeight(cAgentData.AVHeight); + + ControllingClient.SetChildAgentThrottle(cAgentData.throttles); + + + + // Sends out the objects in the user's draw distance if m_sendTasksToChild is true. + if (m_scene.m_seeIntoRegionFromNeighbor) + m_scene.SendAllSceneObjectsToClient(this); + //cAgentData.AVHeight; + //cAgentData.regionHandle; + //m_velocity = cAgentData.Velocity; + } + + /// + /// Handles part of the PID controller function for moving an avatar. + /// + public override void UpdateMovement() + { + m_newForce = false; + lock (m_forcesList) + { + if (m_forcesList.Count > 0) + { + for (int i = 0; i < m_forcesList.Count; i++) + { + NewForce force = m_forcesList[i]; + + m_updateflag = true; + try + { + movementvector.X = force.X; + movementvector.Y = force.Y; + movementvector.Z = force.Z; + Velocity = movementvector; + } + catch (NullReferenceException) + { + // Under extreme load, this returns a NullReference Exception that we can ignore. + // Ignoring this causes no movement to be sent to the physics engine... + // which when the scene is moving at 1 frame every 10 seconds, it doesn't really matter! + } + m_newForce = true; + } + for (int i = 0; i < m_forcesList.Count; i++) + { + m_forcesList.RemoveAt(0); + } + } + } + } + + static ScenePresence() + { + LLObject.TextureEntry textu = AvatarAppearance.GetDefaultTextureEntry(); + DefaultTexture = textu.ToBytes(); + } + + [Serializable] public class NewForce { public float X; public float Y; public float Z; + + public NewForce() + { + } } - #endregion - - #region Nested type: ScenePartUpdate - - [Serializable] - public class ScenePartUpdate : ISerializable + [Serializable] + public class ScenePartUpdate : ISerializable { public LLUUID FullID; public uint LastFullUpdateTime; @@ -2301,17 +1846,15 @@ namespace OpenSim.Region.Environment.Scenes throw new ArgumentNullException("info"); } - FullID = new LLUUID((Guid) info.GetValue("FullID", typeof (Guid))); - LastFullUpdateTime = (uint) info.GetValue("LastFullUpdateTime", typeof (uint)); - LastTerseUpdateTime = (uint) info.GetValue("LastTerseUpdateTime", typeof (uint)); + FullID = new LLUUID((Guid)info.GetValue("FullID", typeof(Guid))); + LastFullUpdateTime = (uint)info.GetValue("LastFullUpdateTime", typeof(uint)); + LastTerseUpdateTime = (uint)info.GetValue("LastTerseUpdateTime", typeof(uint)); //System.Console.WriteLine("ScenePartUpdate Deserialize END"); } - #region ISerializable Members - [SecurityPermission(SecurityAction.LinkDemand, - Flags = SecurityPermissionFlag.SerializationFormatter)] + Flags = SecurityPermissionFlag.SerializationFormatter)] public virtual void GetObjectData( SerializationInfo info, StreamingContext context) { @@ -2324,10 +1867,473 @@ namespace OpenSim.Region.Environment.Scenes info.AddValue("LastFullUpdateTime", LastFullUpdateTime); info.AddValue("LastTerseUpdateTime", LastTerseUpdateTime); } - - #endregion } - #endregion + public override void SetText(string text, Vector3 color, double alpha) + { + throw new Exception("Can't set Text on avatar."); + } + + /// + /// Adds a physical representation of the avatar to the Physics plugin + /// + public void AddToPhysicalScene() + { + PhysicsScene scene = m_scene.PhysicsScene; + + PhysicsVector pVec = + new PhysicsVector(AbsolutePosition.X, AbsolutePosition.Y, + AbsolutePosition.Z); + if (m_avHeight == 127.0f) + { + m_physicsActor = scene.AddAvatar(Firstname + "." + Lastname, pVec, new PhysicsVector(0, 0, 1.56f)); + } + else + { + m_physicsActor = scene.AddAvatar(Firstname + "." + Lastname, pVec, new PhysicsVector(0, 0, m_avHeight)); + } + //m_physicsActor.OnRequestTerseUpdate += SendTerseUpdateToAllClients; + m_physicsActor.OnCollisionUpdate += PhysicsCollisionUpdate; + m_physicsActor.LocalID = LocalId; + } + + // Event called by the physics plugin to tell the avatar about a collision. + private void PhysicsCollisionUpdate(EventArgs e) + { + bool isUserMoving = Velocity.X > 0 || Velocity.Y > 0; + UpdateMovementAnimations(isUserMoving); + } + + internal void Close() + { + lock (m_attachments) + { + foreach (SceneObjectGroup grp in m_attachments) + { + // ControllingClient may be null at this point! + m_scene.m_innerScene.DetachSingleAttachmentToInv(grp.GetFromAssetID(), ControllingClient); + } + m_attachments.Clear(); + } + lock (m_knownPrimUUID) + { + m_knownPrimUUID.Clear(); + } + lock (m_knownChildRegions) + { + m_knownChildRegions.Clear(); + } + lock (m_updateTimes) + { + m_updateTimes.Clear(); + } + lock (m_partsUpdateQueue) + { + m_partsUpdateQueue.Clear(); + } + + RemoveFromPhysicalScene(); + GC.Collect(); + } + + public ScenePresence() + { +/* JB + if (Animations == null) + { + Animations = new AvatarAnimations(); + Animations.LoadAnims(); + } +*/ + if (DefaultTexture == null) + { + LLObject.TextureEntry textu = AvatarAppearance.GetDefaultTextureEntry(); + DefaultTexture = textu.ToBytes(); + } + } + public void AddAttachment(SceneObjectGroup gobj) + { + lock (m_attachments) + { + m_attachments.Add(gobj); + } + } + public void RemoveAttachment(SceneObjectGroup gobj) + { + lock (m_attachments) + { + if (m_attachments.Contains(gobj)) + { + m_attachments.Remove(gobj); + } + } + } + public void CrossAttachmentsIntoNewRegion(ulong regionHandle) + { + lock (m_attachments) + { + foreach (SceneObjectGroup gobj in m_attachments) + { + // If the prim group is null then something must have happened to it! + if (gobj != null) + { + // Set the parent localID to 0 so it transfers over properly. + gobj.RootPart.SetParentLocalId(0); + gobj.RootPart.m_IsAttachment = false; + gobj.AbsolutePosition = gobj.RootPart.m_attachedPos; + gobj.RootPart.LastOwnerID = gobj.GetFromAssetID(); + m_scene.CrossPrimGroupIntoNewRegion(regionHandle, gobj); + } + } + m_attachments.Clear(); + } + + } + public void initializeScenePresence(IClientAPI client, RegionInfo region, Scene scene) + { + m_controllingClient = client; + m_regionInfo = region; + m_scene = scene; + RegisterToEvents(); + + /* + AbsolutePosition = client.StartPos; + + Animations = new AvatarAnimations(); + Animations.LoadAnims(); + + m_animations = new List(); + m_animations.Add(Animations.AnimsLLUUID["STAND"]); + m_animationSeqs.Add(m_controllingClient.NextAnimationSequenceNumber); + + SetDirectionVectors(); + */ + } + + protected ScenePresence(SerializationInfo info, StreamingContext context) + : base (info, context) + { + //System.Console.WriteLine("ScenePresence Deserialize BGN"); + + if (info == null) + { + throw new ArgumentNullException("info"); + } +/* JB + if (Animations == null) + { + Animations = new AvatarAnimations(); + Animations.LoadAnims(); + } +*/ + if (DefaultTexture == null) + { + LLObject.TextureEntry textu = AvatarAppearance.GetDefaultTextureEntry(); + DefaultTexture = textu.ToBytes(); + } + + List animations_work = (List)info.GetValue("m_animations", typeof(List)); + + foreach (Guid guid in animations_work) + { + m_animations.Add(new LLUUID(guid)); + } + + m_animationSeqs = (List)info.GetValue("m_animationSeqs", typeof(List)); + m_updateflag = (bool)info.GetValue("m_updateflag", typeof(bool)); + m_movementflag = (byte)info.GetValue("m_movementflag", typeof(byte)); + m_forcesList = (List)info.GetValue("m_forcesList", typeof(List)); + m_updateCount = (short)info.GetValue("m_updateCount", typeof(short)); + m_requestedSitTargetID = (uint)info.GetValue("m_requestedSitTargetID", typeof(uint)); + + m_requestedSitOffset + = new LLVector3( + (float)info.GetValue("m_requestedSitOffset.X", typeof(float)), + (float)info.GetValue("m_requestedSitOffset.Y", typeof(float)), + (float)info.GetValue("m_requestedSitOffset.Z", typeof(float))); + + m_sitAvatarHeight = (float)info.GetValue("m_sitAvatarHeight", typeof(float)); + m_godlevel = (float)info.GetValue("m_godlevel", typeof(float)); + m_setAlwaysRun = (bool)info.GetValue("m_setAlwaysRun", typeof(bool)); + + m_bodyRot + = new Quaternion( + (float)info.GetValue("m_bodyRot.w", typeof(float)), + (float)info.GetValue("m_bodyRot.x", typeof(float)), + (float)info.GetValue("m_bodyRot.y", typeof(float)), + (float)info.GetValue("m_bodyRot.z", typeof(float))); + + IsRestrictedToRegion = (bool)info.GetValue("IsRestrictedToRegion", typeof(bool)); + m_newForce = (bool)info.GetValue("m_newForce", typeof(bool)); + //m_newAvatar = (bool)info.GetValue("m_newAvatar", typeof(bool)); + m_newCoarseLocations = (bool)info.GetValue("m_newCoarseLocations", typeof(bool)); + m_gotAllObjectsInScene = (bool)info.GetValue("m_gotAllObjectsInScene", typeof(bool)); + m_avHeight = (float)info.GetValue("m_avHeight", typeof(float)); + crossingFromRegion = (ulong)info.GetValue("crossingFromRegion", typeof(ulong)); + + List Dir_Vectors_work = (List)info.GetValue("Dir_Vectors", typeof(List)); + List Dir_Vectors_work2 = new List(); + + foreach (float[] f3 in Dir_Vectors_work) + { + Dir_Vectors_work2.Add(new Vector3(f3[0], f3[1], f3[2])); + } + + Dir_Vectors = Dir_Vectors_work2.ToArray(); + + lastPhysPos + = new LLVector3( + (float)info.GetValue("lastPhysPos.X", typeof(float)), + (float)info.GetValue("lastPhysPos.Y", typeof(float)), + (float)info.GetValue("lastPhysPos.Z", typeof(float))); + + m_CameraCenter + = new Vector3( + (float)info.GetValue("m_CameraCenter.X", typeof(float)), + (float)info.GetValue("m_CameraCenter.Y", typeof(float)), + (float)info.GetValue("m_CameraCenter.Z", typeof(float))); + + m_CameraAtAxis + = new Vector3( + (float)info.GetValue("m_CameraAtAxis.X", typeof(float)), + (float)info.GetValue("m_CameraAtAxis.Y", typeof(float)), + (float)info.GetValue("m_CameraAtAxis.Z", typeof(float))); + + m_CameraLeftAxis + = new Vector3( + (float)info.GetValue("m_CameraLeftAxis.X", typeof(float)), + (float)info.GetValue("m_CameraLeftAxis.Y", typeof(float)), + (float)info.GetValue("m_CameraLeftAxis.Z", typeof(float))); + + m_CameraUpAxis + = new Vector3( + (float)info.GetValue("m_CameraUpAxis.X", typeof(float)), + (float)info.GetValue("m_CameraUpAxis.Y", typeof(float)), + (float)info.GetValue("m_CameraUpAxis.Z", typeof(float))); + + m_DrawDistance = (float)info.GetValue("m_DrawDistance", typeof(float)); + m_appearance = (AvatarAppearance)info.GetValue("m_appearance", typeof(AvatarAppearance)); + m_knownChildRegions = (List)info.GetValue("m_knownChildRegions", typeof(List)); + + posLastSignificantMove + = new LLVector3( + (float)info.GetValue("posLastSignificantMove.X", typeof(float)), + (float)info.GetValue("posLastSignificantMove.Y", typeof(float)), + (float)info.GetValue("posLastSignificantMove.Z", typeof(float))); + + // m_partsUpdateQueue = (UpdateQueue)info.GetValue("m_partsUpdateQueue", typeof(UpdateQueue)); + + /* + Dictionary updateTimes_work + = (Dictionary)info.GetValue("m_updateTimes", typeof(Dictionary)); + + foreach (Guid id in updateTimes_work.Keys) + { + m_updateTimes.Add(new LLUUID(id), updateTimes_work[id]); + } + */ + m_regionHandle = (ulong)info.GetValue("m_regionHandle", typeof(ulong)); + m_firstname = (string)info.GetValue("m_firstname", typeof(string)); + m_lastname = (string)info.GetValue("m_lastname", typeof(string)); + m_allowMovement = (bool)info.GetValue("m_allowMovement", typeof(bool)); + m_parentPosition = new LLVector3((float)info.GetValue("m_parentPosition.X", typeof(float)), + (float)info.GetValue("m_parentPosition.Y", typeof(float)), + (float)info.GetValue("m_parentPosition.Z", typeof(float))); + + m_isChildAgent = (bool)info.GetValue("m_isChildAgent", typeof(bool)); + m_parentID = (uint)info.GetValue("m_parentID", typeof(uint)); + +// for OpenSim_v0.5 + currentParcelUUID = new LLUUID((Guid)info.GetValue("currentParcelUUID", typeof(Guid))); + + lastKnownAllowedPosition + = new Vector3( + (float)info.GetValue("lastKnownAllowedPosition.X", typeof(float)), + (float)info.GetValue("lastKnownAllowedPosition.Y", typeof(float)), + (float)info.GetValue("lastKnownAllowedPosition.Z", typeof(float))); + + sentMessageAboutRestrictedParcelFlyingDown = (bool)info.GetValue("sentMessageAboutRestrictedParcelFlyingDown", typeof(bool)); + + m_LastChildAgentUpdatePosition + = new LLVector3( + (float)info.GetValue("m_LastChildAgentUpdatePosition.X", typeof(float)), + (float)info.GetValue("m_LastChildAgentUpdatePosition.Y", typeof(float)), + (float)info.GetValue("m_LastChildAgentUpdatePosition.Z", typeof(float))); + + m_perfMonMS = (int)info.GetValue("m_perfMonMS", typeof(int)); + m_AgentControlFlags = (uint)info.GetValue("m_AgentControlFlags", typeof(uint)); + + m_headrotation + = new LLQuaternion( + (float)info.GetValue("m_headrotation.W", typeof(float)), + (float)info.GetValue("m_headrotation.X", typeof(float)), + (float)info.GetValue("m_headrotation.Y", typeof(float)), + (float)info.GetValue("m_headrotation.Z", typeof(float))); + + m_state = (byte)info.GetValue("m_state", typeof(byte)); + + List knownPrimUUID_work = (List)info.GetValue("m_knownPrimUUID", typeof(List)); + + foreach (Guid id in knownPrimUUID_work) + { + m_knownPrimUUID.Add(new LLUUID(id)); + } + + //System.Console.WriteLine("ScenePresence Deserialize END"); + } + + [SecurityPermission(SecurityAction.LinkDemand, + Flags = SecurityPermissionFlag.SerializationFormatter)] + public override void GetObjectData( + SerializationInfo info, StreamingContext context) + { + if (info == null) + { + throw new ArgumentNullException("info"); + } + + base.GetObjectData(info, context); + + List animations_work = new List(); + + foreach (LLUUID uuid in m_animations) + { + animations_work.Add(uuid.UUID); + } + + info.AddValue("m_animations", animations_work); + + info.AddValue("m_animationSeqs", m_animationSeqs); + info.AddValue("m_updateflag", m_updateflag); + info.AddValue("m_movementflag", m_movementflag); + info.AddValue("m_forcesList", m_forcesList); + info.AddValue("m_updateCount", m_updateCount); + info.AddValue("m_requestedSitTargetID", m_requestedSitTargetID); + + // LLVector3 + info.AddValue("m_requestedSitOffset.X", m_requestedSitOffset.X); + info.AddValue("m_requestedSitOffset.Y", m_requestedSitOffset.Y); + info.AddValue("m_requestedSitOffset.Z", m_requestedSitOffset.Z); + + info.AddValue("m_sitAvatarHeight", m_sitAvatarHeight); + info.AddValue("m_godlevel", m_godlevel); + info.AddValue("m_setAlwaysRun", m_setAlwaysRun); + + // Quaternion + info.AddValue("m_bodyRot.w", m_bodyRot.w); + info.AddValue("m_bodyRot.x", m_bodyRot.x); + info.AddValue("m_bodyRot.y", m_bodyRot.y); + info.AddValue("m_bodyRot.z", m_bodyRot.z); + + info.AddValue("IsRestrictedToRegion", IsRestrictedToRegion); + info.AddValue("m_newForce", m_newForce); + //info.AddValue("m_newAvatar", m_newAvatar); + info.AddValue("m_newCoarseLocations", m_newCoarseLocations); + info.AddValue("m_gotAllObjectsInScene", m_gotAllObjectsInScene); + info.AddValue("m_avHeight", m_avHeight); + + // info.AddValue("m_regionInfo", m_regionInfo); + + info.AddValue("crossingFromRegion", crossingFromRegion); + + List Dir_Vectors_work = new List(); + + foreach (Vector3 v3 in Dir_Vectors) + { + Dir_Vectors_work.Add(new float[] { v3.x, v3.y, v3.z }); + } + + info.AddValue("Dir_Vectors", Dir_Vectors_work); + + // LLVector3 + info.AddValue("lastPhysPos.X", lastPhysPos.X); + info.AddValue("lastPhysPos.Y", lastPhysPos.Y); + info.AddValue("lastPhysPos.Z", lastPhysPos.Z); + + // Vector3 + info.AddValue("m_CameraCenter.X", m_CameraCenter.x); + info.AddValue("m_CameraCenter.Y", m_CameraCenter.y); + info.AddValue("m_CameraCenter.Z", m_CameraCenter.z); + + // Vector3 + info.AddValue("m_CameraAtAxis.X", m_CameraAtAxis.x); + info.AddValue("m_CameraAtAxis.Y", m_CameraAtAxis.y); + info.AddValue("m_CameraAtAxis.Z", m_CameraAtAxis.z); + + // Vector3 + info.AddValue("m_CameraLeftAxis.X", m_CameraLeftAxis.x); + info.AddValue("m_CameraLeftAxis.Y", m_CameraLeftAxis.y); + info.AddValue("m_CameraLeftAxis.Z", m_CameraLeftAxis.z); + + // Vector3 + info.AddValue("m_CameraUpAxis.X", m_CameraUpAxis.x); + info.AddValue("m_CameraUpAxis.Y", m_CameraUpAxis.y); + info.AddValue("m_CameraUpAxis.Z", m_CameraUpAxis.z); + + info.AddValue("m_DrawDistance", m_DrawDistance); + info.AddValue("m_appearance", m_appearance); + info.AddValue("m_knownChildRegions", m_knownChildRegions); + + // LLVector3 + info.AddValue("posLastSignificantMove.X", posLastSignificantMove.X); + info.AddValue("posLastSignificantMove.Y", posLastSignificantMove.Y); + info.AddValue("posLastSignificantMove.Z", posLastSignificantMove.Z); + + //info.AddValue("m_partsUpdateQueue", m_partsUpdateQueue); + + /* + Dictionary updateTimes_work = new Dictionary(); + + foreach ( LLUUID id in m_updateTimes.Keys) + { + updateTimes_work.Add(id.UUID, m_updateTimes[id]); + } + + info.AddValue("m_updateTimes", updateTimes_work); + */ + + info.AddValue("m_regionHandle", m_regionHandle); + info.AddValue("m_firstname", m_firstname); + info.AddValue("m_lastname", m_lastname); + info.AddValue("m_allowMovement", m_allowMovement); + //info.AddValue("m_physicsActor", m_physicsActor); + info.AddValue("m_parentPosition.X", m_parentPosition.X); + info.AddValue("m_parentPosition.Y", m_parentPosition.Y); + info.AddValue("m_parentPosition.Z", m_parentPosition.Z); + info.AddValue("m_isChildAgent", m_isChildAgent); + info.AddValue("m_parentID", m_parentID); + +// for OpenSim_v0.5 + info.AddValue("currentParcelUUID", currentParcelUUID.UUID); + + info.AddValue("lastKnownAllowedPosition.X", lastKnownAllowedPosition.x); + info.AddValue("lastKnownAllowedPosition.Y", lastKnownAllowedPosition.y); + info.AddValue("lastKnownAllowedPosition.Z", lastKnownAllowedPosition.z); + + info.AddValue("sentMessageAboutRestrictedParcelFlyingDown", sentMessageAboutRestrictedParcelFlyingDown); + + info.AddValue("m_LastChildAgentUpdatePosition.X", m_LastChildAgentUpdatePosition.X); + info.AddValue("m_LastChildAgentUpdatePosition.Y", m_LastChildAgentUpdatePosition.Y); + info.AddValue("m_LastChildAgentUpdatePosition.Z", m_LastChildAgentUpdatePosition.Z); + + info.AddValue("m_perfMonMS", m_perfMonMS); + info.AddValue("m_AgentControlFlags", m_AgentControlFlags); + + info.AddValue("m_headrotation.W", m_headrotation.W); + info.AddValue("m_headrotation.X", m_headrotation.X); + info.AddValue("m_headrotation.Y", m_headrotation.Y); + info.AddValue("m_headrotation.Z", m_headrotation.Z); + + info.AddValue("m_state", m_state); + + List knownPrimUUID_work = new List(); + + foreach (LLUUID id in m_knownPrimUUID) + { + knownPrimUUID_work.Add(id.UUID); + } + + info.AddValue("m_knownPrimUUID", knownPrimUUID_work); + } } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Scenes/SceneXmlLoader.cs b/OpenSim/Region/Environment/Scenes/SceneXmlLoader.cs index 386d87bf68..8390f6463a 100644 --- a/OpenSim/Region/Environment/Scenes/SceneXmlLoader.cs +++ b/OpenSim/Region/Environment/Scenes/SceneXmlLoader.cs @@ -39,8 +39,8 @@ namespace OpenSim.Region.Environment.Scenes public class SceneXmlLoader // can move to a module? { protected InnerScene m_innerScene; - protected Scene m_parentScene; protected RegionInfo m_regInfo; + protected Scene m_parentScene; public SceneXmlLoader(Scene parentScene, InnerScene innerScene, RegionInfo regionInfo) { @@ -136,13 +136,14 @@ namespace OpenSim.Region.Environment.Scenes returnstring += grp.ToXmlString2(); returnstring += "\n"; return returnstring; + } public void LoadGroupFromXml2String(string xmlString) { XmlDocument doc = new XmlDocument(); XmlNode rootNode; - + XmlTextReader reader = new XmlTextReader(new StringReader(xmlString)); reader.WhitespaceHandling = WhitespaceHandling.None; doc.Load(reader); @@ -152,6 +153,7 @@ namespace OpenSim.Region.Environment.Scenes { CreatePrimFromXml(aPrimNode.OuterXml); } + } public void LoadPrimsFromXml2(string fileName) @@ -204,7 +206,7 @@ namespace OpenSim.Region.Environment.Scenes rootPart.PhysActor.LocalID = rootPart.LocalId; rootPart.DoPhysicsPropertyUpdate(UsePhysics, true); } - rootPart.Velocity = receivedVelocity; + rootPart.Velocity = receivedVelocity; } obj.ScheduleGroupForFullUpdate(); @@ -232,4 +234,4 @@ namespace OpenSim.Region.Environment.Scenes file.Close(); } } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Scenes/Scripting/IScriptHost.cs b/OpenSim/Region/Environment/Scenes/Scripting/IScriptHost.cs index ccb2aa74ab..dbe2516438 100644 --- a/OpenSim/Region/Environment/Scenes/Scripting/IScriptHost.cs +++ b/OpenSim/Region/Environment/Scenes/Scripting/IScriptHost.cs @@ -44,4 +44,4 @@ namespace OpenSim.Region.Environment.Scenes.Scripting string TouchName { get; set; } void SetText(string text, Vector3 color, double alpha); } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Scenes/Scripting/NullScriptHost.cs b/OpenSim/Region/Environment/Scenes/Scripting/NullScriptHost.cs index a37ce532f8..4b1b56ae90 100644 --- a/OpenSim/Region/Environment/Scenes/Scripting/NullScriptHost.cs +++ b/OpenSim/Region/Environment/Scenes/Scripting/NullScriptHost.cs @@ -33,9 +33,7 @@ namespace OpenSim.Region.Environment.Scenes.Scripting { public class NullScriptHost : IScriptHost { - private readonly LLVector3 m_pos = new LLVector3(128, 128, 30); - - #region IScriptHost Members + private LLVector3 m_pos = new LLVector3(128, 128, 30); public string Name { @@ -85,7 +83,5 @@ namespace OpenSim.Region.Environment.Scenes.Scripting { Console.WriteLine("Tried to SetText [{0}] on NullScriptHost", text); } - - #endregion } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Scenes/Scripting/ScriptEngineInterface.cs b/OpenSim/Region/Environment/Scenes/Scripting/ScriptEngineInterface.cs index cb0e1e855a..b1ee519f4b 100644 --- a/OpenSim/Region/Environment/Scenes/Scripting/ScriptEngineInterface.cs +++ b/OpenSim/Region/Environment/Scenes/Scripting/ScriptEngineInterface.cs @@ -35,4 +35,4 @@ namespace OpenSim.Region.Environment.Scenes.Scripting void Shutdown(); // void StartScript(string ScriptID, IScriptHost ObjectID); } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Scenes/Scripting/ScriptEngineLoader.cs b/OpenSim/Region/Environment/Scenes/Scripting/ScriptEngineLoader.cs index 0048e6b856..6216e2c041 100644 --- a/OpenSim/Region/Environment/Scenes/Scripting/ScriptEngineLoader.cs +++ b/OpenSim/Region/Environment/Scenes/Scripting/ScriptEngineLoader.cs @@ -51,7 +51,7 @@ namespace OpenSim.Region.Environment.Scenes.Scripting { m_log.Error("[ScriptEngine]: " + "Error loading assembly \"" + EngineName + "\": " + e.Message + ", " + - e.StackTrace); + e.StackTrace.ToString()); } return ret; } @@ -116,4 +116,4 @@ namespace OpenSim.Region.Environment.Scenes.Scripting return ret; } } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Scenes/SimStatsReporter.cs b/OpenSim/Region/Environment/Scenes/SimStatsReporter.cs index 1f02f23669..a53bfcd62e 100644 --- a/OpenSim/Region/Environment/Scenes/SimStatsReporter.cs +++ b/OpenSim/Region/Environment/Scenes/SimStatsReporter.cs @@ -34,68 +34,105 @@ namespace OpenSim.Region.Environment.Scenes { public class SimStatsReporter { - #region Delegates - public delegate void SendStatResult(SimStatsPacket pack); - #endregion + public event SendStatResult OnSendStatsResult; - private readonly Timer m_report = new Timer(); - private readonly SimStatsPacket.RegionBlock rb = new SimStatsPacket.RegionBlock(); - private readonly RegionInfo ReportingRegion; - private readonly SimStatsPacket.StatBlock[] sb = new SimStatsPacket.StatBlock[21]; - private readonly SimStatsPacket statpack = (SimStatsPacket) PacketPool.Instance.GetPacket(PacketType.SimStats); + private SendStatResult handlerSendStatResult = null; - private SendStatResult handlerSendStatResult; - private int m_activePrim; - private int m_activeScripts; - private int m_agentMS; + private enum Stats : uint + { + TimeDilation = 0, + SimFPS = 1, + PhysicsFPS = 2, + AgentUpdates = 3, + FrameMS = 4, + NetMS = 5, + OtherMS = 6, + PhysicsMS = 7, + AgentMS = 8, + ImageMS = 9, + ScriptMS = 10, + TotalPrim = 11, + ActivePrim = 12, + Agents = 13, + ChildAgents = 14, + ActiveScripts = 15, + ScriptLinesPerSecond = 16, + InPacketsPerSecond = 17, + OutPacketsPerSecond = 18, + PendingDownloads = 19, + PendingUploads = 20, + UnAckedBytes = 24, - private int m_agentUpdates; - private int m_childAgents; - private int m_fps; + // Havok4 related... May or may not be in upcoming LLclients + // (kelly added them sometime late in January 2008) + NumRCCSLODReduced = 25, + NumRCCSFixed = 26 + } - private int m_frameMS; - private int m_imageMS; - private int m_inPacketsPerSecond; - private int m_netMS; - private int m_numPrim; - private int m_otherMS; - private int m_outPacketsPerSecond; - private int m_pendingDownloads; - private int m_pendingUploads; - private float m_pfps; - private int m_physicsMS; - private int m_rootAgents; - private int m_scriptLinesPerSecond; - private float m_timeDilation; - private int m_unAckedBytes; + // Sending a stats update every 3 seconds + private int statsUpdatesEveryMS = 3000; + private float statsUpdateFactor = 0; + private float m_timeDilation = 0; + private int m_fps = 0; + private float m_pfps = 0; + private int m_agentUpdates = 0; + + private int m_frameMS = 0; + private int m_netMS = 0; + private int m_agentMS = 0; + private int m_physicsMS = 0; + private int m_imageMS = 0; + private int m_otherMS = 0; + +//Ckrinke: (3-21-08) Comment out to remove a compiler warning. Bring back into play when needed. +//Ckrinke private int m_scriptMS = 0; + + private int m_rootAgents = 0; + private int m_childAgents = 0; + private int m_numPrim = 0; + private int m_inPacketsPerSecond = 0; + private int m_outPacketsPerSecond = 0; + private int m_activePrim = 0; + private int m_unAckedBytes = 0; + private int m_pendingDownloads = 0; + private int m_pendingUploads = 0; + private int m_activeScripts = 0; + private int m_scriptLinesPerSecond = 0; private int objectCapacity = 45000; - private float statsUpdateFactor; - private int statsUpdatesEveryMS = 3000; + + + SimStatsPacket.StatBlock[] sb = new SimStatsPacket.StatBlock[21]; + SimStatsPacket.RegionBlock rb = new SimStatsPacket.RegionBlock(); + SimStatsPacket statpack = (SimStatsPacket)PacketPool.Instance.GetPacket(PacketType.SimStats); + + + private RegionInfo ReportingRegion; + + private Timer m_report = new Timer(); public SimStatsReporter(RegionInfo regionData) { - statsUpdateFactor = (statsUpdatesEveryMS / 1000); + + statsUpdateFactor = (float)(statsUpdatesEveryMS / 1000); ReportingRegion = regionData; - for (int i = 0; i < 21; i++) + for (int i = 0; i<21;i++) { sb[i] = new SimStatsPacket.StatBlock(); } m_report.AutoReset = true; m_report.Interval = statsUpdatesEveryMS; - m_report.Elapsed += statsHeartBeat; + m_report.Elapsed += new ElapsedEventHandler(statsHeartBeat); m_report.Enabled = true; } - public event SendStatResult OnSendStatsResult; - public void SetUpdateMS(int ms) { statsUpdatesEveryMS = ms; - statsUpdateFactor = (statsUpdatesEveryMS / 1000); + statsUpdateFactor = (float)(statsUpdatesEveryMS / 1000); m_report.Interval = statsUpdatesEveryMS; } @@ -106,8 +143,8 @@ namespace OpenSim.Region.Environment.Scenes lock (m_report) { // Packet is already initialized and ready for data insert - - + + statpack.Region = rb; statpack.Region.RegionX = ReportingRegion.RegionLocX; statpack.Region.RegionY = ReportingRegion.RegionLocY; @@ -117,102 +154,102 @@ namespace OpenSim.Region.Environment.Scenes } catch (Exception) { - statpack.Region.RegionFlags = 0; + statpack.Region.RegionFlags = (uint) 0; } statpack.Region.ObjectCapacity = (uint) objectCapacity; - - #region various statistic googly moogly - + +#region various statistic googly moogly + // Our FPS is actually 10fps, so multiplying by 5 to get the amount that people expect there // 0-50 is pretty close to 0-45 - float simfps = ((m_fps * 5)); - + float simfps = (int) ((m_fps * 5)); + //if (simfps > 45) //simfps = simfps - (simfps - 45); //if (simfps < 0) //simfps = 0; - + // float physfps = ((m_pfps / 1000)); - + //if (physfps > 600) //physfps = physfps - (physfps - 600); - + if (physfps < 0) physfps = 0; - - #endregion - + +#endregion + //Our time dilation is 0.91 when we're running a full speed, // therefore to make sure we get an appropriate range, // we have to factor in our error. (0.10f * statsUpdateFactor) // multiplies the fix for the error times the amount of times it'll occur a second // / 10 divides the value by the number of times the sim heartbeat runs (10fps) // Then we divide the whole amount by the amount of seconds pass in between stats updates. - + sb[0].StatID = (uint) Stats.TimeDilation; - sb[0].StatValue = m_timeDilation; //((((m_timeDilation + (0.10f * statsUpdateFactor)) /10) / statsUpdateFactor)); - + sb[0].StatValue = m_timeDilation ; //((((m_timeDilation + (0.10f * statsUpdateFactor)) /10) / statsUpdateFactor)); + sb[1].StatID = (uint) Stats.SimFPS; - sb[1].StatValue = simfps / statsUpdateFactor; - + sb[1].StatValue = simfps/statsUpdateFactor; + sb[2].StatID = (uint) Stats.PhysicsFPS; sb[2].StatValue = physfps / statsUpdateFactor; - + sb[3].StatID = (uint) Stats.AgentUpdates; sb[3].StatValue = (m_agentUpdates / statsUpdateFactor); - + sb[4].StatID = (uint) Stats.Agents; sb[4].StatValue = m_rootAgents; - + sb[5].StatID = (uint) Stats.ChildAgents; sb[5].StatValue = m_childAgents; - + sb[6].StatID = (uint) Stats.TotalPrim; sb[6].StatValue = m_numPrim; - + sb[7].StatID = (uint) Stats.ActivePrim; sb[7].StatValue = m_activePrim; - - sb[8].StatID = (uint) Stats.FrameMS; + + sb[8].StatID = (uint)Stats.FrameMS; sb[8].StatValue = m_frameMS / statsUpdateFactor; - - sb[9].StatID = (uint) Stats.NetMS; + + sb[9].StatID = (uint)Stats.NetMS; sb[9].StatValue = m_netMS / statsUpdateFactor; - - sb[10].StatID = (uint) Stats.PhysicsMS; + + sb[10].StatID = (uint)Stats.PhysicsMS; sb[10].StatValue = m_physicsMS / statsUpdateFactor; - - sb[11].StatID = (uint) Stats.ImageMS; + + sb[11].StatID = (uint)Stats.ImageMS ; sb[11].StatValue = m_imageMS / statsUpdateFactor; - - sb[12].StatID = (uint) Stats.OtherMS; + + sb[12].StatID = (uint)Stats.OtherMS; sb[12].StatValue = m_otherMS / statsUpdateFactor; - - sb[13].StatID = (uint) Stats.InPacketsPerSecond; + + sb[13].StatID = (uint)Stats.InPacketsPerSecond; sb[13].StatValue = (m_inPacketsPerSecond); - - sb[14].StatID = (uint) Stats.OutPacketsPerSecond; + + sb[14].StatID = (uint)Stats.OutPacketsPerSecond; sb[14].StatValue = (m_outPacketsPerSecond / statsUpdateFactor); - - sb[15].StatID = (uint) Stats.UnAckedBytes; + + sb[15].StatID = (uint)Stats.UnAckedBytes; sb[15].StatValue = m_unAckedBytes; - - sb[16].StatID = (uint) Stats.AgentMS; + + sb[16].StatID = (uint)Stats.AgentMS; sb[16].StatValue = m_agentMS / statsUpdateFactor; - - sb[17].StatID = (uint) Stats.PendingDownloads; + + sb[17].StatID = (uint)Stats.PendingDownloads; sb[17].StatValue = m_pendingDownloads; - - sb[18].StatID = (uint) Stats.PendingUploads; + + sb[18].StatID = (uint)Stats.PendingUploads; sb[18].StatValue = m_pendingUploads; - - sb[19].StatID = (uint) Stats.ActiveScripts; + + sb[19].StatID = (uint)Stats.ActiveScripts; sb[19].StatValue = m_activeScripts; - - sb[20].StatID = (uint) Stats.ScriptLinesPerSecond; + + sb[20].StatID = (uint)Stats.ScriptLinesPerSecond; sb[20].StatValue = m_scriptLinesPerSecond / statsUpdateFactor; - + statpack.Stat = sb; handlerSendStatResult = OnSendStatsResult; @@ -223,7 +260,7 @@ namespace OpenSim.Region.Environment.Scenes resetvalues(); } } - + private void resetvalues() { m_timeDilation = 0; @@ -247,7 +284,6 @@ namespace OpenSim.Region.Environment.Scenes } # region methods called from Scene - // The majority of these functions are additive // so that you can easily change the amount of // seconds in between sim stats updates @@ -256,10 +292,10 @@ namespace OpenSim.Region.Environment.Scenes { //float tdsetting = td; //if (tdsetting > 1.0f) - //tdsetting = (tdsetting - (tdsetting - 0.91f)); + //tdsetting = (tdsetting - (tdsetting - 0.91f)); //if (tdsetting < 0) - //tdsetting = 0.0f; + //tdsetting = 0.0f; m_timeDilation = td; } @@ -317,35 +353,30 @@ namespace OpenSim.Region.Environment.Scenes { m_frameMS += ms; } - public void addNetMS(int ms) { m_netMS += ms; } - public void addAgentMS(int ms) { m_agentMS += ms; } - public void addPhysicsMS(int ms) { m_physicsMS += ms; } - public void addImageMS(int ms) { m_imageMS += ms; } - public void addOtherMS(int ms) { m_otherMS += ms; } - + // private static readonly log4net.ILog m_log // = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); - + public void addPendingDownload(int count) { m_pendingDownloads += count; @@ -368,40 +399,5 @@ namespace OpenSim.Region.Environment.Scenes } #endregion - - #region Nested type: Stats - - private enum Stats : uint - { - TimeDilation = 0, - SimFPS = 1, - PhysicsFPS = 2, - AgentUpdates = 3, - FrameMS = 4, - NetMS = 5, - OtherMS = 6, - PhysicsMS = 7, - AgentMS = 8, - ImageMS = 9, - ScriptMS = 10, - TotalPrim = 11, - ActivePrim = 12, - Agents = 13, - ChildAgents = 14, - ActiveScripts = 15, - ScriptLinesPerSecond = 16, - InPacketsPerSecond = 17, - OutPacketsPerSecond = 18, - PendingDownloads = 19, - PendingUploads = 20, - UnAckedBytes = 24, - - // Havok4 related... May or may not be in upcoming LLclients - // (kelly added them sometime late in January 2008) - NumRCCSLODReduced = 25, - NumRCCSFixed = 26 - } - - #endregion } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Scenes/UndoState.cs b/OpenSim/Region/Environment/Scenes/UndoState.cs index f16bb34644..daabd8d829 100644 --- a/OpenSim/Region/Environment/Scenes/UndoState.cs +++ b/OpenSim/Region/Environment/Scenes/UndoState.cs @@ -32,8 +32,8 @@ namespace OpenSim.Region.Environment.Scenes public class UndoState { public LLVector3 Position = LLVector3.Zero; - public LLQuaternion Rotation = LLQuaternion.Identity; public LLVector3 Scale = LLVector3.Zero; + public LLQuaternion Rotation = LLQuaternion.Identity; public UndoState(LLVector3 pos, LLQuaternion rot, LLVector3 scale) { @@ -41,7 +41,7 @@ namespace OpenSim.Region.Environment.Scenes Rotation = rot; Scale = scale; } - + public UndoState(SceneObjectPart part) { if (part != null) @@ -50,20 +50,18 @@ namespace OpenSim.Region.Environment.Scenes { Position = part.AbsolutePosition; Rotation = part.RotationOffset; + } else { Position = part.GroupPosition; Rotation = part.RotationOffset; Scale = part.Shape.Scale; + } } } - public UndoState() - { - } - public bool Compare(SceneObjectPart part) { if (part != null) @@ -81,6 +79,7 @@ namespace OpenSim.Region.Environment.Scenes return true; else return false; + } } return false; @@ -91,7 +90,7 @@ namespace OpenSim.Region.Environment.Scenes if (part != null) { part.m_undoing = true; - + if (part.ParentID == 0) { part.ParentGroup.AbsolutePosition = Position; @@ -106,7 +105,12 @@ namespace OpenSim.Region.Environment.Scenes part.ScheduleTerseUpdate(); } part.m_undoing = false; + } } + + public UndoState() + { + } } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/StorageManager.cs b/OpenSim/Region/Environment/StorageManager.cs index 2178b5e042..b9a42a2f39 100644 --- a/OpenSim/Region/Environment/StorageManager.cs +++ b/OpenSim/Region/Environment/StorageManager.cs @@ -36,7 +36,12 @@ namespace OpenSim.Region.Environment { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private readonly IRegionDataStore m_dataStore; + private IRegionDataStore m_dataStore; + + public IRegionDataStore DataStore + { + get { return m_dataStore; } + } public StorageManager(IRegionDataStore storage) { @@ -69,10 +74,5 @@ namespace OpenSim.Region.Environment //TODO: Add checking and warning to make sure it initialised. } - - public IRegionDataStore DataStore - { - get { return m_dataStore; } - } } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Types/BasicQuadTreeNode.cs b/OpenSim/Region/Environment/Types/BasicQuadTreeNode.cs index 41f17e5e00..24ce94b106 100644 --- a/OpenSim/Region/Environment/Types/BasicQuadTreeNode.cs +++ b/OpenSim/Region/Environment/Types/BasicQuadTreeNode.cs @@ -33,15 +33,16 @@ namespace OpenSim.Region.Environment.Types { public class BasicQuadTreeNode { - private readonly short m_height; - private readonly short m_leftX; - private readonly short m_leftY; - private readonly List m_objects = new List(); - private readonly BasicQuadTreeNode m_parent; + private List m_objects = new List(); + private BasicQuadTreeNode[] m_childNodes = null; + private BasicQuadTreeNode m_parent = null; + + private short m_leftX; + private short m_leftY; + private short m_width; + private short m_height; //private int m_quadNumber; - private readonly string m_quadID; - private readonly short m_width; - private BasicQuadTreeNode[] m_childNodes; + private string m_quadID; public BasicQuadTreeNode(BasicQuadTreeNode parent, string quadID, short leftX, short leftY, short width, short height) @@ -66,9 +67,9 @@ namespace OpenSim.Region.Environment.Types } else { - if (obj.AbsolutePosition.X < (m_leftX + (m_width / 2))) + if (obj.AbsolutePosition.X < (m_leftX + (m_width/2))) { - if (obj.AbsolutePosition.Y < (m_leftY + (m_height / 2))) + if (obj.AbsolutePosition.Y < (m_leftY + (m_height/2))) { m_childNodes[0].AddObject(obj); } @@ -79,7 +80,7 @@ namespace OpenSim.Region.Environment.Types } else { - if (obj.AbsolutePosition.Y < (m_leftY + (m_height / 2))) + if (obj.AbsolutePosition.Y < (m_leftY + (m_height/2))) { m_childNodes[1].AddObject(obj); } @@ -97,17 +98,17 @@ namespace OpenSim.Region.Environment.Types { m_childNodes = new BasicQuadTreeNode[4]; m_childNodes[0] = - new BasicQuadTreeNode(this, m_quadID + "1/", m_leftX, m_leftY, (short) (m_width / 2), - (short) (m_height / 2)); + new BasicQuadTreeNode(this, m_quadID + "1/", m_leftX, m_leftY, (short) (m_width/2), + (short) (m_height/2)); m_childNodes[1] = - new BasicQuadTreeNode(this, m_quadID + "2/", (short) (m_leftX + (m_width / 2)), m_leftY, - (short) (m_width / 2), (short) (m_height / 2)); + new BasicQuadTreeNode(this, m_quadID + "2/", (short) (m_leftX + (m_width/2)), m_leftY, + (short) (m_width/2), (short) (m_height/2)); m_childNodes[2] = - new BasicQuadTreeNode(this, m_quadID + "3/", m_leftX, (short) (m_leftY + (m_height / 2)), - (short) (m_width / 2), (short) (m_height / 2)); + new BasicQuadTreeNode(this, m_quadID + "3/", m_leftX, (short) (m_leftY + (m_height/2)), + (short) (m_width/2), (short) (m_height/2)); m_childNodes[3] = - new BasicQuadTreeNode(this, m_quadID + "4/", (short) (m_leftX + (m_width / 2)), - (short) (m_height + (m_height / 2)), (short) (m_width / 2), (short) (m_height / 2)); + new BasicQuadTreeNode(this, m_quadID + "4/", (short) (m_leftX + (m_width/2)), + (short) (m_height + (m_height/2)), (short) (m_width/2), (short) (m_height/2)); } else { @@ -126,9 +127,9 @@ namespace OpenSim.Region.Environment.Types } else { - if (x < m_leftX + (m_width / 2)) + if (x < m_leftX + (m_width/2)) { - if (y < m_leftY + (m_height / 2)) + if (y < m_leftY + (m_height/2)) { return m_childNodes[0].GetObjectsFrom(x, y); } @@ -139,7 +140,7 @@ namespace OpenSim.Region.Environment.Types } else { - if (y < m_leftY + (m_height / 2)) + if (y < m_leftY + (m_height/2)) { return m_childNodes[1].GetObjectsFrom(x, y); } @@ -180,9 +181,9 @@ namespace OpenSim.Region.Environment.Types } else { - if (x < m_leftX + (m_width / 2)) + if (x < m_leftX + (m_width/2)) { - if (y < m_leftY + (m_height / 2)) + if (y < m_leftY + (m_height/2)) { return m_childNodes[0].GetNodeID(x, y); } @@ -193,7 +194,7 @@ namespace OpenSim.Region.Environment.Types } else { - if (y < m_leftY + (m_height / 2)) + if (y < m_leftY + (m_height/2)) { return m_childNodes[1].GetNodeID(x, y); } @@ -265,4 +266,4 @@ namespace OpenSim.Region.Environment.Types return retVal; } } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Types/UpdateQueue.cs b/OpenSim/Region/Environment/Types/UpdateQueue.cs index 24fe116845..ec1ffd250a 100644 --- a/OpenSim/Region/Environment/Types/UpdateQueue.cs +++ b/OpenSim/Region/Environment/Types/UpdateQueue.cs @@ -34,70 +34,26 @@ using OpenSim.Region.Environment.Scenes; namespace OpenSim.Region.Environment.Types { - [Serializable] - public class UpdateQueue : ISerializable + [Serializable] + public class UpdateQueue : ISerializable { - private readonly List m_ids; - private readonly Queue m_queue; + private Queue m_queue; - private readonly object m_syncObject = new object(); + private List m_ids; - public UpdateQueue() - { - m_queue = new Queue(); - m_ids = new List(); - } - - protected UpdateQueue(SerializationInfo info, StreamingContext context) - { - //System.Console.WriteLine("UpdateQueue Deserialize BGN"); - - if (info == null) - { - throw new ArgumentNullException("info"); - } - - m_queue = (Queue) info.GetValue("m_queue", typeof (Queue)); - List ids_work = (List) info.GetValue("m_ids", typeof (List)); - - foreach (Guid guid in ids_work) - { - m_ids.Add(new LLUUID(guid)); - } - - //System.Console.WriteLine("UpdateQueue Deserialize END"); - } + private object m_syncObject = new object(); public int Count { get { return m_queue.Count; } } - #region ISerializable Members - - [SecurityPermission(SecurityAction.LinkDemand, - Flags = SecurityPermissionFlag.SerializationFormatter)] - public virtual void GetObjectData( - SerializationInfo info, StreamingContext context) + public UpdateQueue() { - if (info == null) - { - throw new ArgumentNullException("info"); - } - - List ids_work = new List(); - - foreach (LLUUID uuid in m_ids) - { - ids_work.Add(uuid.UUID); - } - - info.AddValue("m_queue", m_queue); - info.AddValue("m_ids", ids_work); + m_queue = new Queue(); + m_ids = new List(); } - #endregion - public void Clear() { lock (m_syncObject) @@ -133,5 +89,46 @@ namespace OpenSim.Region.Environment.Types return part; } + + protected UpdateQueue(SerializationInfo info, StreamingContext context) + { + //System.Console.WriteLine("UpdateQueue Deserialize BGN"); + + if (info == null) + { + throw new ArgumentNullException("info"); + } + + m_queue = (Queue)info.GetValue("m_queue", typeof(Queue)); + List ids_work = (List)info.GetValue("m_ids", typeof(List)); + + foreach (Guid guid in ids_work) + { + m_ids.Add(new LLUUID(guid)); + } + + //System.Console.WriteLine("UpdateQueue Deserialize END"); + } + + [SecurityPermission(SecurityAction.LinkDemand, + Flags = SecurityPermissionFlag.SerializationFormatter)] + public virtual void GetObjectData( + SerializationInfo info, StreamingContext context) + { + if (info == null) + { + throw new ArgumentNullException("info"); + } + + List ids_work = new List(); + + foreach (LLUUID uuid in m_ids) + { + ids_work.Add(uuid.UUID); + } + + info.AddValue("m_queue", m_queue); + info.AddValue("m_ids", ids_work); + } } -} \ No newline at end of file +} diff --git a/ThirdParty/3Di/LoadBalancer/LoadBalancerPlugin.cs b/ThirdParty/3Di/LoadBalancer/LoadBalancerPlugin.cs index af979a6369..dda8be6d6f 100644 --- a/ThirdParty/3Di/LoadBalancer/LoadBalancerPlugin.cs +++ b/ThirdParty/3Di/LoadBalancer/LoadBalancerPlugin.cs @@ -52,12 +52,12 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer public class LoadBalancerPlugin : IApplicationPlugin { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private readonly object padlock = new object(); private BaseHttpServer commandServer; private bool[] isLocalNeighbour; - private bool isSplit; + private bool isSplit = false; private TcpServer mTcpServer; + private object padlock = new object(); private int proxyOffset; private string proxyURL; @@ -80,8 +80,8 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer if (proxyURL.Length == 0) return; StartTcpServer(); - ClientView.SynchronizeClient = SynchronizePackets; - AsynchronousSocketListener.PacketHandler = SynchronizePacketRecieve; + ClientView.SynchronizeClient = new ClientView.SynchronizeClientHandler(SynchronizePackets); + AsynchronousSocketListener.PacketHandler = new AsynchronousSocketListener.PacketRecieveHandler(SynchronizePacketRecieve); sceneManager = openSim.SceneManager; udpServers = openSim.UdpServers; @@ -146,7 +146,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer { ClientView client = (ClientView) pre.ControllingClient; //if(pre.MovementFlag!=0 && client.PacketProcessingEnabled==true) { - if (client.PacketProcessingEnabled) + if (client.PacketProcessingEnabled == true) { get_scene_presence_filter++; } @@ -159,7 +159,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer { ClientView client = (ClientView) pre.ControllingClient; //if(pre.MovementFlag!=0 && client.PacketProcessingEnabled==true) { - if (client.PacketProcessingEnabled) + if (client.PacketProcessingEnabled == true) { get_avatar_filter++; avatar_names += pre.Firstname + " " + pre.Lastname + "; "; @@ -178,7 +178,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer } catch (Exception e) { - m_log.Error("[BALANCER] " + e); + m_log.Error("[BALANCER] " + e.ToString()); m_log.Error("[BALANCER] " + e.StackTrace); } return response; @@ -199,7 +199,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer } catch (Exception e) { - m_log.Error("[BALANCER] " + e); + m_log.Error("[BALANCER] " + e.ToString()); m_log.Error("[BALANCER] " + e.StackTrace); } @@ -223,7 +223,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer } catch (Exception e) { - m_log.Error("[BALANCER] " + e); + m_log.Error("[BALANCER] " + e.ToString()); m_log.Error("[BALANCER] " + e.StackTrace); } @@ -247,7 +247,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer } catch (Exception e) { - m_log.Error("[BALANCER] " + e); + m_log.Error("[BALANCER] " + e.ToString()); m_log.Error("[BALANCER] " + e.StackTrace); throw e; } @@ -264,14 +264,14 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer int src_port = (int) request.Params[0]; // backgroud - WaitCallback callback = TerminateRegion; + WaitCallback callback = new WaitCallback(TerminateRegion); ThreadPool.QueueUserWorkItem(callback, src_port); m_log.Info("[BALANCER] " + "Exiting TerminateRegion()"); } catch (Exception e) { - m_log.Error("[BALANCER] " + e); + m_log.Error("[BALANCER] " + e.ToString()); m_log.Error("[BALANCER] " + e.StackTrace); } @@ -330,8 +330,8 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer dst_region = DeserializeRegion(dst_port, false, serializeDir); // Decide who is in charge for each section - int[] port = new[] {src_port, dst_port}; - string[] url = new[] {"http://" + src_url + ":" + commandServer.Port, "http://" + dst_url + ":" + commandServer.Port}; + int[] port = new int[] {src_port, dst_port}; + string[] url = new string[] {"http://" + src_url + ":" + commandServer.Port, "http://" + dst_url + ":" + commandServer.Port}; for (int i = 0; i < 2; i++) Util.XmlRpcCommand(url[i], "SplitRegion", i, 2, port[0], port[1], url[0], url[1]); // Enable the proxy @@ -424,7 +424,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer // serialization of region data SearializableRegionInfo dst_region = new SearializableRegionInfo(src_region); - filename = export_dir + "RegionInfo_" + src_region.RegionID + ".bin"; + filename = export_dir + "RegionInfo_" + src_region.RegionID.ToString() + ".bin"; Util.SerializeToFile(filename, dst_region); // backup current scene's entities @@ -451,7 +451,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer { ClientInfo info = controller.GetClientInfo(); - filename = export_dir + "ClientInfo-" + String.Format("{0:0000}", idx) + "_" + controller.CircuitCode + ".bin"; + filename = export_dir + "ClientInfo-" + String.Format("{0:0000}", idx) + "_" + controller.CircuitCode.ToString() + ".bin"; Util.SerializeToFile(filename, info); @@ -469,12 +469,13 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer private RegionInfo DeserializeRegion(int dst_port, bool move_flag, string import_dir) { + string[] files = null; RegionInfo dst_region = null; try { // deserialization of region data - string[] files = Directory.GetFiles(import_dir, "RegionInfo_*.bin"); + files = Directory.GetFiles(import_dir, "RegionInfo_*.bin"); foreach (string filename in files) { @@ -502,7 +503,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer } catch (Exception e) { - m_log.Error("[BALANCER] " + e); + m_log.Error("[BALANCER] " + e.ToString()); m_log.Error("[BALANCER] " + e.StackTrace); throw e; } @@ -592,7 +593,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer // change RegionInfo (memory only) dst_region.InternalEndPoint.Port = dst_port; - dst_region.ExternalHostName = proxyURL.Split(new[] {'/', ':'})[3]; + dst_region.ExternalHostName = proxyURL.Split(new char[] {'/', ':'})[3]; // Create new region simMain.CreateRegion(dst_region, false); @@ -694,7 +695,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer for (int i = 0; i < numRegions; i++) { - hostname = sceneURL[i].Split(new[] {'/', ':'})[3]; + hostname = sceneURL[i].Split(new char[] {'/', ':'})[3]; m_log.InfoFormat("[SPLITSCENE] " + "creating tcp client host:{0}", hostname); tcpClientList[i] = new TcpClient(hostname, 10001); } @@ -730,11 +731,12 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer List circuits = scene.ClientManager.GetAllCircuitCodes(); circuits.Sort(); + IClientAPI controller = null; + foreach (uint code in circuits) { m_log.InfoFormat("[BALANCER] " + "circuit code : {0}", code); - IClientAPI controller; if (scene.ClientManager.TryGetClient(code, out controller)) { // Divide the presences evenly over the set of subscenes @@ -754,7 +756,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer } scene.splitID = myID; - scene.SynchronizeScene = SynchronizeScenes; + scene.SynchronizeScene = new Scene.SynchronizeSceneHandler(SynchronizeScenes); isSplit = true; } else @@ -764,7 +766,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer } catch (Exception e) { - m_log.Error("[SPLITSCENE] " + e); + m_log.Error("[SPLITSCENE] " + e.ToString()); m_log.Error("[SPLITSCENE] " + e.StackTrace); } @@ -818,7 +820,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer } catch (Exception e) { - m_log.Error("[BALANCER] " + e); + m_log.Error("[BALANCER] " + e.ToString()); m_log.Error("[BALANCER] " + e.StackTrace); throw e; } @@ -891,7 +893,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer // Because data changes by the physics simulation when the client doesn't move, // if MovementFlag is false, It is necessary to synchronize. //if(pre.MovementFlag!=0 && client.PacketProcessingEnabled==true) - if (client.PacketProcessingEnabled) + if (client.PacketProcessingEnabled == true) { //m_log.Info("[SPLITSCENE] "+String.Format("Client moving in {0} {1}", scene.RegionInfo.RegionID, pre.AbsolutePosition)); @@ -1014,7 +1016,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer return; } - if (((ClientView) pre.ControllingClient).PacketProcessingEnabled) + if (((ClientView) pre.ControllingClient).PacketProcessingEnabled == true) { pre.ControllingClient.OutPacket(packet, throttlePacketType); } @@ -1058,7 +1060,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer } catch (Exception e) { - m_log.Error("[SPLITSCENE] " + e); + m_log.Error("[SPLITSCENE] " + e.ToString()); m_log.Error("[SPLITSCENE] " + e.StackTrace); } @@ -1070,7 +1072,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer LLUUID scenePresenceID = new LLUUID(header.agent_id); LLVector3 position = new LLVector3(buff, 0); LLVector3 velocity = new LLVector3(buff, 12); - bool flying = ((buff[24] == 1) ? true : false); + bool flying = ((buff[24] == (byte) 1) ? true : false); LocalUpdatePhysics(regionPort, scenePresenceID, position, velocity, flying); @@ -1084,4 +1086,4 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer // m_log.Info("[SPLITSCENE] "+"exiting SynchronizePacketRecieve"); } } -} \ No newline at end of file +} diff --git a/ThirdParty/3Di/LoadBalancer/TcpClient.cs b/ThirdParty/3Di/LoadBalancer/TcpClient.cs index e9e019c048..af678a0213 100644 --- a/ThirdParty/3Di/LoadBalancer/TcpClient.cs +++ b/ThirdParty/3Di/LoadBalancer/TcpClient.cs @@ -34,8 +34,8 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer { public class AsynchronousClient { - private static readonly ManualResetEvent connectDone = new ManualResetEvent(false); - private static readonly ManualResetEvent sendDone = new ManualResetEvent(false); + private static ManualResetEvent connectDone = new ManualResetEvent(false); + private static ManualResetEvent sendDone = new ManualResetEvent(false); public static Socket StartClient(string hostname, int port) { @@ -46,7 +46,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer IPEndPoint remoteEP = new IPEndPoint(ipAddress, port); Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - client.BeginConnect(remoteEP, ConnectCallback, client); + client.BeginConnect(remoteEP, new AsyncCallback(ConnectCallback), client); connectDone.WaitOne(); /* Send(client,"This is a test"); @@ -71,7 +71,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer { Socket client = (Socket) ar.AsyncState; client.EndConnect(ar); - Console.WriteLine("Socket connected to {0}", client.RemoteEndPoint); + Console.WriteLine("Socket connected to {0}", client.RemoteEndPoint.ToString()); connectDone.Set(); } catch (Exception e) @@ -138,8 +138,8 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer public class InternalPacketHeader { - private readonly byte[] buffer = new byte[32]; public Guid agent_id; + private byte[] buffer = new byte[32]; public int numbytes; public int region_port; public int throttlePacketType; @@ -150,16 +150,16 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer int i = 0; // offset try { - type = (bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - throttlePacketType = (bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); - numbytes = (bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); + type = (int) (bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); + throttlePacketType = (int) (bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); + numbytes = (int) (bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); agent_id = new Guid( bytes[i++] | (bytes[i++] << 8) | (bytes[i++] << 16) | bytes[i++] << 24, (short) (bytes[i++] | (bytes[i++] << 8)), (short) (bytes[i++] | (bytes[i++] << 8)), bytes[i++], bytes[i++], bytes[i++], bytes[i++], bytes[i++], bytes[i++], bytes[i++], bytes[i++]); - region_port = (bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); + region_port = (int) (bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24)); } catch (Exception) { @@ -201,11 +201,11 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer public class TcpClient { public static int internalPacketHeaderSize = 4 * 4 + 16 * 1; - - private readonly string mHostname; - private readonly int mPort; private Socket mConnection; + private string mHostname; + private int mPort; + public TcpClient(string hostname, int port) { mHostname = hostname; diff --git a/ThirdParty/3Di/LoadBalancer/TcpServer.cs b/ThirdParty/3Di/LoadBalancer/TcpServer.cs index cd94b95efd..9722a1bb1a 100644 --- a/ThirdParty/3Di/LoadBalancer/TcpServer.cs +++ b/ThirdParty/3Di/LoadBalancer/TcpServer.cs @@ -37,15 +37,15 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer { public const int BufferSize = 2048; public byte[] buffer = new byte[BufferSize]; - public InternalPacketHeader header; + public InternalPacketHeader header = null; public MemoryStream ms_ptr = new MemoryStream(); - public Socket workSocket; + public Socket workSocket = null; } public class AsynchronousSocketListener { public static ManualResetEvent allDone = new ManualResetEvent(false); - public static string data; + public static string data = null; #region KIRYU @@ -55,10 +55,14 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer #endregion - public static PacketRecieveHandler PacketHandler; + public static PacketRecieveHandler PacketHandler = null; #endregion + public AsynchronousSocketListener() + { + } + public static void StartListening(int port) { IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName()); @@ -195,7 +199,7 @@ namespace OpenSim.ApplicationPlugins.LoadBalancer public class TcpServer { - private readonly int mPort = 11000; + private int mPort = 11000; public TcpServer() { diff --git a/ThirdParty/3Di/RegionProxy/RegionProxyPlugin.cs b/ThirdParty/3Di/RegionProxy/RegionProxyPlugin.cs index 2c86fd4408..eaafe6cded 100644 --- a/ThirdParty/3Di/RegionProxy/RegionProxyPlugin.cs +++ b/ThirdParty/3Di/RegionProxy/RegionProxyPlugin.cs @@ -75,7 +75,7 @@ namespace OpenSim.ApplicationPlugins.RegionProxy string proxyURL = openSim.ConfigSource.Configs["Network"].GetString("proxy_url", ""); if (proxyURL.Length == 0) return; - uint port = (uint) Int32.Parse(proxyURL.Split(new[] {':'})[2]); + uint port = (uint) Int32.Parse(proxyURL.Split(new char[] {':'})[2]); command_server = new BaseHttpServer(port); command_server.Start(); command_server.AddXmlRPCHandler("AddPort", AddPort); @@ -223,7 +223,7 @@ namespace OpenSim.ApplicationPlugins.RegionProxy { m_log = log; running = false; - receivedData = OnReceivedData; + receivedData = new AsyncCallback(OnReceivedData); } public void BlockClientMessages(string regionUrl, int regionPort) @@ -452,7 +452,7 @@ namespace OpenSim.ApplicationPlugins.RegionProxy protected class ProxyMap { - private readonly Dictionary map; + private Dictionary map; public ProxyMap() { @@ -494,7 +494,7 @@ namespace OpenSim.ApplicationPlugins.RegionProxy public class RegionData { - public bool isBlocked; + public bool isBlocked = false; public List regions = new List(); public Queue storedMessages = new Queue(); }