/// <summary>
        /// Contains merchant information about the device
        /// </summary>
        /// <param name="drm"></param>
        public MerchantInfo(DiscoveryResponseMessage drm)
        {
            supportsManualRefunds       = drm.supportsManualRefund;
            supportsTipAdjust           = drm.supportsTipAdjust;
            supportsVaultCards          = drm.supportsVaultCard;
            supportsPreAuths            = drm.supportsPreAuth;
            supportsRemoteConfirmation  = drm.supportsRemoteConfirmation;
            supportsNakedCredit         = drm.supportsNakedCredit;
            supportsMultiPayToken       = drm.supportsMultiPayToken;
            supportsAcknowledgement     = drm.supportsAcknowledgement;
            supportsVoidPaymentResponse = drm.supportsVoidPaymentResponse;
            supportsPreAuth             = drm.supportsPreAuth;
            supportsAuth      = drm.supportsAuth;
            supportsVaultCard = drm.supportsVaultCard;

            merchantID   = drm.merchantId;
            merchantMId  = drm.merchantMId;
            merchantName = drm.merchantName;

            Device = new DeviceInfo
            {
                Name         = drm.name,
                Serial       = drm.serial,
                Model        = drm.model,
                SupportsAcks = drm.supportsAcknowledgement
            };
        }
