public void TestParsing()
            {
                var dateTime = DateTime.Now;

                var usage = new NetworkLicenseUsage("computerId", "ip", "userName", "licenseSignature", dateTime);

                Assert.AreEqual("computerId", usage.ComputerId);
                Assert.AreEqual("ip", usage.Ip);
                Assert.AreEqual("licenseSignature", usage.LicenseSignature);
                Assert.AreEqual("userName", usage.UserName);
                //Assert.IsTrue(ObjectHelper.AreEqual(dateTime, usage.StartDateTime));

                var networkString = usage.ToNetworkMessage();
                var usage2        = NetworkLicenseUsage.Parse(networkString);

                Assert.AreEqual(usage.ComputerId, usage2.ComputerId);
                Assert.AreEqual(usage.Ip, usage2.Ip);
                Assert.AreEqual(usage.LicenseSignature, usage2.LicenseSignature);
                Assert.AreEqual(usage.UserName, usage2.UserName);
                //Assert.IsTrue(ObjectHelper.AreEqual(usage.StartDateTime, usage2.StartDateTime));
            }
            public void TestParsing()
            {
                var dateTime = DateTime.Now;

                var usage = new NetworkLicenseUsage("computerId", "ip", "userName", "licenseSignature", dateTime);

                Assert.AreEqual("computerId", usage.ComputerId);
                Assert.AreEqual("ip", usage.Ip);
                Assert.AreEqual("licenseSignature", usage.LicenseSignature);
                Assert.AreEqual("userName", usage.UserName);
                //Assert.IsTrue(ObjectHelper.AreEqual(dateTime, usage.StartDateTime));

                var networkString = usage.ToNetworkMessage();
                var usage2 = NetworkLicenseUsage.Parse(networkString);

                Assert.AreEqual(usage.ComputerId, usage2.ComputerId);
                Assert.AreEqual(usage.Ip, usage2.Ip);
                Assert.AreEqual(usage.LicenseSignature, usage2.LicenseSignature);
                Assert.AreEqual(usage.UserName, usage2.UserName);
                //Assert.IsTrue(ObjectHelper.AreEqual(usage.StartDateTime, usage2.StartDateTime));
            }
        private void HandleIncomingRequests(object ipAddressAsObject)
        {
            try
            {
                var ipAddress = (ipAddressAsObject != null) ? IPAddress.Parse((string)ipAddressAsObject) : IPAddress.Any;

                Log.Debug("Creating listener for ip '{0}'", ipAddress);

                var udpClient = new UdpClient();

                udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
                udpClient.ExclusiveAddressUse = false;
                udpClient.EnableBroadcast = true;

                udpClient.Client.Bind(new IPEndPoint(ipAddress, Port));

                var licenseSignature = string.Empty;

                while (true)
                {
                    try
                    {
                        if (string.IsNullOrEmpty(licenseSignature))
                        {
                            var currentLicense = _licenseService.CurrentLicense;
                            if (currentLicense != null)
                            {
                                licenseSignature = currentLicense.Signature;
                            }
                        }

                        if (string.IsNullOrWhiteSpace(licenseSignature))
                        {
                            // No reason to wait for something, wait and continue
                            Thread.Sleep(5000);
                            continue;
                        }

                        var ipEndPoint = new IPEndPoint(IPAddress.Any, Port);
                        var data = udpClient.Receive(ref ipEndPoint);

                        var message = Encoding.ASCII.GetString(data);
                        if (string.Equals(message, licenseSignature))
                        {
                            Log.Debug("Received request from '{0}' on '{1}' to get currently used license", ipEndPoint.Address, udpClient.Client.LocalEndPoint);

                            var licenseUsage = new NetworkLicenseUsage(_machineId, ipAddress.ToString(), _userName, licenseSignature, _startDateTime);

                            var responseMessage = licenseUsage.ToNetworkMessage();
                            var responseBytes = ASCIIEncoding.ASCII.GetBytes(responseMessage);

                            udpClient.Send(responseBytes, responseBytes.Length, ipEndPoint);
                        }
                    }
                    catch (SocketException)
                    {
                        // Ignore, it's probably the timeout
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Error(ex, "Failed to handle incoming requests, probably a process is already running on the same port");
            }
        }
        private void HandleIncomingRequests(object ipAddressAsObject)
        {
            try
            {
                var ipAddress = (ipAddressAsObject != null) ? IPAddress.Parse((string)ipAddressAsObject) : IPAddress.Any;

                Log.Debug("Creating listener for ip '{0}'", ipAddress);

                using (var udpClient = new UdpClient())
                {
                    udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
                    udpClient.ExclusiveAddressUse = false;
                    udpClient.EnableBroadcast     = true;

                    udpClient.Client.Bind(new IPEndPoint(ipAddress, Port));

                    var licenseSignature = string.Empty;

                    while (true)
                    {
                        try
                        {
                            if (string.IsNullOrEmpty(licenseSignature))
                            {
                                var currentLicense = _licenseService.CurrentLicense;
                                if (currentLicense != null)
                                {
                                    licenseSignature = currentLicense.Signature;
                                }
                            }

                            if (string.IsNullOrWhiteSpace(licenseSignature))
                            {
                                // No reason to wait for something, wait and continue
                                Thread.Sleep(5000);
                                continue;
                            }

                            var ipEndPoint = new IPEndPoint(IPAddress.Any, Port);
                            var data       = udpClient.Receive(ref ipEndPoint);

                            var message = Encoding.ASCII.GetString(data);
                            if (string.Equals(message, licenseSignature))
                            {
                                Log.Debug("Received request from '{0}' on '{1}' to get currently used license", ipEndPoint.Address, udpClient.Client.LocalEndPoint);

                                var licenseUsage = new NetworkLicenseUsage(_machineId, ipAddress.ToString(), _userName, licenseSignature, _startDateTime);

                                var responseMessage = licenseUsage.ToNetworkMessage();
                                var responseBytes   = ASCIIEncoding.ASCII.GetBytes(responseMessage);

                                udpClient.Send(responseBytes, responseBytes.Length, ipEndPoint);
                            }
                        }
                        catch (SocketException)
                        {
                            // Ignore, it's probably the timeout
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Error(ex, "Failed to handle incoming requests, probably a process is already running on the same port");
            }
        }