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 }; }
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); }
/// <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); } } } }
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(); }
/// <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); } }