/// <summary> /// 船舶状态 /// </summary> /// <param name="status"></param> public void StatusData(SmartWeb.ProtoBuffer.Models.Status status) { //添加日志 ProtoBDManager.AddReceiveLog <SmartWeb.ProtoBuffer.Models.Status>("Status", status); switch (status.command) { case Status.Command.SET_REQ: //设置船状态 #region 陆地端修改船状态 var ship = new Ship(); int result = ProtoBDManager.ShipSet(status.statusrequest, ref ship); if (result == 0) { var components = ProtoBDManager.GetComponentByAI(); foreach (var item in components) { //向XMQ组件里的所有算法发送船信息 manager.SendStatusSet(ship, StatusRequest.Type.SAIL, item.Cid); } } manager.SendStatusRN(Status.Command.SET_REP, null, result); break; #endregion case Status.Command.QUERY_REQ: #region 陆地端查询船信息 ship = ProtoBDManager.StatusQuery(); manager.SendStatusRN(Status.Command.QUERY_REP, ship); break; #endregion case Status.Command.SET_REP: //接收设备成功与否 ManagerHelp.StatusResult = status.statusresponse.result.ToString(); break; case Status.Command.QUERY_REP: if (status.statusresponse != null) { ManagerHelp.StatusReponse = JsonConvert.SerializeObject(status.statusresponse); } break; default: break; } }
/// <summary> /// 算法处理 /// </summary> /// <param name="fromId">算法来源</param> /// <param name="algorithm"></param> public void AlgorithmData(SmartWeb.ProtoBuffer.Models.Algorithm algorithm, string fromId) { //添加日志 ProtoBDManager.AddReceiveLog <SmartWeb.ProtoBuffer.Models.Algorithm>("Algorithm/" + Enum.GetName(typeof(Models.Component.Command), Convert.ToInt32(algorithm.command)), algorithm); switch (algorithm.command) { case Models.Algorithm.Command.CONFIGURE_REQ: #region 陆地端发送算法设置请求 var request = algorithm.algorithmrequest; if (request == null) { manager.SendAlgorithmRN(Models.Algorithm.Command.CONFIGURE_REP, null, 1); break; } var devcid = request.algorithminfo.cid.Split(":"); //cid=did:cid:index(设备ID:摄像机ID:摄像机通道) var cid = devcid[1]; request.algorithminfo.cid = cid; int result = ProtoBDManager.AlgorithmSet(request.algorithminfo); if (result == 0) { if (request.algorithminfo.type == AlgorithmInfo.Type.CAPTURE) { ManagerHelp.LiveTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } if (request.algorithminfo.type != AlgorithmInfo.Type.CAPTURE) { string name = Enum.GetName(typeof(AlgorithmType), request.algorithminfo.type); string identity = ManagerHelp.GetShipToId(ComponentType.AI, name); if (identity != "") { //向算法组件注册时只需要传入设备ID和摄像机通道 request.algorithminfo.cid = devcid[0] + ":" + devcid[1] + ":" + devcid[2]; ManagerHelp.isFaceAlgorithm = false; if (request.algorithminfo.type == AlgorithmInfo.Type.ATTENDANCE_IN || request.algorithminfo.type == AlgorithmInfo.Type.ATTENDANCE_OUT) { ManagerHelp.isFaceAlgorithm = true; } manager.SendAlgorithmSet(request.algorithminfo, identity); ManagerHelp.UpSend.Add("Algorithm"); } else { manager.SendAlgorithmRN(Models.Algorithm.Command.CONFIGURE_REP, null, 1); } } else { //向陆地端响应算法请求 manager.SendAlgorithmRN(Models.Algorithm.Command.CONFIGURE_REP, null, result); } } else { //向陆地端响应算法请求 manager.SendAlgorithmRN(Models.Algorithm.Command.CONFIGURE_REP, null, result); } break; #endregion case Models.Algorithm.Command.QUERY_REQ: #region 陆地端发送算法查询请求 //查询船舶端数据库获取所有算法数据 var algorithms = ProtoBDManager.AlgorithmQuery(true); //返回给陆地端 manager.SendAlgorithmRN(Models.Algorithm.Command.QUERY_REP, algorithms); break; #endregion case Models.Algorithm.Command.CONFIGURE_REP: if (ManagerHelp.UpSend.Where(c => c == "Algorithm").Any()) { //向陆地端响应请求 manager.SendAlgorithmRN(Models.Algorithm.Command.CONFIGURE_REP, null, algorithm.algorithmresponse.result); ManagerHelp.UpSend.Remove("Algorithm"); } else { ManagerHelp.AlgorithmResult = algorithm.algorithmresponse.result.ToString(); } if (ManagerHelp.IsShipPort) { //算法配置成功后把船状态推送给当前算法 if (algorithm.algorithmresponse.result == 0) { var ship = ProtoBDManager.StatusQuery(); manager.SendStatusSet(ship, StatusRequest.Type.SAIL, fromId); SendCrew(); } } break; case Models.Algorithm.Command.QUERY_REP: if (algorithm.algorithmresponse != null && algorithm.algorithmresponse.result == 0 && algorithm.algorithmresponse.configures != null) { ManagerHelp.AlgorithmReponse = JsonConvert.SerializeObject(algorithm.algorithmresponse.configures); } break; default: break; } }
/// <summary> /// 保存数据 /// </summary> /// <param name="xml"></param> /// <param name="alarm"></param> public void AlarmData(string xml, AlarmInfo alarm) { try { string shipId = xml; if (ManagerHelp.IsShipPort) { shipId = ProtoBDManager.StatusQuery().Id; //船舶端接收到的是陆地端的响应 if (xml != "") { ManagerHelp.LandResponse.Add(alarm); return; } } var dic = ManagerHelp.ReviceAlarms.FirstOrDefault(c => c.Id == shipId); if (dic == null) { ManagerHelp.ReviceAlarms = new List <MeterAsyncQueue>(); List <AlarmCache> list = new List <AlarmCache>() { new AlarmCache() { alarmInfos = alarm } }; ManagerHelp.ReviceAlarms.Add(new MeterAsyncQueue() { Id = shipId, alarmCaches = list }); } else { List <AlarmCache> list = dic.alarmCaches; if (ManagerHelp.IsShipPort) { AlarmCache cache = new AlarmCache() { alarmInfos = alarm }; list.Add(cache); dic.alarmCaches = list; } else { if (list.Where(c => c.alarmInfos.uid != alarm.uid).Any()) { AlarmCache cache = new AlarmCache() { alarmInfos = alarm }; list.Add(cache); dic.alarmCaches = list; } else { //响应船舶 string webId = alarm.cid.Split(':')[2]; string toId = shipId + ":" + webId; alarm.picture = Encoding.UTF8.GetBytes("1"); if ((int)alarm.type == 7) { alarm.type = AlarmInfo.Type.HELMET; } alarm.cid = "sss"; alarm.alarmposition = new List <Models.AlarmPosition>(); alarm.alarmposition.Add(new Models.AlarmPosition() { h = 1, x = 1, y = 1, w = 1 }); manager.SendAlarm("request", alarm, toId); } } } } catch (Exception ex) { } }