Beispiel #1
0
        public static void HeadParseSerializeTest(string[] args)
        {
            RequestHeadParser      rParser = new RequestHeadParser();
            ResponseHeadParser     RParser = new ResponseHeadParser();
            RequestHeadSerializer  rSerial = new RequestHeadSerializer();
            ResponseHeadSerializer RSerial = new ResponseHeadSerializer();

            RequestHead rHead = new RequestHead("HTTP/1.1", "GET", "/");

            rHead.Headers["test1"] = "123";
            rHead.Headers["test2"] = "456";

            ResponseHead RHead = new ResponseHead("HTTP/1.1", 200, "OK");

            RHead.Headers["test1"] = "123";
            RHead.Headers["test2"] = "456";

            rSerial.Pipe(rParser);
            RSerial.Pipe(RParser);

            rParser.OnCollect += (head) => Console.WriteLine("request parser:\n{0}", head.Stringify());
            RParser.OnCollect += (head) => Console.WriteLine("response parser:\n{0}", head.Stringify());
            rSerial.OnFail    += () => Console.WriteLine("request serializer failed");
            RSerial.OnFail    += () => Console.WriteLine("response serializer failed");

            rSerial.Write(rHead);
            RSerial.Write(RHead);

            Console.ReadKey();
        }
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="errCode"></param>
        /// <param name="msg"></param>
        public ResponseContextException(ErrCode errCode, string msg = "")
        {
            ResponseHead responseHead;

            if (string.IsNullOrEmpty(msg))
            {
                responseHead = new ResponseHead
                {
                    Ret  = -1,
                    Code = errCode
                };
            }
            else
            {
                responseHead = new ResponseHead
                {
                    Ret  = -1,
                    Code = errCode,
                    Msg  = msg
                };
            }
            ResponseContext = new ResponseContext()
            {
                Head = responseHead
            };
        }
Beispiel #3
0
        public static string Stringify(this ResponseHead source)
        {
            string stringified = source.Version + WS + source.StatusCode + WS + source.StatusDescription + CRLF;

            for (int i = 0; i < source.Headers.Length; i++)
            {
                stringified += source.Headers[i].Key.ToLower() + COLON + WS + source.Headers[i].Value + CRLF;
            }
            stringified += CRLF;
            return(stringified);
        }
Beispiel #4
0
        /// <summary>
        /// 命令字符串转换实体类
        /// </summary>
        /// <param name="command"></param>
        public override void CommandStringToClass(string command)
        {
            // 获取返回的头部信息
            ResponseHead = ResponseHead.CommandStringToEntity(command);

            // 明细数据
            XmlDocument xmlDocument = new XmlDocument();

            xmlDocument.LoadXml(command);

            XmlNodeList lstNodes = xmlDocument.SelectNodes("ResponseEntity");
            XmlNode     xmlNode  = null;

            foreach (XmlNode node in lstNodes)
            {
                xmlNode = node.SelectSingleNode("Results");
                if (xmlNode == null || !xmlNode.HasChildNodes)
                {
                    return;
                }

                LstResult = new List <T>();

                PropertyInfo proInfoT = null;
                foreach (XmlNode resultsNode in xmlNode.ChildNodes)
                {
                    if (resultsNode.Name == "TotalCount")
                    {
                        int count = 0;
                        if (int.TryParse(resultsNode.InnerText, out count))
                        {
                            TotalCount = count;
                        }
                    }
                    else if (resultsNode.Name == "Result")
                    {
                        T t = new T();
                        foreach (XmlNode resultNode in resultsNode.ChildNodes)
                        {
                            proInfoT = t.GetType().GetProperty(resultNode.Name);
                            if (proInfoT != null)
                            {
                                proInfoT.SetValue(t,
                                                  string.IsNullOrEmpty(resultNode.InnerText)
                                    ? null : Convert.ChangeType(resultNode.InnerText, proInfoT.PropertyType), null);
                            }
                        }

                        LstResult.Add(t);
                    }
                }
            }
        }
Beispiel #5
0
        public void binayWrite(byte[] buffer)
        {
            string statusline = "HTTP/1.1 200 OK\r\n";   //状态行

            byte[]        statusline_to_bytes = Encoding.UTF8.GetBytes(statusline);
            StringBuilder tmp = new StringBuilder();

            ResponseHead.Add("Content-Type", "text/html;charset=UTF-8");
            ResponseHead.Add("Content-Length", buffer.Length.ToString());
            foreach (var key in ResponseHead)
            {
                tmp.AppendFormat("{0}:{1}\r\n", key.Key, key.Value);
            }
            response.Send(statusline_to_bytes);                   //发送状态行
            response.Send(tmp.ToString().getBytes());             //发送应答头
            response.Send(new byte[] { (byte)'\r', (byte)'\n' }); //发送空行
            response.Send(buffer);                                //发送正文(html)
            response.Close();
        }
Beispiel #6
0
        /// <summary>
        /// 命令字符串转换实体类
        /// </summary>
        /// <param name="command"></param>
        public override void CommandStringToClass(string command)
        {
            // 获取返回的头部信息
            ResponseHead = ResponseHead.CommandStringToEntity(command);

            // 明细数据
            XmlDocument xmlDocument = new XmlDocument();

            xmlDocument.LoadXml(command);

            XmlNodeList lstNodes = xmlDocument.SelectNodes("ResponseEntity");
            XmlNode     xmlNode  = null;

            foreach (XmlNode node in lstNodes)
            {
                xmlNode = node.SelectSingleNode("Result");
                if (xmlNode == null || !xmlNode.HasChildNodes)
                {
                    return;
                }

                Result = ConvertUtility.CodingToByte(xmlNode.InnerText, 1);
            }
        }