// Tries to load the demo alarm private static Alarm GetDemoAlarm() { // Check if demo file exists if (!File.Exists(Constants.AicMessageDemoPath)) { string msg = string.Format("Die Demo-Datei wurde nicht gefunden ({0}).", Constants.AicMessageDemoPath); MessageBox.Show(msg, "AIC", MessageBoxButton.OK, MessageBoxImage.Information); return(null); } // Check if demo file is valid Alarm alarm = null; var aicMessage = AicMessage.TryDeserializeFromFile(Constants.AicMessageDemoPath); if (aicMessage == null) { // Demo file is invalid string msg = string.Format("Die Datei {0} ist ungültig.", Constants.AicMessageDemoPath); MessageBox.Show(msg, "AIC", MessageBoxButton.OK, MessageBoxImage.Information); } else if (aicMessage.Alarms.Count == 0) { // Demo file contains no alarms string msg = string.Format("Die Datei {0} enthält keinen Alarm.", Constants.AicMessageDemoPath); MessageBox.Show(msg, "AIC", MessageBoxButton.OK, MessageBoxImage.Information); } else { alarm = aicMessage.Alarms.First(); } return(alarm); }
/// <summary> /// Sends an AicMessage to the AicServer. /// </summary> /// <param name="aicMessage">The AicMessage to send.</param> private void Send(AicMessage aicMessage) { if (mTcpClient != null) { aicMessage.Serialize(mTcpClient.GetStream()); } }
/// <summary> /// Sends an AicMessage with MessageType Request to the AicServer. /// </summary> private void SendRequest() { var aicMessage = new AicMessage { MessageType = MessageType.Request }; Send(aicMessage); }
private void mTimer_Tick(object sender, EventArgs e) { AicMessage aicMessage = null; try { aicMessage = AicMessage.DeserializeFromFile(Constants.AicMessageDemoPath); } catch (Exception) { OnConnectionStatusChanged(new ConnectionStatusChangedEventArgs { ConnectedToServer = false }); } if (aicMessage != null) { OnMessageReceived(new MessageReceivedEventArgs(aicMessage)); } }
// Connects to the AicServer and listens for messages private void Listener_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = (BackgroundWorker)sender; while (!worker.CancellationPending) { #region Connect to server while (!worker.CancellationPending && mTcpClient == null) { Connect(); var connectionStatusChangedEventArgs = new ConnectionStatusChangedEventArgs(); connectionStatusChangedEventArgs.ConnectedToServer = mTcpClient != null; connectionStatusChangedEventArgs.CurrentReconnectCount = mCurrentReconnectCount; worker.ReportProgress(0, connectionStatusChangedEventArgs); if (mTcpClient == null) { Thread.Sleep(5000); } } #endregion #region Listen to server while (!worker.CancellationPending && mTcpClient != null) { Thread.Sleep(200); // Prevent high cpu usage // Check last connection and send a keepalive message if necessary if (ConnectivityTimeoutExceeded) { var aicMessage = new AicMessage(); aicMessage.MessageType = MessageType.KeepAlive; try { Send(aicMessage); } catch (Exception ex) { Log.GetInstance().LogError("Error in sending keepalive.", ex); Disconnect(); break; } LastConnectivity = DateTime.Now; } // Get stream and check if it contains data bool dataAvailable; try { if (mTcpClient == null) { throw new Exception("mTcpClient is null."); } dataAvailable = mTcpClient.GetStream().DataAvailable; } catch (Exception ex) { Disconnect(); Log.GetInstance().LogError("Error in getting stream and checking if data is available.", ex); break; } // Read stream data if (dataAvailable) { Log.GetInstance().LogInformation("Received a message from AIC server."); LastConnectivity = DateTime.Now; AicMessage aicMessage = null; try { // Deserialize stream using (var ms = mTcpClient.ReadNetworkStream(AicMessage.XmlEndTagRegex)) { ms.Position = 0; aicMessage = AicMessage.Deserialize(ms); } } catch (Exception ex) { bool connectionOk = CheckConnection(); if (!connectionOk) { Disconnect(); break; } Log.GetInstance().LogError("Error in deserializing network stream.", ex); } if (aicMessage != null) { // Only report AicMessage if it is a request or a response if (aicMessage.MessageType == MessageType.Request || aicMessage.MessageType == MessageType.Response) { worker.ReportProgress(0, new MessageReceivedEventArgs(aicMessage)); } #region Send response if (aicMessage.MessageType == MessageType.Request || aicMessage.MessageType == MessageType.KeepAlive) { try { string msg = string.Empty; var response = new AicMessage(); if (aicMessage.MessageType == MessageType.Request) { msg = "response"; response.Alarms = aicMessage.Alarms; response.ConnectionWasToServerOk = aicMessage.ConnectionWasToServerOk; response.MessageType = MessageType.Response; } else if (aicMessage.MessageType == MessageType.KeepAlive) { msg = "keepalive"; response.MessageType = MessageType.KeepAlive; } Send(response); Log.GetInstance().LogInformation("Sent " + msg + " to AIC server."); } catch (Exception ex) { Log.GetInstance().LogError("Error in sending response/keepalive.", ex); } } #endregion } } } #endregion } e.Cancel = worker.CancellationPending; }