Merge branch 'master' of ssh://diva@opensimulator.org/var/git/opensim
						commit
						86104cd45c
					
				| 
						 | 
				
			
			@ -35,7 +35,7 @@ namespace OpenSim.Region.Framework.Interfaces
 | 
			
		|||
        string ScriptEngineName { get; }
 | 
			
		||||
 | 
			
		||||
        string GetXMLState(UUID itemID);
 | 
			
		||||
        void SetXMLState(UUID itemID, string xml);
 | 
			
		||||
        bool SetXMLState(UUID itemID, string xml);
 | 
			
		||||
 | 
			
		||||
        bool PostScriptEvent(UUID itemID, string name, Object[] args);
 | 
			
		||||
        bool PostObjectEvent(UUID itemID, string name, Object[] args);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1314,7 +1314,7 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
                maintc = Util.EnvironmentTickCountSubtract(maintc);
 | 
			
		||||
                maintc = (int)(m_timespan * 1000) - maintc;
 | 
			
		||||
 | 
			
		||||
                if ((maintc < (m_timespan * 1000)) && maintc > 0)
 | 
			
		||||
                if (maintc > 0)
 | 
			
		||||
                    Thread.Sleep(maintc);
 | 
			
		||||
 | 
			
		||||
                // Tell the watchdog that this thread is still alive
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,6 +26,7 @@
 | 
			
		|||
 */
 | 
			
		||||
 | 
			
		||||
using System;
 | 
			
		||||
