private int SendData(ProtoBuffer.Models.AlgorithmInfo algorithmInfo, string nextIdentity) { int result = 1; try { assembly.SendAlgorithmSet(algorithmInfo, nextIdentity); bool flag = true; new TaskFactory().StartNew(() => { while (flag && ManagerHelp.AlgorithmResult == "") { Thread.Sleep(1000); } }).Wait(timeout); flag = false; if (ManagerHelp.AlgorithmResult != "") { result = Convert.ToInt32(ManagerHelp.AlgorithmResult); ManagerHelp.AlgorithmResult = ""; } else { result = 400;//网络超时 } } catch (Exception ex) { } return(result); }
/// <summary> /// 处理protoBuf消息实体 /// </summary> /// <param name="model"></param> /// <returns></returns> private ProtoBuffer.Models.AlgorithmInfo GetProtoAlgorithm(AlgorithmViewModel model, string cid) { ProtoBuffer.Models.AlgorithmInfo info = new ProtoBuffer.Models.AlgorithmInfo() { cid = cid, aid = model.Id, gpu = model.GPU, similar = (float)model.Similar, dectectfirst = (float)model.DectectFirst, dectectsecond = (float)model.DectectSecond, track = (float)model.Track, type = (ProtoBuffer.Models.AlgorithmInfo.Type)model.Type }; return(info); }
/// <summary> /// 保存算法 /// </summary> /// <param name="model"></param> /// <returns></returns> public IActionResult Save(string model) { try { string shipId = base.user.ShipId;//为陆地端时保存的是XMQ的组件ID if (shipId == "") { return(new JsonResult(new { code = 1, msg = "船不存在,无法添加数据" })); } var viewModel = JsonConvert.DeserializeObject <AlgorithmViewModel>(model); if (viewModel != null) { int code = 1; string errMsg = ""; string AIName = Enum.GetName(typeof(AlgorithmType), viewModel.Type); if (base.user.IsLandHome) { //获取当前船舶的组件ID(webId) string tokenstr = HttpContext.Session.GetString("comtoken"); string identity = ManagerHelp.GetLandToId(tokenstr); if (string.IsNullOrEmpty(identity)) { return(new JsonResult(new { code = 1, msg = "当前船舶已失联,请重新连接" })); } //获取当前组件下的某个算法 string algoComId = ManagerHelp.GetLandToId(tokenstr, ComponentType.AI, AIName); if (string.IsNullOrEmpty(algoComId) && viewModel.Type != (int)AlgorithmType.CAPTURE) { string name = GetViewName((AlgorithmType)viewModel.Type); return(new JsonResult(new { code = 1, msg = "算法【" + name + "】组件未启动" })); } var cam = cameras.FirstOrDefault(c => c.Id == viewModel.Cid); //算法里的摄像机ID=设备ID:摄像机ID:摄像机通道 string cid = cam.DeviceId + ":" + cam.Id + ":" + cam.Index; //向船舶端发送算法配置请求 ProtoBuffer.Models.AlgorithmInfo algorithm = GetProtoAlgorithm(viewModel, cid); code = SendData(algorithm, (shipId + ":" + identity)); if (code == 400) { errMsg = "网络请求超时。。。"; } else if (code != 0) { errMsg = "算法配置失败"; } } else { Algorithm algo = new Algorithm(); if (!DataCheck(viewModel, ref algo, ref errMsg)) { return(new JsonResult(new { code = 1, msg = errMsg })); } //获取船舶某个算法的组件ID string identity = ManagerHelp.GetShipToId(ComponentType.AI, AIName); if (string.IsNullOrEmpty(identity) && viewModel.Type != (int)AlgorithmType.CAPTURE) { string name = GetViewName((AlgorithmType)viewModel.Type); return(new JsonResult(new { code = 1, msg = "算法【" + name + "】组件未启动" })); } algo.GPU = viewModel.GPU; algo.Type = (AlgorithmType)viewModel.Type; algo.Similar = viewModel.Similar; algo.Cid = viewModel.Cid; algo.DectectFirst = viewModel.DectectFirst; algo.DectectSecond = viewModel.DectectSecond; algo.Track = viewModel.Track; if (!string.IsNullOrEmpty(viewModel.Id)) { algo.Id = viewModel.Id; _context.Algorithm.Update(algo); } else { algo.Id = Guid.NewGuid().ToString(); _context.Algorithm.Add(algo); } //缺岗直接进库不用发消息 if (viewModel.Type == (int)AlgorithmType.CAPTURE) { _context.SaveChanges(); code = 0; ManagerHelp.LiveTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } else { viewModel.Id = algo.Id; var camera = _context.Camera.FirstOrDefault(c => c.Id == viewModel.Cid); if (camera != null) { string cid = camera.DeviceId + ":" + camera.Id + ":" + camera.Index; ProtoBuffer.Models.AlgorithmInfo algorithm = GetProtoAlgorithm(viewModel, cid); ManagerHelp.isFaceAlgorithm = false; if (viewModel.Type == (int)AlgorithmType.ATTENDANCE_IN || viewModel.Type == (int)AlgorithmType.ATTENDANCE_OUT) { ManagerHelp.isFaceAlgorithm = true; } code = SendData(algorithm, identity); if (code == 0) { _context.SaveChanges(); } else if (code == 2) { errMsg = "网络请求超时。。。"; } else { errMsg = "算法配置失败"; } } } } return(new JsonResult(new { code = code, msg = errMsg })); } return(new JsonResult(new { code = 1, msg = "操作界面数据失败!" })); } catch (Exception ex) { _logger.LogError("保存算法配置失败", model); return(new JsonResult(new { code = 1, msg = "数据保存失败!" + ex.Message })); } }