Added logging + array based processing.
This commit is contained in:
@@ -5,14 +5,18 @@ using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using SimpleHttp;
|
||||
using System.Xml.Linq;
|
||||
using Newtonsoft;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace BodyshopPartner.Utils
|
||||
{
|
||||
public static class HTTPServer
|
||||
{
|
||||
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
|
||||
|
||||
public static void InitHttpServer()
|
||||
public delegate void HttpLogger(string s);
|
||||
private static HttpLogger hlog;
|
||||
public static void InitHttpServer(HttpLogger HttpLogger)
|
||||
{
|
||||
Route.Add("/qb/receivables", (req, res, props) =>
|
||||
{
|
||||
@@ -26,7 +30,8 @@ namespace BodyshopPartner.Utils
|
||||
, "POST");
|
||||
|
||||
logger.Trace("Starting HTTP server...");
|
||||
|
||||
hlog = HttpLogger;
|
||||
hlog("Starting HTTP server...");
|
||||
//TODO As a part of the installer, add netsh http add urlacl url=http://+:1337/ user="Everyone
|
||||
HttpServer.ListenAsync(1337, System.Threading.CancellationToken.None, Route.OnHttpRequestAsync).Wait();
|
||||
}
|
||||
@@ -34,28 +39,44 @@ namespace BodyshopPartner.Utils
|
||||
private static void HandleQbReceivables(System.Net.HttpListenerRequest req, System.Net.HttpListenerResponse res)
|
||||
{
|
||||
logger.Debug("/qb/receivables - POST");
|
||||
//Input will be an array of XMLs.
|
||||
|
||||
string requestXMLstring = ParseBodyToString(req);
|
||||
XDocument requestXMLdoc = ParseStringToXml(requestXMLstring);
|
||||
string[] requestXMLstrings = ParseBodyToArray(req);
|
||||
hlog("Received QuickBooks Receivable request.");
|
||||
|
||||
string CustomerId = QuickBooksInterop.CreateCustomerIfNotExist(requestXMLdoc);
|
||||
|
||||
|
||||
string InvoiceAddResponse = QuickBooksInterop.ProcessQBXmlRequest(requestXMLstring);
|
||||
|
||||
|
||||
string[] status = new string[3];
|
||||
if (InvoiceAddResponse != null) status = QuickBooksInterop.parseInvoiceAddRs(InvoiceAddResponse);
|
||||
|
||||
if (InvoiceAddResponse != null && status[0] == "0")
|
||||
// string requestXMLstring = ParseBodyToString(req);
|
||||
foreach (var requestXMLstring in requestXMLstrings)
|
||||
{
|
||||
logger.Debug("Invoice added successfully.");
|
||||
XDocument requestXMLdoc = ParseStringToXml(requestXMLstring);
|
||||
XDocument response = XDocument.Parse(QuickBooksInterop.ProcessQBXmlRequest(requestXMLstring));
|
||||
Models.QbXmlResponse ResponseStatus = QuickBooksInterop.ParseResponseXml(response);
|
||||
|
||||
|
||||
logger.Info(response.ToString());
|
||||
logger.Info(ResponseStatus.ToString());
|
||||
hlog(ResponseStatus.ToString());
|
||||
//string[] status = new string[3];
|
||||
//if (InvoiceAddResponse != null) status = QuickBooksInterop.parseInvoiceAddRs(InvoiceAddResponse);
|
||||
//if (InvoiceAddResponse != null && status[0] == "0")
|
||||
//{ logger.Debug("Invoice added successfully."); res.StatusCode = 200; }
|
||||
//else
|
||||
//{ logger.Error("Error adding Invoice.\nStatus Code: {0} \nSeverity: {1} \nMessage {2}", status[0], status[1], status[2]); res.StatusCode = 400; }
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.Error("Error adding Invoice.\nStatus Code: {0} \nSeverity: {1} \nMessage {2}", status[0], status[1], status[2]);
|
||||
}
|
||||
res.WithCORS().AsText("Hello.");
|
||||
hlog("Completed QuickBooks Receivable request.");
|
||||
res.WithCORS().Close();
|
||||
}
|
||||
|
||||
public static string[] ParseBodyToArray(System.Net.HttpListenerRequest req)
|
||||
{
|
||||
System.IO.Stream body = req.InputStream;
|
||||
System.Text.Encoding encoding = req.ContentEncoding;
|
||||
System.IO.StreamReader reader = new System.IO.StreamReader(body, encoding);
|
||||
string s = reader.ReadToEnd();
|
||||
body.Close();
|
||||
reader.Close();
|
||||
|
||||
return JArray.Parse(s).Select(jv => jv.ToString()).ToArray();
|
||||
}
|
||||
|
||||
public static string ParseBodyToString(System.Net.HttpListenerRequest req)
|
||||
@@ -63,17 +84,7 @@ namespace BodyshopPartner.Utils
|
||||
System.IO.Stream body = req.InputStream;
|
||||
System.Text.Encoding encoding = req.ContentEncoding;
|
||||
System.IO.StreamReader reader = new System.IO.StreamReader(body, encoding);
|
||||
//if (req.ContentType != null)
|
||||
//{
|
||||
// Console.WriteLine("Client data content type {0}", req.ContentType);
|
||||
//}
|
||||
//Console.WriteLine("Client data content length {0}", req.ContentLength64);
|
||||
|
||||
//Console.WriteLine("Start of client data:");
|
||||
// Convert the data to a string and display it on the console.
|
||||
string s = reader.ReadToEnd();
|
||||
//Console.WriteLine(s);
|
||||
//Console.WriteLine("End of client data:");
|
||||
body.Close();
|
||||
return s;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user