Beispiel #1
0
        public static GbxParam Instantiate(string eventName, object[] oParams)
        {
            var gbx = new GbxParam();

            gbx.Parameters = oParams;
            gbx.EventName  = eventName;

            StringBuilder xml = new StringBuilder("<?xml version=\"1.0\" ?><methodCall><methodName>" + eventName + "</methodName><params>");

            foreach (var obj in gbx.Parameters)
            {
                if (obj == null)
                {
                    continue;
                }

                xml.Append("<param>" + ParseObject(obj) + "</param>\n");
            }
            xml.Append("</params></methodCall>");
            gbx.Result = xml.ToString();
            return(gbx);
        }
Beispiel #2
0
        internal static GbxParam ParseResponse(int handle, byte[] data)
        {
            GbxParam gbx = new GbxParam();

            gbx.Type        = MessageType.None;
            gbx.Handle      = handle;
            gbx.Result      = Encoding.UTF8.GetString(data);
            gbx.ErrorCode   = 0;
            gbx.ErrorString = "";

            var xmlDoc = new XmlDocument();

            xmlDoc.LoadXml(gbx.Result);
            XmlElement methodParams = null;

            // message is of type request ...
            if (xmlDoc["methodCall"] != null)
            {
                // check message type ...
                if (handle > 0)
                {
                    gbx.Type = MessageType.Callback;
                }
                else
                {
                    gbx.Type = MessageType.Request;
                }

                // try to get the method name ...
                if (xmlDoc["methodCall"]["methodName"] != null)
                {
                    gbx.EventName = xmlDoc["methodCall"]["methodName"].InnerText;
                }
                else
                {
                    gbx.isError = true;
                }

                // try to get the mehtod's parameters ...
                if (xmlDoc["methodCall"]["params"] != null)
                {
                    gbx.isError  = false;
                    methodParams = xmlDoc["methodCall"]["params"];
                }
                else
                {
                    gbx.isError = true;
                }
            }
            else if (xmlDoc["methodResponse"] != null) // message is of type response ...
            {
                // check message type ...
                gbx.Type = MessageType.Response;

                if (xmlDoc["methodResponse"]["fault"] != null)
                {
                    var errStruct = (Dictionary <string, object>)ParseXml(xmlDoc["methodResponse"]["fault"]);
                    gbx.ErrorCode   = (int)errStruct["faultCode"];
                    gbx.ErrorString = (string)errStruct["faultString"];
                    gbx.isError     = true;
                }
                else if (xmlDoc["methodResponse"]["params"] != null)
                {
                    gbx.isError  = false;
                    methodParams = xmlDoc["methodResponse"]["params"];
                }
                else
                {
                    gbx.isError = true;
                }
            }
            else
            {
                gbx.isError = true;
            }

            // parse each parameter of the message, if there are any ...
            List <object> parameters = new List <object>();

            if (methodParams != null)
            {
                foreach (XmlElement param in methodParams)
                {
                    parameters.Add(GbxParam.ParseXml(param));
                }
            }
            gbx.Parameters = parameters.ToArray();

            return(gbx);
        }