private void ApiWorker_DoWork(object sender, DoWorkEventArgs e) { while (true) { try { PrintToLog logging = printLog; // Create a Http server and start listening for incoming connections listener = new HttpListener(); listener.Prefixes.Add(url); listener.Start(); if (apiWorker.CancellationPending) { listener.Stop(); break; } logging.Invoke("Listening for connections on " + url.ToString()); Task listenTask = HandleIncomingConnections(); listenTask.GetAwaiter().GetResult(); listener.Close(); } catch (Exception Ee) { break; } } }
//Método de chamada com sincronização de threads para imprimir no log private void printToLog(string p_Text) { if (m_TbxLog.InvokeRequired) { PrintToLog v_Callback = new PrintToLog(printToLog); this.Invoke(v_Callback, new object[] { p_Text }); } else { m_TbxLog.Text += DateTime.Now.ToString("HH:mm:ss") + " - " + p_Text + Environment.NewLine; m_TbxLog.SelectionStart = m_TbxLog.Text.Length; m_TbxLog.ScrollToCaret(); } }
private void printLog(String log) { if (listBox2.InvokeRequired) { var d = new PrintToLog(printLog); listBox2.Invoke(d, new object[] { log }); } else { if (listBox2.Items.Count > 10) { listBox2.Items.Clear(); } listBox2.Items.Add(log); } }
private async Task HandleIncomingConnections() { bool runServer = true; // While a user hasn't visited the `shutdown` url, keep on handling requests while (!apiWorker.CancellationPending) { // Will wait here until we hear from a connection HttpListenerContext ctx = await listener.GetContextAsync(); // Peel out the requests and response objects HttpListenerRequest req = ctx.Request; HttpListenerResponse resp = ctx.Response; //CORS - KIRIM DATA REPLY LANGSUNG KE WMS if (req.HttpMethod == "OPTIONS") { resp.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With"); resp.AddHeader("Access-Control-Allow-Methods", "GET, POST"); resp.AddHeader("Access-Control-Max-Age", "1728000"); } resp.AppendHeader("Access-Control-Allow-Origin", "*"); // Make sure we don't increment the page views counter if `favicon.ico` is requested if (req.Url.AbsolutePath != "/favicon.ico") { Console.WriteLine(req.Url.ToString()); Console.WriteLine(req.HttpMethod); Console.WriteLine(req.UserHostName); Console.WriteLine("Request to route " + req.QueryString["route"]); Console.WriteLine(); int route = Convert.ToInt32(req.QueryString["route"]); dataRoute = route; } PrintToLog logging = printLog; logging.Invoke("RX<-" + req.RawUrl); string disableSubmit = !runServer ? "disabled" : ""; byte[] data; if (String.IsNullOrEmpty(req.QueryString["route"])) { data = Encoding.UTF8.GetBytes("Infiniti 4.0 AGV API"); } else { try { int route = Convert.ToInt32(req.QueryString["route"]); dataRoute = route; ////Send Route //sendByte((byte)route); sendByte(route); data = Encoding.UTF8.GetBytes("Accepted, route=" + route.ToString()); } catch { data = Encoding.UTF8.GetBytes("Wrong data type"); } } resp.ContentType = "text/html"; resp.ContentEncoding = Encoding.UTF8; resp.ContentLength64 = data.LongLength; logging.Invoke("TX->" + Encoding.UTF8.GetString(data)); await resp.OutputStream.WriteAsync(data, 0, data.Length); resp.Close(); } }