Beispiel #1
0
 public Task Handle(DataUpdatedEvent <TrackedEntity> notification, CancellationToken cancellationToken)
 {
     foreach (var item in notification.Data.OriginalValues.SelectMany(k => k.Value.Select(s => new { Value = s, k.Key })))
     {
         if (IsOnBlackList(notification.GetType().Name, item.Value.Metadata.ShortName()))
         {
             continue;
         }
         var f             = item.Value.Entry;
         var primaryKey    = item.Value.Metadata.FindPrimaryKey();
         var primaryKeys   = primaryKey.Properties.ToDictionary(p => p.Name, p => f.Property(p.Name).CurrentValue?.ToString());
         var originalItems = item.Value.OriginalValues;
         var currentValues = item.Value.Entry.CurrentValues.Properties.ToDictionary(p => p.Name, p => f.Property(p.Name).OriginalValue?.ToString());
         var log           = new EventLog();
         log.CreatedAt      = DateTime.Now;
         log.EventUser      = userAcessor.Name;
         log.DataKeysValues = JsonConvert.SerializeObject(primaryKeys);
         log.EntityType     = item.Key;
         log.EventType      = notification.Type;
         log.OriginalValues = JsonConvert.SerializeObject(
             originalItems
             .Where(original =>
                    currentValues.Any(current => current.Key == original.Key && current.Value != original.Value)
                    ).ToDictionary(s => s.Key, s => s.Value)
             );
         this.dbContext.Add(log);
     }
     return(Task.CompletedTask);
 }
