/// <summary>
        /// Called every 1-10s
        /// </summary>
        /// <param name="dt"></param>
        public void PingServer(DateTime dt)
        {
            if (!isClientAuthorized())
            {
                throw new SecurityException("Access denied");
            }

            if (disconnectTimer.Enabled)
            {
                disconnectTimer.Stop();

                disconnectTimer.Start();
            }

            X509Certificate2 clientCert = getClientCertificate();

            string commonName = Helper.ExtractCommonNameFromCertificate(clientCert);

            Logger.LogData(dt, commonName);

            disconnectTimer.Interval  = 10000;
            disconnectTimer.Enabled   = true;
            disconnectTimer.AutoReset = false;

            IDisconnectCallback currentClient = OperationContext.Current.GetCallbackChannel <IDisconnectCallback>();
            string clientIpAddress            = (OperationContext.Current.IncomingMessageProperties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty).Address;

            disconnectTimer.Elapsed += (sender, e) => DisconnectTimer_Elapsed(sender, e, currentClient, clientIpAddress);
        }