/// <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"); }