コード例 #1
0
        public void SetState(string objXMLData, IScene ins)
        {
            if (!(ins is Scene))
            {
                return;
            }

            Scene s = (Scene)ins;

            if (objXMLData == String.Empty)
            {
                return;
            }

            IScriptModule scriptModule = null;

            foreach (IScriptModule sm in s.RequestModuleInterfaces <IScriptModule>())
            {
                if (sm.ScriptEngineName == s.DefaultScriptEngine)
                {
                    scriptModule = sm;
                }
                else if (scriptModule == null)
                {
                    scriptModule = sm;
                }
            }

            if (scriptModule == null)
            {
                return;
            }

            XmlDocument doc = new XmlDocument();

            try
            {
                doc.LoadXml(objXMLData);
            }
            catch (Exception) // (System.Xml.XmlException)
            {
                // We will get here if the XML is invalid or in unit
                // tests. Really should determine which it is and either
                // fail silently or log it
                // Fail silently, for now.
                // TODO: Fix this
                //
                return;
            }

            XmlNodeList rootL = doc.GetElementsByTagName("ScriptData");

            if (rootL.Count != 1)
            {
                return;
            }

            XmlElement rootE = (XmlElement)rootL[0];

            XmlNodeList dataL = rootE.GetElementsByTagName("ScriptStates");

            if (dataL.Count != 1)
            {
                return;
            }

            XmlElement dataE = (XmlElement)dataL[0];

            foreach (XmlNode n in dataE.ChildNodes)
            {
                XmlElement stateE = (XmlElement)n;
                UUID       itemID = new UUID(stateE.GetAttribute("UUID"));

                scriptModule.SetXMLState(itemID, n.OuterXml);
            }
        }