/// <summary>
        /// Determines whether the network is available.
        /// </summary>
        /// <returns>Returns true if the network is available.</returns>
        public bool IsAvailable()
        {
            try
            {
                //var restClient = ApplicationContext.Current.GetRestClient("hdsi");
                var networkInformationService = ApplicationContext.Current.GetService <INetworkInformationService>();
                if (networkInformationService.IsNetworkAvailable)
                {
                    if (this.m_lastPing < DateTime.Now.AddSeconds(-30))
                    {
                        HdsiServiceClient client = this.GetServiceClient(); //new HdsiServiceClient(restClient);
                        client.Client.Credentials = new NullCredentials();
                        client.Client.Description.Endpoint[0].Timeout = 5000;
                        this.m_lastPing = DateTime.Now;
                        return(this.IsValidVersion(client) &&
                               client.Ping());
                    }

                    return(true);
                }

                return(false);
            }
            catch (Exception e)
            {
                this.m_tracer.TraceInfo($"Unable to determine network state: {e}");
                return(false);
            }
        }
        /// <summary>
        /// Get the difference between the server and this device's time
        /// </summary>
        public TimeSpan GetServerTimeDrift()
        {
            try
            {
                //var restClient = ApplicationContext.Current.GetRestClient("hdsi");
                var networkInformationService = ApplicationContext.Current.GetService <INetworkInformationService>();
                if (networkInformationService.IsNetworkAvailable)
                {
                    HdsiServiceClient client = this.GetServiceClient(); //new HdsiServiceClient(restClient);
                    client.Client.Credentials = new NullCredentials();
                    client.Client.Description.Endpoint[0].Timeout = 20000;
                    var drift = TimeSpan.Zero;
                    client.Client.Responded += (o, e) =>
                    {
                        if (e.Headers != null)
                        {
                            if (e.Headers.ContainsKey("X-GeneratedOn"))
                            {
                                drift = DateTime.Parse(e.Headers["X-GeneratedOn"]).Subtract(DateTime.Now);
                            }
                            else if (DateTime.TryParse(e.Headers["Date"], out var serverTime))
                            {
                                drift = serverTime.Subtract(DateTime.Now);
                            }
                        }
                    };
                    client.Ping();
                    return(drift);
                }

                return(TimeSpan.Zero);
            }
            catch (Exception e)
            {
                this.m_tracer.TraceError($"Unable to determine server time drift: {e}");
                return(TimeSpan.Zero);
            }
        }