static void TestCreateFileDeviceValues() { var a = new BrigadeChannelValue(); a.Actual = DateTime.Now; a.BrigadeCode = 111; a.Channels = new List <DeviceChannelData>(); for (int i = 0; i < 10; i++) { double v = new Random(DateTime.Now.Millisecond).NextDouble(); a.Channels.Add(new DeviceChannelData { Code = i, Num = 0, Value = v }); } var str = JsonConvert.SerializeObject(a); File.WriteAllText("values.txt", str); }
public void Set(BrigadeChannelValue val) { var cash = Cash; lock (lockObj) { var item = cash.FirstOrDefault(x => x.BrigadeCode == val.BrigadeCode); if (item == null) { cash.Add(val); } else { item.LastActual = item.Actual; item.Actual = val.Actual; item.Channels = val.Channels; } } }
public bool SetOn(VideoReg reg) { var cts = new CancellationTokenSource(); // Задача постоянного обновления кеша данных с приборов var task = new Task(() => { logger.Info($"Task [{reg.BrigadeCode}] autoupdate device values was started"); if (string.IsNullOrEmpty(reg.ValuesFile)) { logger.Info($"Task [{reg.BrigadeCode}] autoupdate device values. File name is uncorrect."); DeleteTask(reg.BrigadeCode); return; } using (var ftp = FtpLoader.Start(reg.FtpSettings)) { while (!cts.IsCancellationRequested) { string strJson = ""; try { strJson = ftp.DownloadFile(reg.ValuesFile); } catch (Exception e) { logger.Error(e, $"Task [{reg.BrigadeCode}] autoupdate device values. Faild load file {reg.ValuesFile} [ERROR]"); } BrigadeChannelValue obj = null; try { obj = JsonConvert.DeserializeObject <BrigadeChannelValue>(strJson); } catch (Exception e) { logger.Error(e, $"Task [{reg.BrigadeCode}] autoupdate device values. Faild load file {reg.ValuesFile} [ERROR]"); return; } if (obj.BrigadeCode != reg.BrigadeCode) { logger.Error($"[IMPORTANT] Task [{reg.BrigadeCode}] Database data not equals device brigadeCode [ERROR]"); } DeviceDataCash.Instance.Set(obj); } } // Если задача была отменена убераем ее с выполнения DeleteTask(reg.BrigadeCode); logger.Info($"Task [{reg.BrigadeCode}] autoupdate device values was canceled"); }, cts.Token); DeviceDataTask newTask = new DeviceDataTask { BrigadeCode = reg.BrigadeCode, Task = task, Cts = cts }; newTask.Task.Start(); AddTask(newTask); logger.Info($"OnAutoUpdateChannelValue({reg.BrigadeCode}) [EXECUTION]"); return(true); }