/// <summary> /// Creates a response instance from the XML for a single response /// </summary> /// <param name="responseElement">The response element.</param> /// <returns>the response instance</returns> public IResponse ResponseXElementToIResponse(XElement responseElement) { PServerFactory factory = new PServerFactory(); string className = responseElement.Element("ClassName").Value; IResponse response = factory.CreateResponse(className); IList<string> lines = new List<string>(); XElement linesElement = responseElement.Descendants("Lines").First(); foreach (XElement lineElement in linesElement.Elements()) { lines.Add(lineElement.Value); } if (response is IMessageResponse) response.Lines = lines; else response.Initialize(lines); response.Process(); if (response is IFileResponse) { IFileResponse fileResponse = (IFileResponse) response; XElement fileElement = responseElement.Descendants("File").First(); long len = Convert.ToInt64(fileElement.Element("Length").Value); string byteString = fileElement.Element("Contents").Value; byte[] buffer = new byte[len]; string[] bytes = byteString.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < bytes.Length; i++) { buffer[i] = Convert.ToByte(bytes[i]); } fileResponse.Length = len; fileResponse.Contents = buffer; } return response; }
/// <summary> /// Converts a single request represented by XML to a request instance /// </summary> /// <param name="requestElement">The request element.</param> /// <returns>the request instance</returns> public IRequest RequestXElementToIRequest(XElement requestElement) { string className = requestElement.Element("ClassName").Value; IEnumerable<XElement> linesElements = requestElement.Element("Lines").Elements(); string[] lines = linesElements.Select(le => le.Value).ToArray(); PServerFactory factory = new PServerFactory(); IRequest request = factory.CreateRequest(className, lines); return request; }