static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); edw = new ExternalDisplayWindow(); edw.Show(); Indigo.Protocols.HTTP.HTTPProtocol protocol = new Indigo.Protocols.HTTP.HTTPProtocol(); Indigo.Services.FileSystem.FileSystemService service = new Indigo.Services.FileSystem.FileSystemService(); httpsvr = new Indigo.Server(service, protocol); httpsvr.Port = 27248; service.RequestReceived += new Indigo.Services.FileSystem.FileSystemRequestReceivedEventHandler(service_RequestReceived); httpsvr.Start(); nid.Icon = Properties.Resources.mainicon; nid.Text = "Sydne Monitor Service"; nid.MouseDoubleClick += new MouseEventHandler(nid_MouseDoubleClick); nid.ContextMenu = new ContextMenu( new MenuItem[] { new MenuItem("Open Cash &Drawer", new EventHandler(mnuTrayOpenDrawer_Click)), new MenuItem("-"), new MenuItem("&Settings...", new EventHandler(mnuTraySettings_Click)), new MenuItem("-"), new MenuItem("&About Sydne Monitor Service", new EventHandler(mnuTrayAbout_Click)), new MenuItem("E&xit", new EventHandler(mnuTrayExit_Click)) }); nid.ContextMenu.MenuItems[0].DefaultItem = true; nid.Visible = true; Application.Run(); nid.Visible = false; }
static void service_RequestReceived(object sender, Indigo.Services.FileSystem.FileSystemRequestReceivedEventArgs e) { Indigo.Protocols.HTTP.HTTPProtocol http = (e.Client.Protocol as Indigo.Protocols.HTTP.HTTPProtocol); string pathName = e.ObjectName; string queryString = String.Empty; if (e.ObjectName.Contains("?")) { pathName = e.ObjectName.Substring(0, e.ObjectName.IndexOf("?")); queryString = e.ObjectName.Substring(e.ObjectName.IndexOf("?") + 1); } Dictionary <string, string> queryStringValues = new Dictionary <string, string>(); string[] queryStringSplit = queryString.Split(new char[] { '&' }); foreach (string queryStringParam in queryStringSplit) { string[] queryStringParamNameAndValue = queryStringParam.Split(new char[] { '=' }, 2); string queryStringParamName = queryStringParamNameAndValue[0]; string queryStringParamValue = String.Empty; if (queryStringParamNameAndValue.Length > 1) { queryStringParamValue = queryStringParamNameAndValue[1]; } queryStringValues[queryStringParamName] = queryStringParamValue; } if (queryStringValues.ContainsKey("jsonp")) { http.Response.TextWriter.Write(queryStringValues["jsonp"] + "("); } switch (pathName) { #region Sydne.js case "/Sydne.js": { http.Response.Headers.Add(Indigo.Protocols.HTTP.HTTPResponseHeaderType.ContentType, "text/plain"); http.Response.TextWriter.WriteLine("if (typeof XMLHttpRequest === \"undefined\") { XMLHttpRequest = function () { try { return new ActiveXObject(\"Msxml2.XMLHTTP.6.0\"); } catch (e) {} try { return new ActiveXObject(\"Msxml2.XMLHTTP.3.0\"); } catch (e) {} try { return new ActiveXObject(\"Microsoft.XMLHTTP\"); } catch (e) {} throw new Error(\"This browser does not support XMLHttpRequest.\"); }; }"); http.Response.TextWriter.Write("var Sydne = { "); http.Response.TextWriter.Write("\"Available\": true,"); http.Response.TextWriter.Write("\"CashDrawer\": { "); http.Response.TextWriter.Write("\"Open\": function() { "); http.Response.TextWriter.Write("try { "); http.Response.TextWriter.Write("var xhr = new XMLHttpRequest(); xhr.open('GET', 'http://localhost:27248/CashDrawer/Open', false); xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xhr.send(null);"); http.Response.TextWriter.Write("} catch (ex) { }"); http.Response.TextWriter.Write(" }"); http.Response.TextWriter.Write(" }, "); http.Response.TextWriter.Write("\"ExternalDisplay\": { "); http.Response.TextWriter.Write("\"LogoText\": function(text) { "); http.Response.TextWriter.Write("try { "); http.Response.TextWriter.Write("var xhr = new XMLHttpRequest(); xhr.open('GET', 'http://localhost:27248/ExternalDisplay/LogoText?text=' + JH.Utilities.UrlEncode(text), true); xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xhr.send(null);"); http.Response.TextWriter.Write("} catch (ex) { }"); http.Response.TextWriter.Write(" }, "); http.Response.TextWriter.Write("\"SaleDetail\": function(text) { "); http.Response.TextWriter.Write("try { "); http.Response.TextWriter.Write("var xhr = new XMLHttpRequest(); xhr.open('GET', 'http://localhost:27248/ExternalDisplay/SaleDetail?text=' + JH.Utilities.UrlEncode(text), true); xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xhr.send(null);"); http.Response.TextWriter.Write("} catch (ex) { }"); http.Response.TextWriter.Write(" }, "); http.Response.TextWriter.Write("\"SaleFinal\": function(subtotal, tax, tendered) { "); http.Response.TextWriter.Write("try { "); http.Response.TextWriter.Write("var xhr = new XMLHttpRequest(); xhr.open('GET', 'http://localhost:27248/ExternalDisplay/SaleFinal?subtotal=' + subtotal + '&tax=' + tax + '&tendered=' + tendered, true); xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xhr.send(null);"); http.Response.TextWriter.Write("} catch (ex) { alert(ex); }"); http.Response.TextWriter.Write(" } "); http.Response.TextWriter.Write(" } "); /* * http.Response.TextWriter.Write("\"Mifare\": { "); * http.Response.TextWriter.Write("\"Scan\": function() { "); * * http.Response.TextWriter.Write("var script = document.createElement(\"SCRIPT\");"); * http.Response.TextWriter.Write("script.setAttribute(\"type\", \"text/javascript\");"); * http.Response.TextWriter.Write("script.setAttribute(\"src\", \"http://localhost:27248/Mifare/Scan?jsonp=__AJAX2103_ProcessLogin\");"); * http.Response.TextWriter.Write("script.onload = function() { if (!loginSuccessful) tryLogin(); }; document.body.appendChild(script);"); * * http.Response.TextWriter.Write(" }"); * http.Response.TextWriter.Write(" }"); */ http.Response.TextWriter.Write(" };"); break; } #endregion #region Cash Drawer case "/CashDrawer/Open": { http.Response.Headers.Add(Indigo.Protocols.HTTP.HTTPResponseHeaderType.ContentType, "text/plain"); try { CashDrawerResult result = OpenCashDrawer(); switch (result) { case CashDrawerResult.Opened: { http.Response.TextWriter.Write("{ \"result\": \"success\", \"status\": \"Opened\" }"); break; } case CashDrawerResult.AlreadyOpened: { http.Response.TextWriter.Write("{ \"result\": \"success\", \"status\": \"AlreadyOpened\" }"); break; } case CashDrawerResult.Locked: { http.Response.TextWriter.Write("{ \"result\": \"success\", \"status\": \"Locked\" }"); break; } } } catch (Exception ex) { http.Response.TextWriter.Write("{ \"result\": \"failure\", \"errorType\": \"" + ex.GetType().FullName + "\", \"errorMessage\": \"" + ex.Message + "\" }"); } break; } /* * case "/CashDrawer/Close": * { * try * { * CloseCashDrawer(); * http.Response.TextWriter.Write("{ \"result\": \"success\", \"status\": \"closed\" }"); * } * catch (Exception ex) * { * http.Response.TextWriter.Write("{ \"result\": \"failure\", \"errorType\": \"" + ex.GetType().FullName + "\", \"errorMessage\": \"" + ex.Message + "\" }"); * } * break; * } */ #endregion #region RFID Reader case "/Mifare/Scan": { http.Response.Headers.Add(Indigo.Protocols.HTTP.HTTPResponseHeaderType.ContentType, "text/plain"); try { Mifare.Device device = new Mifare.Device(); DateTime time = DateTime.Now; int timeoutMilliseconds = 5000; byte[] data = null; while (!mvarResetMifareDevice) { try { device.Blink(8, 1); data = device.Read(Mifare.DataEncoding.S50S70); break; } catch (Mifare.CardNotPresentException ex) { } catch (Mifare.DeviceNotPresentException ex) { http.Response.TextWriter.Write("{ \"result\": \"failure\", \"message\": \"The card reader is not connected.\", \"remedy\": \"ConnectDevice\" }"); break; } catch (Exception ex) { http.Response.TextWriter.Write("{ \"result\": \"failure\", \"message\": \"" + ex.Message + "\" }"); break; } /* * TimeSpan ts = DateTime.Now.Subtract(time); * if (ts.TotalMilliseconds > timeoutMilliseconds) * { * http.Response.TextWriter.Write("{ \"result\": \"failure\", \"message\": \"No card present\" }"); * break; * } */ if (!e.Client.IsConnected) { break; } } mvarResetMifareDevice = false; if (data != null) { string w = System.Text.Encoding.ASCII.GetString(data); if (w.Contains("\0")) { w = w.Substring(0, w.IndexOf("\0")); } /* * if (!w.Contains(" ")) * { * http.Response.TextWriter.Write("{ \"result\": \"failure\", \"message\": \"Invalid credential card\" }"); * break; * } */ device.Chirp(5, 1); http.Response.TextWriter.Write("{ \"result\": \"success\", \"content\": \"" + JH.Utilities.JavaScriptEncode(w, "\"") + "\" }"); break; } } catch (Exception ex) { http.Response.TextWriter.Write("{ \"result\": \"failure\", \"errorType\": \"" + ex.GetType().FullName + "\", \"errorMessage\": \"" + ex.Message + "\" }"); } break; } case "/Mifare/Reset": { mvarResetMifareDevice = true; break; } /* * case "/CashDrawer/Close": * { * try * { * CloseCashDrawer(); * http.Response.TextWriter.Write("{ \"result\": \"success\", \"status\": \"closed\" }"); * } * catch (Exception ex) * { * http.Response.TextWriter.Write("{ \"result\": \"failure\", \"errorType\": \"" + ex.GetType().FullName + "\", \"errorMessage\": \"" + ex.Message + "\" }"); * } * break; * } */ #endregion #region External Display case "/ExternalDisplay/LogoText": { SetEDWMode(ExternalDisplayMode.LogoText); string text = (e.Client.Protocol as Indigo.Protocols.HTTP.HTTPProtocol).Request.QueryString["text"]; text = JH.Utilities.UrlDecode(text); SetEDWText(text); http.Response.TextWriter.Write("{ \"result\": \"success\" }"); break; } case "/ExternalDisplay/SaleDetail": { SetEDWMode(ExternalDisplayMode.SaleDetail); string text = (e.Client.Protocol as Indigo.Protocols.HTTP.HTTPProtocol).Request.QueryString["text"]; text = JH.Utilities.UrlDecode(text); SetEDWText(text); http.Response.TextWriter.Write("{ \"result\": \"success\" }"); break; } case "/ExternalDisplay/SaleFinal": { SetEDWMode(ExternalDisplayMode.SaleFinal); string sSubtotal = http.Request.QueryString["subtotal"]; double dSubtotal = 0.00; Double.TryParse(sSubtotal, out dSubtotal); string sTax = http.Request.QueryString["tax"]; double dTax = 0.00; Double.TryParse(sTax, out dTax); string sTendered = http.Request.QueryString["tendered"]; double dTendered = 0.00; Double.TryParse(sTendered, out dTendered); SetEDWFinal(dSubtotal, dTax, dTendered); http.Response.TextWriter.Write("{ \"result\": \"success\" }"); break; } #endregion #region Unknown Command default: { http.Response.TextWriter.Write("{ \"result\": \"failure\", \"errorMessage\": \"Unknown command\" }"); break; } #endregion } if (queryStringValues.ContainsKey("jsonp")) { http.Response.TextWriter.Write(");"); } http.Response.TextWriter.Flush(); e.PreventDefault = true; }