예제 #1
0
        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));
        }