Beispiel #2
0
 /// <summary>
 /// 写入值
 /// </summary>
 /// <param name="data">变量新的值</param>
 public void Write(object data)
 {
     try
     {
         lock (_data)
         {
             _data = data;
             DataUpdatedEvent?.Invoke(_data);
         }
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
Beispiel #3
0
        // disconnect from a COM port
        public void Disconnect()
        {
            if (port.IsOpen)
            {
                try
                {
                    comLoop.CancelAsync(); // stops monitoring for new data
                    port.Close();
                    while (port.IsOpen)
                    {
                    }                       // wait for port to close
                }
                catch (System.IO.IOException ex)
                {
                    System.Windows.MessageBox.Show(ex.Message, "Error", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
                }
            }

            // resets all read data
            current          = 0;
            voltage          = 0;
            temperature      = 0;
            status           = 0;
            UserPins         = 0;
            errorFlags       = 0;
            seriesResistance = 0;

            // resets all port and device information
            activePortName       = null;
            firmwareVersion      = null;
            boardRevision        = null;
            DeviceIdentification = string.Empty;
            maxIdac              = 0;
            maxIadc              = 0;
            maxVdac              = 0;
            maxVadc              = 0;
            maxPower             = 0;
            dvmInputResistance   = 0;
            temperatureThreshold = 0;
            errorMessages        = null;
            dataToWrite.Clear();

            // raise connection updated event
            ConnectionUpdatedEvent?.Invoke();

            // last data update (with reset data)
            DataUpdatedEvent?.Invoke(); // event for data update complete
        }
Beispiel #4
0
 private void OnDataReceiving(object msg)
 {
     try
     {
         if (!isClosing)
         {
             //lock (this)
             //{
             //    _isDataUpdated = true;
             //}
             _isDataUpdated = true;
             DataUpdatedEvent?.Invoke(msg);
         }
     }
     catch (Exception ex)
     {
         throw;
     }
 }
Beispiel #5
0
        // reads data from load and then raises update event
        private void comLoop_DoWork(object sender, DoWorkEventArgs e)
        {
            //uint cyclecounter = 0;
            //DateTime start = DateTime.Now;
            while (!comLoop.CancellationPending)
            {
                try
                {
                    //if ((DateTime.Now - start).TotalMilliseconds > 10000)
                    //{
                    //    Console.WriteLine("Cycles per second: {0:f1}", Convert.ToDouble(cyclecounter) / 10.0);
                    //    cyclecounter = 0;
                    //    start = DateTime.Now;
                    //}

                    dataToWrite.Enqueue(new byte[] { COMMUNICATION_READ | ((byte)ReadCommands.Measurement & 0x7F) });
                    setToLoad();
                    if (readMeasurement())
                    {
                        DataUpdatedEvent?.Invoke(); // event for data update complete
                        //cyclecounter++;
                    }
                }
                catch (Exception ex)
                {
                    if (ex is TimeoutException || ex is System.IO.IOException)
                    {
                        Disconnect();
                        System.Windows.MessageBox.Show(ex.Message + "\nTo continue, please reconnect load.", "Error", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
                        return;
                    }
                    if (ex is InvalidOperationException)
                    {
                        System.Windows.MessageBox.Show(ex.Message, "Error", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
                        return;
                    }
                    throw;
                }
                // Thread.Sleep(loopDelay);
            }
            e.Cancel = true;
        }
Beispiel #6
0
 private void Apply(Entity entity)
 {
     if (_idToFilterData.TryGetValue(entity.UniqueIdentifier, out FilterDataT filterData))
     {
         FilterDataT updatedFilterData = new FilterDataT();
         if (!updatedFilterData.TrySetFilterData(entity, _refresher.EntityAdmin))
         {
             _idToFilterData.Remove(entity.UniqueIdentifier);
             var listeners = _listeners.ToArray();
             for (int i = 0, c = listeners.Length; i < c; i++)
             {
                 listeners[i].OnDataUnregistered(filterData);
             }
             DataRemovedEvent?.Invoke(entity.UniqueIdentifier, filterData);
         }
         else if (!updatedFilterData.Equals(filterData))
         {
             _idToFilterData[entity.UniqueIdentifier] = updatedFilterData;
             var listeners = _listeners.ToArray();
             for (int i = 0, c = listeners.Length; i < c; i++)
             {
                 listeners[i].OnDataUnregistered(filterData);
             }
             DataUpdatedEvent?.Invoke(entity.UniqueIdentifier, updatedFilterData);
         }
     }
     else
     {
         filterData = new FilterDataT();
         if (filterData.TrySetFilterData(entity, _refresher.EntityAdmin))
         {
             _idToFilterData[entity.UniqueIdentifier] = filterData;
             var listeners = _listeners.ToArray();
             for (int i = 0, c = listeners.Length; i < c; i++)
             {
                 listeners[i].OnDataRegistered(filterData);
             }
             DataAddedEvent?.Invoke(entity.UniqueIdentifier, filterData);
         }
     }
 }
Beispiel #7
0
        // reads data from load and then raises update event
        private void comLoop_DoWork(object sender, DoWorkEventArgs e)
        {
#if DEBUG
            int      reads  = 0;
            int      writes = 0;
            DateTime start  = DateTime.Now;
#endif
            while (!comLoop.CancellationPending)
            {
                try
                {
#if DEBUG
                    if ((DateTime.Now - start).TotalMilliseconds > 1000)
                    {
                        App.DebugOutput.WriteLine(string.Format("Reads per second: {0:f1}. Writes per second: {0:f1}.", Convert.ToDouble(reads) / 1.0, Convert.ToDouble(writes) / 1.0));
                        reads  = 0;
                        writes = 0;
                        start  = DateTime.Now;
                    }
#endif

                    if (stopped)
                    {
                        Set(RunMode.Current, 0);
                    }
                    dataToWrite.Enqueue(new byte[] { COMMUNICATION_READ | ((byte)ReadCommands.Measurement & 0x7F) });
#if DEBUG
                    writes += dataToWrite.Count;
#endif
                    setToLoad();
                    if (readMeasurement())
                    {
                        DataUpdatedEvent?.Invoke(); // event for data update complete
#if DEBUG
                        reads++;
#endif
                    }
                }
                catch (Exception ex)
                {
#if DEBUG
                    App.DebugOutput.WriteLine(string.Format("Communication error: {0}", ex.Message));
#endif

                    if (ex is TimeoutException || ex is System.IO.IOException)
                    {
                        Disconnect();
                        System.Windows.MessageBox.Show(ex.Message + "\nTo continue, please reconnect load.", "Error", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
                    }
                    else if (ex is InvalidOperationException)
                    {
                        System.Windows.MessageBox.Show(ex.Message, "Error", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
                    }
                    else
                    {
                        System.Windows.MessageBox.Show(ex.Message, "Error", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
                    }
                    return;
                }
                // Thread.Sleep(loopDelay);
            }
            e.Cancel = true;
        }