using System.Xml;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
| 
						 | 
				
			
			@ -283,15 +284,55 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
 | 
			
		||||
        private void RestoreSavedScriptState(UUID oldID, UUID newID)
 | 
			
		||||
        {
 | 
			
		||||
            IScriptModule[] engines = m_part.ParentGroup.Scene.RequestModuleInterfaces<IScriptModule>();
 | 
			
		||||
            if (engines == null) // No engine at all
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            if (m_part.ParentGroup.m_savedScriptState.ContainsKey(oldID))
 | 
			
		||||
            {
 | 
			
		||||
                string fpath = Path.Combine("ScriptEngines/"+m_part.ParentGroup.Scene.RegionInfo.RegionID.ToString(),
 | 
			
		||||
                                    newID.ToString()+".state");
 | 
			
		||||
                FileStream fs = File.Create(fpath);
 | 
			
		||||
                Byte[] buffer = enc.GetBytes(m_part.ParentGroup.m_savedScriptState[oldID]);
 | 
			
		||||
                fs.Write(buffer,0,buffer.Length);
 | 
			
		||||
                fs.Close();
 | 
			
		||||
                m_part.ParentGroup.m_savedScriptState.Remove(oldID);
 | 
			
		||||
                XmlDocument doc = new XmlDocument();
 | 
			
		||||
 | 
			
		||||
                doc.LoadXml(m_part.ParentGroup.m_savedScriptState[oldID]);
 | 
			
		||||
                
 | 
			
		||||
                ////////// CRUFT WARNING ///////////////////////////////////
 | 
			
		||||
                //
 | 
			
		||||
                // Old objects will have <ScriptState><State> ...
 | 
			
		||||
                // This format is XEngine ONLY
 | 
			
		||||
                //
 | 
			
		||||
                // New objects have <State Engine="...." ...><ScriptState>...
 | 
			
		||||
                // This can be passed to any engine
 | 
			
		||||
                //
 | 
			
		||||
                XmlNode n = doc.SelectSingleNode("ScriptState");
 | 
			
		||||
                if (n != null) // Old format data
 | 
			
		||||
                {
 | 
			
		||||
                    XmlDocument newDoc = new XmlDocument();
 | 
			
		||||
 | 
			
		||||
                    XmlElement rootN = newDoc.CreateElement("", "State", "");
 | 
			
		||||
                    XmlAttribute uuidA = newDoc.CreateAttribute("", "UUID", "");
 | 
			
		||||
                    uuidA.Value = oldID.ToString();
 | 
			
		||||
                    rootN.Attributes.Append(uuidA);
 | 
			
		||||
                    XmlAttribute engineA = newDoc.CreateAttribute("", "Engine", "");
 | 
			
		||||
                    engineA.Value = "XEngine";
 | 
			
		||||
                    rootN.Attributes.Append(engineA);
 | 
			
		||||
 | 
			
		||||
                    newDoc.AppendChild(rootN);
 | 
			
		||||
 | 
			
		||||
                    XmlNode stateN = newDoc.ImportNode(n, true);
 | 
			
		||||
                    rootN.AppendChild(stateN);
 | 
			
		||||
 | 
			
		||||
                    // This created document has only the minimun data
 | 
			
		||||
                    // necessary for XEngine to parse it successfully
 | 
			
		||||
 | 
			
		||||
                    m_part.ParentGroup.m_savedScriptState[oldID] = newDoc.OuterXml;
 | 
			
		||||
                }
 | 
			
		||||
                foreach (IScriptModule e in engines)
 | 
			
		||||
                {
 | 
			
		||||
                    if (e != null)
 | 
			
		||||
                    {
 | 
			
		||||
                        if (e.SetXMLState(newID, m_part.ParentGroup.m_savedScriptState[oldID]))
 | 
			
		||||
                            break;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1266,6 +1266,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            XmlAttribute assetID = doc.CreateAttribute("", "Asset", "");
 | 
			
		||||
            assetID.Value = instance.AssetID.ToString();
 | 
			
		||||
            stateData.Attributes.Append(assetID);
 | 
			
		||||
            XmlAttribute engineName = doc.CreateAttribute("", "Engine", "");
 | 
			
		||||
            engineName.Value = ScriptEngineName;
 | 
			
		||||
            stateData.Attributes.Append(engineName);
 | 
			
		||||
            doc.AppendChild(stateData);
 | 
			
		||||
 | 
			
		||||
            // Add <ScriptState>...</ScriptState>
 | 
			
		||||
| 
						 | 
				
			
			@ -1365,10 +1368,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void SetXMLState(UUID itemID, string xml)
 | 
			
		||||
        public bool SetXMLState(UUID itemID, string xml)
 | 
			
		||||
        {
 | 
			
		||||
            if (xml == String.Empty)
 | 
			
		||||
                return;
 | 
			
		||||
                return false;
 | 
			
		||||
 | 
			
		||||
            XmlDocument doc = new XmlDocument();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1379,24 +1382,28 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            catch (Exception)
 | 
			
		||||
            {
 | 
			
		||||
                m_log.Error("[XEngine]: Exception decoding XML data from region transfer");
 | 
			
		||||
                return;
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            XmlNodeList rootL = doc.GetElementsByTagName("State");
 | 
			
		||||
            if (rootL.Count < 1)
 | 
			
		||||
                return;
 | 
			
		||||
                return false;
 | 
			
		||||
 | 
			
		||||
            XmlElement rootE = (XmlElement)rootL[0];
 | 
			
		||||
 | 
			
		||||
            if (rootE.GetAttribute("UUID") != itemID.ToString())
 | 
			
		||||
                return;
 | 
			
		||||
            if (rootE.GetAttribute("Engine") != ScriptEngineName)
 | 
			
		||||
                return false;
 | 
			
		||||
 | 
			
		||||
//            string assetID = rootE.GetAttribute("Asset");
 | 
			
		||||
//          On rez from inventory, that ID will have changed. It was only
 | 
			
		||||
//          advisory anyway. So we don't check it anymore.
 | 
			
		||||
//
 | 
			
		||||
//            if (rootE.GetAttribute("UUID") != itemID.ToString())
 | 
			
		||||
//                return;
 | 
			
		||||
 | 
			
		||||
            XmlNodeList stateL = rootE.GetElementsByTagName("ScriptState");
 | 
			
		||||
 | 
			
		||||
            if (stateL.Count != 1)
 | 
			
		||||
                return;
 | 
			
		||||
                return false;
 | 
			
		||||
 | 
			
		||||
            XmlElement stateE = (XmlElement)stateL[0];
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1405,7 +1412,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                XmlNodeList assemL = rootE.GetElementsByTagName("Assembly");
 | 
			
		||||
 | 
			
		||||
                if (assemL.Count != 1)
 | 
			
		||||
                    return;
 | 
			
		||||
                    return false;
 | 
			
		||||
 | 
			
		||||
                XmlElement assemE = (XmlElement)assemL[0];
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1445,19 +1452,23 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            sfs.Close();
 | 
			
		||||
 | 
			
		||||
            XmlNodeList mapL = rootE.GetElementsByTagName("LineMap");
 | 
			
		||||
            
 | 
			
		||||
            XmlElement mapE = (XmlElement)mapL[0];
 | 
			
		||||
            if (mapL.Count > 0)
 | 
			
		||||
            {
 | 
			
		||||
                XmlElement mapE = (XmlElement)mapL[0];
 | 
			
		||||
 | 
			
		||||
            string mappath = Path.Combine("ScriptEngines", World.RegionInfo.RegionID.ToString());
 | 
			
		||||
            mappath = Path.Combine(mappath, mapE.GetAttribute("Filename"));
 | 
			
		||||
                string mappath = Path.Combine("ScriptEngines", World.RegionInfo.RegionID.ToString());
 | 
			
		||||
                mappath = Path.Combine(mappath, mapE.GetAttribute("Filename"));
 | 
			
		||||
 | 
			
		||||
            FileStream mfs = File.Create(mappath);
 | 
			
		||||
            StreamWriter msw = new StreamWriter(mfs);
 | 
			
		||||
                FileStream mfs = File.Create(mappath);
 | 
			
		||||
                StreamWriter msw = new StreamWriter(mfs);
 | 
			
		||||
 | 
			
		||||
            msw.Write(mapE.InnerText);
 | 
			
		||||
                msw.Write(mapE.InnerText);
 | 
			
		||||
 | 
			
		||||
            msw.Close();
 | 
			
		||||
            mfs.Close();
 | 
			
		||||
                msw.Close();
 | 
			
		||||
                mfs.Close();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue