private IHttpActionResult SetAuto(int brigadeCode, AutoLoadStatus status) { var val = VideoReg.UpdateChannelAuto(brigadeCode, status); switch (val) // Устанавливаем значение в БД { case UpdateEntetyStatus.notExist: return(BadRequest("The video registrator not exsist.")); case UpdateEntetyStatus.notUpdate: return(BadRequest("Channel auto the value is the same.")); case UpdateEntetyStatus.updated: { // Ставил либо снимаем задачу if (status == AutoLoadStatus.on) { AutoLoadChannelTaskManager.Instance.SetOnAutoload(brigadeCode); } else { AutoLoadChannelTaskManager.Instance.SetOffAutoload(brigadeCode); } return(Ok()); }; default: return(BadRequest("Unknown error")); } }
public bool SyncChannelsByPeriod(VideoReg video, DateInterval interval) { var cts = new CancellationTokenSource(); var task = new Task(() => { using (var ftp = FtpLoader.Start(video.FtpSettings)) { try { // Загружаем данные за необходимый интревал // video.BrigadeCode, video.ChannelFolder, channelFolder string localRoot = Path.Combine(channelFolder, video.BrigadeCode.ToString()); ftp.DownloadFilesByInterval(interval, video.ChannelFolder, localRoot, cts); } catch (OperationCanceledException e) { logger.Info(e, $"{video.BrigadeCode} [{interval}] operation canseled"); } catch (Exception e) { logger.Error(e); } } // Сннимаем задачу из списка задач lock (tasksLock) { tasks.RemoveAll(t => t.BrigadeCode == video.BrigadeCode && t.Interval == interval); } }, cts.Token); ChannelTask newTask = new ChannelTask { BrigadeCode = video.BrigadeCode, Interval = interval, Task = task, Cts = cts }; lock (tasksLock) { // Проверем выполняется ли в данный момент аналогичная задача если да то не надо ее дублировать ChannelTask oldTask = tasks.FirstOrDefault(x => x.BrigadeCode == video.BrigadeCode && x.Interval == interval); if (oldTask != null) { logger.Warn($"SyncChannelsByPeriod({video.BrigadeCode}, {interval}) [EXECUTION-MISS]"); return(false); } // Ставим задачу на выполнение tasks.Add(newTask); newTask.Task.Start(); } logger.Info($"SyncChannelsByPeriod({video.BrigadeCode}, {interval}) [EXECUTION]"); return(true); }
static void TestOrm() { using (var db = new DataContext()) { db.Camera.Load(); db.VideoReg.Load(); foreach (var vid in db.VideoReg.Local) { Console.WriteLine(vid.ToString()); } var v = new VideoReg { BrigadeCode = 60, Ip = "123", User = "******", Password = "******", VideoFolder = "video", ChannelFolder = "channel", ChannelAutoLoad = AutoLoadStatus.on, ChannelTimeStamp = DateTime.Now }; var c1 = new Camera { VideoReg = v, Num = 1, VideoRegId = 1, AutoLoadVideo = 0, TimeStamp = DateTime.Now, }; var c2 = new Camera { VideoReg = v, Num = 2, AutoLoadVideo = 0, VideoRegId = 1, TimeStamp = DateTime.Now }; v.Camers = new List <Camera> { c1, c2 }; db.VideoReg.Add(v); db.SaveChanges(); } Console.WriteLine("----------------------------------------------------"); using (var db = new DataContext()) { db.Camera.Load(); db.VideoReg.Load(); foreach (var v in db.VideoReg.Local) { Console.WriteLine(v.ToString()); } } }
public IHttpActionResult Update(VideoReg videoReg) { var res = regRep.Update(videoReg); if (res == UpdateEntetyStatus.updated) { return(Ok()); } return(BadRequest("Video registrator not found.")); }
public void CancelTask(VideoReg video, DateInterval interval) { lock (tasksLock) { // Отменяем задачу var t = tasks.First(x => x.BrigadeCode == video.BrigadeCode && x.Interval == interval); t.Cts.Cancel(); // Удаляем задачу из списка tasks.Remove(t); } }
public IHttpActionResult CancelTask([FromBody] ChannelIntervalModel model) { VideoReg reg = regRep.Get(model.BrigadeCode); if (reg == null) { return(BadRequest($"The video registrator with brigadeCode={model.BrigadeCode} was not found")); } // Выполнение операции ChannelTaskManager.Instance.CancelTask(reg, model.Interval); return(Ok()); }
public IHttpActionResult SyncByPeriod([FromBody] VideoIntervalModel model)//(int brigadeCode, string start, string end) { VideoReg reg = regRep.Get(model.BrigadeCode); if (reg == null) { return(BadRequest($"The video registrator with brigadeCode={model.BrigadeCode} was not found")); } // Выполнение операции if (VideoTaskManager.Instance.SyncChannelsByPeriod(reg, model.CameraNum, model.Interval)) { return(Ok()); } return(BadRequest($"{model.BrigadeCode} cam={model.CameraNum}({model.Interval}) - [ALREADY EXECUTE]")); }
public void Add(VideoReg videoReg) { using (var db = new DataContext()) { videoReg.Camers = new List <Camera>(); // Добавляем сразу 10 камер for (int i = 0; i < 10; i++) { var cam = new Camera { Num = i }; videoReg.Camers.Add(cam); } db.VideoReg.Add(videoReg); db.SaveChanges(); } }
public UpdateEntetyStatus Delete(int brigadeCode) { using (var db = new DataContext()) { VideoReg reg = db.VideoReg .Include(x => x.Camers) // Для каскадного удаления .FirstOrDefault(x => x.BrigadeCode == brigadeCode); if (reg == null) { return(UpdateEntetyStatus.notExist); } db.VideoReg.Remove(reg); db.SaveChanges(); return(UpdateEntetyStatus.updated); } }
public UpdateEntetyStatus Update(VideoReg videoReg) { using (var db = new DataContext()) { var v = db.VideoReg.FirstOrDefault(x => x.BrigadeCode == videoReg.BrigadeCode); if (v == null) { return(UpdateEntetyStatus.notExist); } v.VideoFolder = videoReg.VideoFolder; v.BrigadeCode = videoReg.BrigadeCode; v.Ip = videoReg.Ip; v.VideoFolder = videoReg.VideoFolder; v.ChannelAutoLoad = videoReg.ChannelAutoLoad; v.ChannelTimeStamp = videoReg.ChannelTimeStamp; v.UpdateChannelValues = videoReg.UpdateChannelValues; v.ValuesFile = videoReg.ValuesFile; v.Password = videoReg.Password; v.User = videoReg.User; db.SaveChanges(); } return(UpdateEntetyStatus.updated); }
public IHttpActionResult Add(VideoReg videoReg) { regRep.Add(videoReg); return(Ok()); }
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); }