Ejemplo n.º 2
0
        async void SendDiscoveryResponseMessage()
        {
            try
            {
                // Get an output stream to all IPs on the given port
                using (var stream = await socket.GetOutputStreamAsync(new HostName("255.255.255.255"), udpPort.ToString()))
                {
                    // Get a data writing stream
                    using (var writer = new DataWriter(stream))
                    {
                        // Create a discovery response message
                        var discoveryResponse = new DiscoveryResponseMessage(name, JObject.FromObject(DeviceInfo), "");

                        var discoveryResponseString = JsonConvert.SerializeObject(discoveryResponse);

                        // Convert the request to a JSON string
                        writer.WriteString(discoveryResponseString);

                        if (debug)
                        {
                            Debug.WriteLine($"   >>> {discoveryResponseString}");
                        }

                        // Send
                        await writer.StoreAsync();
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine($"DiscoveryClient: Could not complete identification broadcast");
            }
        }
 void SendDiscoveryResponseMessage()
 {
     try
     {
         // Create a discovery response message
         var discoveryResponse  = new DiscoveryResponseMessage(name, JObject.FromObject(deviceInfo), "");
         var serializedResponse = JsonConvert.SerializeObject(discoveryResponse);
         var bytes = Encoding.ASCII.GetBytes(serializedResponse);
         socket.Send(bytes, bytes.Length, new IPEndPoint(IPAddress.Broadcast, udpPort));
     }
     catch (Exception ex)
     {
         Debug.WriteLine($"DiscoveryClient: Could not complete identification broadcast");
     }
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Contains merchant information about the device
        /// </summary>
        /// <param name="drm"></param>
        public MerchantInfo(DiscoveryResponseMessage drm)
        {
            supportsManualRefunds = drm.supportsManualRefund;
            supportsTipAdjust     = drm.supportsTipAdjust;
            supportsVaultCards    = drm.supportsMultiPayToken;
            supportsPreAuths      = drm.supportsTipAdjust;
            merchantID            = drm.merchantId;
            merchantMId           = drm.merchantMId;
            merchantName          = drm.merchantName;

            Device              = new DeviceInfo();
            Device.Name         = drm.name;
            Device.Serial       = drm.serial;
            Device.Model        = drm.model;
            Device.SupportsAcks = drm.supportsAcknowledgement;
        }
        public void SendDiscoveryResponse(
            DiscoveryResponseMessage responseMessage,
            IPAddress clientIpAddress, int clientListeningPort)
        {
            // Let's send the response
            var tcpSender = new TcpClient();

            tcpSender.Connect(clientIpAddress, clientListeningPort);

            NetworkStream networkStream = tcpSender.GetStream();

            string xmlMessage = responseMessage.SerializeToXml();

            Console.Out.WriteLine("I'm sending to client the following message:");
            Console.Out.WriteLine(xmlMessage);

            byte[] dataToBeSent = xmlMessage.ToUtf8EncodedByteArray();

            networkStream.Write(dataToBeSent, 0, dataToBeSent.Length);

            Console.Out.WriteLine("Message has been successfully sent to client");
        }
Ejemplo n.º 6
0
        private IPEndPoint IdentifyMavenNode(List <DiscoveryResponseMessage> discoveryResponseMessages)
        {
            int maxConnectedNodes = discoveryResponseMessages.Count == 0
                ? 0
                : discoveryResponseMessages.Max(m => m.NodeConnectionNum);

            DiscoveryResponseMessage maven = discoveryResponseMessages.FirstOrDefault(message =>
                                                                                      message.NodeConnectionNum == maxConnectedNodes);

            //await Console.Out.WriteLineAsync("Before maven null").ConfigureAwait(false);

            if (maven == null)
            {
                //await Console.Out.WriteLineAsync("Maven is NULL").ConfigureAwait(false);
                Console.Out.WriteLine("No nodes were discovered! Exiting application...");
                Environment.Exit(1);
            }

            IPAddress  mavenIpAddress = IPAddress.Parse(maven.IPAddress);
            IPEndPoint mavenEndPoint  = new IPEndPoint(mavenIpAddress, maven.ListeningPort);

            return(mavenEndPoint);
        }
Ejemplo n.º 7
0
        private void ReceiveDiscoveryResponseMessages(int discoveryTimeout)
        {
            Thread thread = new Thread(() =>
            {
                //Console.Out.WriteLine("Run the Receive Discovery Response SERVICE");
                Console.Out.WriteLine($"DISCOVERY SERVICE is running [ timeout: {discoveryTimeout} sec. ]");
                IPAddress ipAddress = Dns.GetHostAddresses(Dns.GetHostName()).FirstOrDefault();
#if DEBUG
                Console.Out.WriteLine($"Listening to {IPAddress.Any}:{_discoveryResponsePort}");
#endif

                var tcpListener = new TcpListenerEx(IPAddress.Any, _discoveryResponsePort);

                try
                {
                    tcpListener.Start();
#if DEBUG
                    Console.Out.WriteLine($" [TCP] The socket is active? {tcpListener.Active}");
                    Console.WriteLine(" [TCP] The local End point is  :" + tcpListener.LocalEndpoint);
                    Console.WriteLine(" [TCP] Waiting for a connection.....\n");
#endif

                    TimeSpan timeoutTimeSpan    = TimeSpan.FromSeconds(discoveryTimeout);
                    DateTime listeningStartTime = DateTime.Now;

                    // is serving continuously while timeout isn't reached
                    while (_discoveryIsActive &&
                           DateTime.Now.Subtract(listeningStartTime) < timeoutTimeSpan)
                    {
#if DEBUG
                        Console.Out.WriteLine("Before accepting....");
#endif

                        Socket workerSoket = tcpListener.AcceptSocket();

#if DEBUG
                        Console.WriteLine($" [TCP] Connection accepted from: {{ {workerSoket.RemoteEndPoint} }}");
                        Console.WriteLine($" [TCP] SocketWorker is bound to: {{ {workerSoket.LocalEndPoint} }}");
#endif
                        new Thread(() =>
                        {
#if DEBUG
                            Console.Out.WriteLine(
                                $"[TCP] >> SERVER WORKER IS TALKING TO {workerSoket.RemoteEndPoint}");
#endif

                            if (tcpListener.Inactive)
                            {
#if DEBUG
                                Console.Out.WriteLine("[TCP] >> DISCOVERY LISTENER IS DOWN. Closing connection...");
#endif
                                return;
                            }

                            byte[] buffer = new byte[Common.UnicastBufferSize];

                            int receivedBytes = workerSoket.Receive(buffer);

                            workerSoket.Close();

                            byte[] data = buffer.Take(receivedBytes).ToArray();

                            string xmlData = data.ToUtf8String();

#if DEBUG
                            Console.Out.WriteLine(xmlData);
#endif

                            DiscoveryResponseMessage responseMessage = xmlData
                                                                       .DeserializeTo <DiscoveryResponseMessage>();

#if DEBUG
                            Console.Out.WriteLine(" [TCP]   >> DISCOVERY LISTENER has finished job");
#endif

                            _discoveryResponseMessages.Add(responseMessage);
                        }).Start();
                    }
                }
                catch (Exception)
                {
                    Console.Out.WriteLine("DISCOVERY SERVICE has crashed.");
                }
                finally
                {
                    if (tcpListener.Active)
                    {
                        tcpListener.Stop();
                    }
                }
            });

            thread.Start();
        }