/// <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);
        }
        public void TestCommunication()
        {
            Console.WriteLine("Communication is established...");
            //add client to list
            IDisconnectCallback callback = OperationContext.Current.GetCallbackChannel <IDisconnectCallback>();

            if (!Program.myClients.Contains(callback))
            {
                Program.myClients.Add(callback);
            }
        }
        private void DisconnectTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e, IDisconnectCallback client, string clientIP)
        {
            message = String.Format("Client {0} disconnect from server.", clientIP);
            EventLogEntryType evntType = EventLogEntryType.SuccessAudit;

            EventLogManager.WriteEntryServer(message, evntType, Convert.ToInt32(IDServerType.ClientDisconnect));

            //send disconnect
            client.DisconnectClient("close");
        }