示例#1
0
        /// <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;
            }
        }
示例#2
0
        /// <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;
            }
        }
示例#3
0
 /// <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)
     {
     }
 }