Пример #1
0
        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
                });
            }
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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);
        }
Пример #4
0
        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
                });
            }
        }