Example #1
0
        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);
        }
Example #2
0
        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;
                }
            }
        }
Example #3
0
        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);
        }