diff options
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared/Instance')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs | 50 | ||||
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Instance/ScriptSerializer.cs | 11 |
2 files changed, 43 insertions, 18 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs index 5e68d69..8d92ba5 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs | |||
@@ -26,16 +26,17 @@ | |||
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | using System.Collections; | ||
30 | using System.Collections.Generic; | ||
31 | using System.Globalization; | ||
29 | using System.IO; | 32 | using System.IO; |
30 | using System.Diagnostics; //for [DebuggerNonUserCode] | 33 | using System.Diagnostics; //for [DebuggerNonUserCode] |
34 | using System.Reflection; | ||
31 | using System.Runtime.Remoting; | 35 | using System.Runtime.Remoting; |
32 | using System.Runtime.Remoting.Lifetime; | 36 | using System.Runtime.Remoting.Lifetime; |
33 | using System.Threading; | ||
34 | using System.Collections; | ||
35 | using System.Collections.Generic; | ||
36 | using System.Security.Policy; | 37 | using System.Security.Policy; |
37 | using System.Reflection; | 38 | using System.Text; |
38 | using System.Globalization; | 39 | using System.Threading; |
39 | using System.Xml; | 40 | using System.Xml; |
40 | using OpenMetaverse; | 41 | using OpenMetaverse; |
41 | using log4net; | 42 | using log4net; |
@@ -121,6 +122,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
121 | 122 | ||
122 | public bool Running { get; set; } | 123 | public bool Running { get; set; } |
123 | 124 | ||
125 | public bool Run { get; set; } | ||
126 | |||
124 | public bool Suspended | 127 | public bool Suspended |
125 | { | 128 | { |
126 | get { return m_Suspended; } | 129 | get { return m_Suspended; } |
@@ -216,6 +219,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
216 | m_postOnRez = postOnRez; | 219 | m_postOnRez = postOnRez; |
217 | m_AttachedAvatar = part.ParentGroup.AttachedAvatar; | 220 | m_AttachedAvatar = part.ParentGroup.AttachedAvatar; |
218 | m_RegionID = part.ParentGroup.Scene.RegionInfo.RegionID; | 221 | m_RegionID = part.ParentGroup.Scene.RegionInfo.RegionID; |
222 | Run = true; | ||
219 | 223 | ||
220 | if (part != null) | 224 | if (part != null) |
221 | { | 225 | { |
@@ -232,7 +236,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
232 | foreach (string api in am.GetApis()) | 236 | foreach (string api in am.GetApis()) |
233 | { | 237 | { |
234 | m_Apis[api] = am.CreateApi(api); | 238 | m_Apis[api] = am.CreateApi(api); |
235 | m_Apis[api].Initialize(engine, part, LocalID, itemID); | 239 | m_Apis[api].Initialize(engine, part, ScriptTask); |
236 | } | 240 | } |
237 | 241 | ||
238 | try | 242 | try |
@@ -295,13 +299,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
295 | using (FileStream fs = File.Open(savedState, | 299 | using (FileStream fs = File.Open(savedState, |
296 | FileMode.Open, FileAccess.Read, FileShare.None)) | 300 | FileMode.Open, FileAccess.Read, FileShare.None)) |
297 | { | 301 | { |
298 | System.Text.UTF8Encoding enc = | ||
299 | new System.Text.UTF8Encoding(); | ||
300 | |||
301 | Byte[] data = new Byte[size]; | 302 | Byte[] data = new Byte[size]; |
302 | fs.Read(data, 0, size); | 303 | fs.Read(data, 0, size); |
303 | 304 | ||
304 | xml = enc.GetString(data); | 305 | xml = Encoding.UTF8.GetString(data); |
305 | 306 | ||
306 | ScriptSerializer.Deserialize(xml, this); | 307 | ScriptSerializer.Deserialize(xml, this); |
307 | 308 | ||
@@ -330,16 +331,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
330 | } | 331 | } |
331 | else | 332 | else |
332 | { | 333 | { |
333 | m_log.ErrorFormat( | 334 | m_log.WarnFormat( |
334 | "[SCRIPT INSTANCE]: Unable to load script state from assembly {0}: Memory limit exceeded", | 335 | "[SCRIPT INSTANCE]: Unable to load script state file {0} for script {1} {2} in {3} {4} (assembly {5}). Memory limit exceeded", |
335 | assembly); | 336 | savedState, ScriptName, ItemID, PrimName, ObjectID, assembly); |
336 | } | 337 | } |
337 | } | 338 | } |
338 | catch (Exception e) | 339 | catch (Exception e) |
339 | { | 340 | { |
340 | m_log.ErrorFormat( | 341 | m_log.ErrorFormat( |
341 | "[SCRIPT INSTANCE]: Unable to load script state from assembly {0}. XML is {1}. Exception {2}{3}", | 342 | "[SCRIPT INSTANCE]: Unable to load script state file {0} for script {1} {2} in {3} {4} (assembly {5}). XML is {6}. Exception {7}{8}", |
342 | assembly, xml, e.Message, e.StackTrace); | 343 | savedState, ScriptName, ItemID, PrimName, ObjectID, assembly, xml, e.Message, e.StackTrace); |
343 | } | 344 | } |
344 | } | 345 | } |
345 | // else | 346 | // else |
@@ -354,10 +355,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
354 | 355 | ||
355 | public void Init() | 356 | public void Init() |
356 | { | 357 | { |
357 | if (!m_startOnInit) return; | 358 | if (!m_startOnInit) |
359 | return; | ||
358 | 360 | ||
359 | if (m_startedFromSavedState) | 361 | if (m_startedFromSavedState) |
360 | { | 362 | { |
363 | if (!Run) | ||
364 | return; | ||
365 | |||
361 | Start(); | 366 | Start(); |
362 | if (m_postOnRez) | 367 | if (m_postOnRez) |
363 | { | 368 | { |
@@ -390,6 +395,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
390 | } | 395 | } |
391 | else | 396 | else |
392 | { | 397 | { |
398 | if (!Run) | ||
399 | return; | ||
400 | |||
393 | Start(); | 401 | Start(); |
394 | PostEvent(new EventParams("state_entry", | 402 | PostEvent(new EventParams("state_entry", |
395 | new Object[0], new DetectParams[0])); | 403 | new Object[0], new DetectParams[0])); |
@@ -946,8 +954,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
946 | try | 954 | try |
947 | { | 955 | { |
948 | FileStream fs = File.Create(Path.Combine(Path.GetDirectoryName(assembly), ItemID.ToString() + ".state")); | 956 | FileStream fs = File.Create(Path.Combine(Path.GetDirectoryName(assembly), ItemID.ToString() + ".state")); |
949 | System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding(); | 957 | Byte[] buf = Util.UTF8NoBomEncoding.GetBytes(xml); |
950 | Byte[] buf = enc.GetBytes(xml); | ||
951 | fs.Write(buf, 0, buf.Length); | 958 | fs.Write(buf, 0, buf.Length); |
952 | fs.Close(); | 959 | fs.Close(); |
953 | } | 960 | } |
@@ -966,7 +973,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
966 | public IScriptApi GetApi(string name) | 973 | public IScriptApi GetApi(string name) |
967 | { | 974 | { |
968 | if (m_Apis.ContainsKey(name)) | 975 | if (m_Apis.ContainsKey(name)) |
976 | { | ||
977 | // m_log.DebugFormat("[SCRIPT INSTANCE]: Found api {0} in {1}@{2}", name, ScriptName, PrimName); | ||
978 | |||
969 | return m_Apis[name]; | 979 | return m_Apis[name]; |
980 | } | ||
981 | |||
982 | // m_log.DebugFormat("[SCRIPT INSTANCE]: Did not find api {0} in {1}@{2}", name, ScriptName, PrimName); | ||
983 | |||
970 | return null; | 984 | return null; |
971 | } | 985 | } |
972 | 986 | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptSerializer.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptSerializer.cs index bcdc7bf..797bce3 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptSerializer.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptSerializer.cs | |||
@@ -55,6 +55,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
55 | public static string Serialize(ScriptInstance instance) | 55 | public static string Serialize(ScriptInstance instance) |
56 | { | 56 | { |
57 | bool running = instance.Running; | 57 | bool running = instance.Running; |
58 | bool enabled = instance.Run; | ||
58 | 59 | ||
59 | XmlDocument xmldoc = new XmlDocument(); | 60 | XmlDocument xmldoc = new XmlDocument(); |
60 | 61 | ||
@@ -77,6 +78,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
77 | 78 | ||
78 | rootElement.AppendChild(run); | 79 | rootElement.AppendChild(run); |
79 | 80 | ||
81 | XmlElement run_enable = xmldoc.CreateElement("", "Run", ""); | ||
82 | run_enable.AppendChild(xmldoc.CreateTextNode( | ||
83 | enabled.ToString())); | ||
84 | |||
85 | rootElement.AppendChild(run_enable); | ||
86 | |||
80 | Dictionary<string, Object> vars = instance.GetVars(); | 87 | Dictionary<string, Object> vars = instance.GetVars(); |
81 | 88 | ||
82 | XmlElement variables = xmldoc.CreateElement("", "Variables", ""); | 89 | XmlElement variables = xmldoc.CreateElement("", "Variables", ""); |
@@ -225,6 +232,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
225 | { | 232 | { |
226 | object varValue; | 233 | object varValue; |
227 | XmlNodeList partL = rootNode.ChildNodes; | 234 | XmlNodeList partL = rootNode.ChildNodes; |
235 | instance.Run = true; | ||
228 | 236 | ||
229 | foreach (XmlNode part in partL) | 237 | foreach (XmlNode part in partL) |
230 | { | 238 | { |
@@ -236,6 +244,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
236 | case "Running": | 244 | case "Running": |
237 | instance.Running=bool.Parse(part.InnerText); | 245 | instance.Running=bool.Parse(part.InnerText); |
238 | break; | 246 | break; |
247 | case "Run": | ||
248 | instance.Run = bool.Parse(part.InnerText); | ||
249 | break; | ||
239 | case "Variables": | 250 | case "Variables": |
240 | XmlNodeList varL = part.ChildNodes; | 251 | XmlNodeList varL = part.ChildNodes; |
241 | foreach (XmlNode var in varL) | 252 | foreach (XmlNode var in varL) |