public static CloverDeviceConfiguration GetNetworkConfiguration() { PairingDeviceConfiguration.OnPairingCodeHandler pairingCodeHandler = new PairingDeviceConfiguration.OnPairingCodeHandler(OnPairingCode); PairingDeviceConfiguration.OnPairingSuccessHandler pairingsuccessHandler = new PairingDeviceConfiguration.OnPairingSuccessHandler(OnPairingSuccess); // ws vs wss must match Network Pay Display setting. wss requires Clover root CA var endpoint = "ws://192.168.0.6:12345/remote_pay"; // Network Pay Display must be installed and configured to allow // insecure connections for the above configuration // Create a WebSocketDeviceConfiguration with appropriate // remoteApplicationID (see above), POS name and POS serial number var websocketConfiguration = new WebSocketCloverDeviceConfiguration(endpoint, //endpoint "com.cloverconnector.windows.simple.sample:1.3.1", //remoteApplicationID false, //enableLogging 1, //pingSleepSeconds "Aisle 2", //posName "ABC123", //serialNumber null, //pairingAuthToken OnPairingCode, //pairingCodeHandler OnPairingSuccess, //pairingSuccessHandler OnPairingState); //pairingStateHandler return(websocketConfiguration); }
/// <summary> /// Connect to the specified Clover device /// </summary> public bool Connect(string connectionString) { CloverDeviceConfiguration config = null; Address = connectionString; if (connectionString.Trim().ToUpper() == "USB") { // USB connected Clover Devices are directly connected to the machine and so don't need any extra identification or Pairing information config = new USBCloverDeviceConfiguration(RemoteAppId, true); Address = "USB"; } else { // Network connections require a pairing information and send extra identification to the device config = new WebSocketCloverDeviceConfiguration(connectionString, RemoteAppId, true, 1, PosName, SerialNumber, LoadPairingAuthToken(connectionString, RemoteAppId, PosName), OnPairingCode, OnPairingSuccess, OnPairingState); } if (config != null) { cloverConnector = CloverConnectorFactory.createICloverConnector(config); listener = new SimpleCloverConnectorListener(cloverConnector); listener.DeviceConnected += Listener_DeviceConnected; listener.DeviceReady += Listener_DeviceReady; listener.DeviceDisconnected += Listener_DeviceDisconnected; listener.DeviceError += Listener_DeviceError; listener.SaleResponse += Listener_SaleResponse; cloverConnector.AddCloverConnectorListener(listener); cloverConnector.InitializeConnection(); } return(config != null); }
private void InitializeConnector(Dictionary <string, string> parameters) { string protocol; string port; bool testConfig = false; string lanConfig = null; string testConfigString; if (!parameters.TryGetValue("/P", out port)) { port = "8889";// default } string certPath = null; if (!parameters.TryGetValue("/C", out certPath)) { protocol = "ws";// default } else { protocol = "wss"; } if (!parameters.TryGetValue("/T", out testConfigString)) { testConfig = false; } else { testConfig = true; // } parameters.TryGetValue("/L", out lanConfig); server = new WebSocketServer(protocol + "://127.0.0.1:" + port); if (certPath != null) { server.Certificate = new System.Security.Cryptography.X509Certificates.X509Certificate2(certPath); } CloverDeviceConfiguration config = null; if (testConfig) { config = new TestCloverDeviceConfiguration(); } else if (lanConfig != null) { int loc = lanConfig.IndexOf(':'); if (loc == -1) { throw new InvalidDataException("invalid lan host. arguments must be '/L <hostname>:<port>'"); } try { string lanHostname = lanConfig.Substring(0, loc); string lanPortStr = lanConfig.Substring(loc + 1); int lanPort = int.Parse(lanPortStr); if (lanPort < 0 || lanPort > 65535) { throw new InvalidDataException("Invalid port. must be between 1 and 65535"); } config = new WebSocketCloverDeviceConfiguration(lanHostname, lanPort, getPOSNameAndVersion(), Debug, Timer); } catch (FormatException fe) { throw new InvalidDataException("invalid port: " + lanConfig.Substring(loc + 1)); } } else { config = new USBCloverDeviceConfiguration(null, getPOSNameAndVersion(), Debug, Timer); } cloverConnector = new CloverConnector(config); cloverConnector.InitializeConnection(); cloverConnector.AddCloverConnectorListener(connectorListener); }
/// <summary> /// Create a WebSockect configured connection CloverConnector to a Clover Device running Secure Network Pay Display (SNPD) /// Convenience wrapper around creating a WebSocketCloverDeviceConfiguration object and calling CloverConnectorFactory.createICloverConnector /// </summary> /// <param name="endpoint">Clover Device Secure Network Pay Display (SNPD) network address, usually similar to "https://192.168.0.1:1234/remote_pay"</param> /// <param name="remoteApplicationId">Application ID for server reporting</param> /// <param name="posName">Point of Sale name for server reporting</param> /// <param name="serialNumber">Station ID / serial number for server reporting</param> /// <param name="pairingAuthToken">Previous paired auth token to allow quick reconnection without initiating antoerh pairing. Blank value, invalid or expired token will initiate a new pairing</param> /// <param name="pairingCodeHandler">Delegate method called with temporary pairing code to enter on device, like `6341` - display to user to enter on Clover Device to complete pairing</param> /// <param name="pairingSuccessHandler">Delegate method called with reconnection auth token when pairing has succeeded</param> /// <param name="pairingStateHandler">Delegate method called during pairing flow transitions</param> /// <param name="enableLogging">Turn logging on or off</param> /// <returns></returns> public static ICloverConnector CreateWebSocketConnector(string endpoint, string remoteApplicationId, string posName, string serialNumber, string pairingAuthToken, PairingDeviceConfiguration.OnPairingCodeHandler pairingCodeHandler, PairingDeviceConfiguration.OnPairingSuccessHandler pairingSuccessHandler, PairingDeviceConfiguration.OnPairingStateHandler pairingStateHandler, bool enableLogging = false) { WebSocketCloverDeviceConfiguration config = new WebSocketCloverDeviceConfiguration(endpoint, remoteApplicationId, enableLogging, 1, posName, serialNumber, pairingAuthToken, pairingCodeHandler, pairingSuccessHandler, pairingStateHandler); return(createICloverConnector(config)); }