public async Task <List <RegisterDataSlice> > Read(DeviceDescription description) { await Task.Delay(1000); if (description.Id == 2) { throw new Exception(); } return(description.Registers.Select(r => { var rand = new Random(); var intV = (double)rand.Next(10, 100); var floatV = (double)rand.Next(10, 99); var value = 2.0 * r.IntegerAddress * description.Id; if (this.cache.TryGetValue(new Tuple <uint, uint>(description.Id, r.IntegerAddress), out var cachedValue)) { value = cachedValue; } var data = new RegisterDataSlice(new RegisterId(description.Id, r), DateTime.Now, value); return data; }).ToList()); }
public List <RegisterDataSlice> ParseResult(DeviceDescription device, List <RegisterDescription> descriptions, int length, ushort[] data) { var collectedData = new List <RegisterDataSlice>(descriptions.Count); var startOffset = (int)descriptions.First().IntegerAddress; foreach (var register in descriptions) { var i = (int)register.IntegerAddress - startOffset; var count = this.RegisterLength(register); var bytes = data.Skip(i).Take(count).ToArray(); switch (bytes.Length) { case 2: { var parsedData = new RegisterDataSlice(new RegisterId(device.Id, register), DateTime.Now, this.ToFloat(bytes[0], bytes[1])); collectedData.Add(parsedData); break; } case 1: { var parsedData = new RegisterDataSlice(new RegisterId(device.Id, register), DateTime.Now, bytes[0]); collectedData.Add(parsedData); break; } default: return(collectedData); } } return(collectedData); }
public void Save(RegisterDataSlice dataSlice) { lock (this.storageSync) { if (this.storedData.Count > 10000) { this.storedData.Clear(); } if (this.storedData.TryGetValue(dataSlice.Id, out var value)) { value.Add(dataSlice); } else { this.storedData.Add(dataSlice.Id, new List <RegisterDataSlice>() { dataSlice }); } this.Saved?.Invoke(this, dataSlice); } }
public bool First(Func <RegisterDataSlice, bool> filter, out RegisterDataSlice dataSlice) { throw new NotImplementedException(); }