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); }
/// <summary> /// 写入值 /// </summary> /// <param name="data">变量新的值</param> public void Write(object data) { try { lock (_data) { _data = data; DataUpdatedEvent?.Invoke(_data); } } catch (Exception ex) { throw ex; } }
// 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 }
private void OnDataReceiving(object msg) { try { if (!isClosing) { //lock (this) //{ // _isDataUpdated = true; //} _isDataUpdated = true; DataUpdatedEvent?.Invoke(msg); } } catch (Exception ex) { throw; } }
// 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; }
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); } } }
// 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; }