public bool TryUpdateDevice(DeviceType device, DeviceState state, out DeviceStatus status) { if (_devices.TryGetValue(device, out status) && status.State != state) { status = status.Update(state, DateTime.Now); _devices[device] = status; DeviceUpdated?.Invoke(this, status); return(true); } return(false); }
private void timerUpdate_Tick(object sender, EventArgs e) { TimeSpan elapsed = DateTime.UtcNow - lastRun; if (elapsed.TotalMilliseconds < 800) { return; } int count = listViewDevices.Items.Count; bool changed = false; for (int i = 0; i < count; i++) { int testId = (int)listViewDevices.Items[(checkIndex + i) % count].Tag; DeviceStatus device = devices[testId]; if (device.Changed) { changed = true; device.Changed = false; } if (device.Update(device.Mode != DeviceStatus.DeviceMode.Configuring, device.Mode == DeviceStatus.DeviceMode.Charging)) { changed = true; } // See if a charging device should be configured if (device.Mode == DeviceStatus.DeviceMode.Charging && device.CanConfigure(MinBattery)) { device.StartConfigure(StartDays, StartHour, DurationDays, EndHour); changed = true; } if (device.Mode == DeviceStatus.DeviceMode.Unexpected) { if (autoAdd) { AddExpectedDevice(device.Id); } } } if (changed) { UpdateDevices(); } lastRun = DateTime.UtcNow; }
private void timerUpdate_Tick(object sender, EventArgs e) { TimeSpan elapsed = DateTime.UtcNow - lastRun; if (elapsed.TotalMilliseconds < 800) { return; } int count = listViewDevices.Items.Count; bool changed = false; // Any configuring? bool configuring = false; for (int i = 0; i < count; i++) { uint testId = (uint)listViewDevices.Items[i].Tag; DeviceStatus device = devices[testId]; if (device.Mode == DeviceStatus.DeviceMode.Configuring) { configuring = true; break; } } // Update next element for (int i = 0; i < count; i++) { uint testId = (uint)listViewDevices.Items[(checkIndex + i) % count].Tag; DeviceStatus device = devices[testId]; // See if a charging device should be configured if (!configuring && device.Mode == DeviceStatus.DeviceMode.Charging && device.CanConfigure(MinBattery)) { device.StartConfigure(StartDays, StartHour, DurationDays, EndHour, DebugMode); changed = true; } else { if (device.Changed) { changed = true; device.Changed = false; } if (device.Update(device.Mode != DeviceStatus.DeviceMode.Configuring, device.Mode == DeviceStatus.DeviceMode.Charging)) { changed = true; } if (device.Mode == DeviceStatus.DeviceMode.Unexpected) { if (autoAdd) { AddExpectedDevice(device.Id); } } } // NOTE: For now, only deal with one change per iteration if (changed) { break; } } checkIndex++; if (changed) { UpdateDevices(); } lastRun = DateTime.UtcNow; }