DotNetEngine_ScriptLoadUnload.cs 4.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /*
  2. * Copyright (c) Contributors, http://opensimulator.org/
  3. * See CONTRIBUTORS.TXT for a full list of copyright holders.
  4. *
  5. * Redistribution and use in source and binary forms, with or without
  6. * modification, are permitted provided that the following conditions are met:
  7. * * Redistributions of source code must retain the above copyright
  8. * notice, this list of conditions and the following disclaimer.
  9. * * Redistributions in binary form must reproduce the above copyright
  10. * notice, this list of conditions and the following disclaimer in the
  11. * documentation and/or other materials provided with the distribution.
  12. * * Neither the name of the OpenSimulator Project nor the
  13. * names of its contributors may be used to endorse or promote products
  14. * derived from this software without specific prior written permission.
  15. *
  16. * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
  17. * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  18. * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  19. * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
  20. * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  21. * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  22. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  23. * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  24. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  25. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  26. */
  27. using System;
  28. using System.Collections.Generic;
  29. using System.Text;
  30. using OpenMetaverse;
  31. using OpenSim.ScriptEngine.Components.DotNetEngine.Events;
  32. using OpenSim.ScriptEngine.Shared;
  33. namespace OpenSim.ScriptEngine.Engines.DotNetEngine
  34. {
  35. public partial class DotNetEngine
  36. {
  37. //internal Dictionary<int, IScriptScheduler> ScriptMapping = new Dictionary<int, IScriptScheduler>();
  38. //
  39. // HANDLE EVENTS FROM SCRIPTS
  40. // We will handle script add, change and remove events outside of command pipeline
  41. //
  42. #region Script Add/Change/Remove
  43. void Events_RezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez, string engine)
  44. {
  45. // ###
  46. // # New script created
  47. // ###
  48. m_log.DebugFormat(
  49. "[{0}] NEW SCRIPT: localID: {1}, itemID: {2}, startParam: {3}, postOnRez: {4}, engine: {5}",
  50. Name, localID, itemID, startParam, postOnRez, engine);
  51. // Make a script object
  52. ScriptStructure scriptObject = new ScriptStructure();
  53. scriptObject.RegionInfo = RegionInfo;
  54. scriptObject.LocalID = localID;
  55. scriptObject.ItemID = itemID;
  56. scriptObject.Source = script;
  57. //
  58. // Get MetaData from script header
  59. //
  60. ScriptMetaData scriptMetaData = ScriptMetaData.Extract(ref script);
  61. scriptObject.ScriptMetaData = scriptMetaData;
  62. foreach (string key in scriptObject.ScriptMetaData.Keys)
  63. {
  64. m_log.DebugFormat("[{0}] Script metadata: Key: \"{1}\", Value: \"{2}\".", Name, key, scriptObject.ScriptMetaData[key]);
  65. }
  66. //
  67. // Load this assembly
  68. //
  69. // TODO: Use Executor to send a command instead?
  70. m_log.DebugFormat("[{0}] Adding script to scheduler", Name);
  71. RegionInfo.FindScheduler(scriptObject.ScriptMetaData).AddScript(scriptObject);
  72. // Add to our internal mapping
  73. //ScriptMapping.Add(itemID, Schedulers[scheduler]);
  74. }
  75. private void Events_RemoveScript(uint localID, UUID itemID)
  76. {
  77. // Tell all schedulers to remove this item
  78. foreach (IScriptScheduler scheduler in RegionInfo.Schedulers.Values)
  79. {
  80. scheduler.Removecript(localID, itemID);
  81. }
  82. }
  83. #endregion
  84. }
  85. }