public void AddFault(FaultFrameDecoded newFault) { List <DeviceFailureInfo> faultsList = null; lock (faultsMap) { if (!faultsMap.ContainsKey(newFault.DeviceId)) { faultsList = new List <DeviceFailureInfo>(); faultsMap.Add(newFault.DeviceId, faultsList); } else { try { faultsMap.TryGetValue(newFault.DeviceId, out faultsList); } catch //si no pudo obtener la lista desde el mapa { faultsList = new List <DeviceFailureInfo>(); faultsMap.Add(newFault.DeviceId, faultsList); } } } //para agreagr se hace lock en la lista seleccionada lock (faultsList) { faultsList.Add(new DeviceFailureInfo() { AlarmDateTime = newFault.AlarmDateTime, AlarmLevel = newFault.AlarmLevel, AlarmType = newFault.AlarmType }); } }
private void OnReceiveCompleted(Object source, ReceiveCompletedEventArgs asyncResult) { try { MessageQueue mq = (MessageQueue)source; if (mq != null) { try { System.Messaging.Message message = null; try { message = mq.EndReceive(asyncResult.AsyncResult); } catch (Exception ex) { log.Error(ex.Message); } if (message != null) { MessageBean messageBean = message.Body as MessageBean; if (messageBean != null) { if (messageBean.MessageType == MessageTypeEnum.FAULT) { FaultFrameDecoded tmp = new FaultFrameDecoded(); tmp.Parse(messageBean.Message); SingletonStatsHistory.GetInstance().AddFault(tmp); log.InfoFormat("Fault: {0}", tmp.ToString()); } else { StatusFrameDecoded tmp = new StatusFrameDecoded(); tmp.Parse(messageBean.Message); SingletonStatsHistory.GetInstance().AddStatus(tmp); log.InfoFormat("Status: {0}", tmp.ToString()); } } else { log.Info("Message vino null"); } } } finally { if (isRunning) { mq.BeginReceive(); } } } return; } catch (Exception exc) { log.Error(exc.Message); } }
private void CommandREQFailureReport(Connection clientConnection, Data dato) { FaultFrameDecoded message = new FaultFrameDecoded(); message.Parse(dato.Payload.Message); SingletonDeviceInfoHandler.GetInstance().UpdateDeviceStatus(message); log.DebugFormat("Llego REQ Failure con {0}", message.ToString()); log.DebugFormat("Notificar a server dispositivos y estadisticas"); MessageBean messageBean = new MessageBean() { Message = dato.Payload.Message, MessageType = MessageTypeEnum.FAULT }; StatisticsQueueClient.GetInstance().SendMessages(messageBean); }
public void UpdateDeviceStatus(FaultFrameDecoded message) { DeviceFailureInfo newFailure = new DeviceFailureInfo() { AlarmLevel = message.AlarmLevel, AlarmDateTime = message.AlarmDateTime, AlarmType = message.AlarmType }; try { DeviceInfo deviceInfo = null; devicesInfo.TryGetValue(message.DeviceId, out deviceInfo); deviceInfo.LastFailureInfo = newFailure; } catch (Exception) { this.devicesInfo.Add(message.DeviceId, new DeviceInfo() { DeviceId = message.DeviceId, LastFailureInfo = newFailure }); } }