예제 #1
0
        /// <summary>
        /// parse the response
        /// </summary>
        /// <returns></returns>
        public static Parameters ParseParams(XmppXElement el)
        {
            var al = new Parameters();

            // If an error occurred, the server will return fault
            var fault = el.Element <Fault>();

            if (fault != null)
            {
                var structParameter = ParseStruct(fault.Element <Struct>(true));
                al.Add(new XmlRpcException((Int16)structParameter["faultCode"], (string)structParameter["faultString"]));
            }
            else
            {
                XmppXElement elParams = el.Element <Params>();
                var          nl       = elParams.Elements <Param>();

                foreach (var p in nl)
                {
                    var value = p.Element <Value>();
                    if (value != null)
                    {
                        al.Add(ParseValue(value));
                    }
                }
            }
            return(al);
        }
        private string GetStanzaAsString(XmppXElement xel, string type, int number)
        {
            var stanza = xel
                         .Elements("stanza")
                         .FirstOrDefault(s => s.Attribute("type").Value == type && s.Attribute("id").Value == number.ToString());

            return(stanza?
                   .DescendantNodes()
                   .Where(d => d.NodeType == System.Xml.XmlNodeType.CDATA)
                   .Cast <XCData>()
                   .FirstOrDefault()
                   .Value
                   .Trim(' ', '\r', '\n'));
        }
예제 #3
0
        /// <summary>
        /// parse a response struct
        /// </summary>
        /// <param name="el">The el.</param>
        /// <returns></returns>
        private static StructParameter ParseStruct(XmppXElement el)
        {
            #region Xml sample
            //<struct>
            //   <member>
            //      <name>x</name>
            //      <value><i4>20</i4></value>
            //   </member>
            //   <member>
            //      <name>y</name>
            //      <value><string>cow</string></value>
            //   </member>
            //   <member>
            //      <name>z</name>
            //      <value><double>3,14</double></value>
            //   </member>
            //</struct>
            #endregion

            var structParameter = new StructParameter();

            var members = el.Elements <Member>();

            foreach (var member in members)
            {
                var xElementName = member.Element <Name>();
                if (xElementName == null)
                {
                    continue;
                }

                var name = xElementName.Value;

                // parse this member value
                var xElementValue = member.Element <Value>();
                if (xElementValue != null)
                {
                    structParameter.Add(name, ParseValue(xElementValue));
                }
            }
            return(structParameter);
        }