Beispiel #1
0
 /// <summary>
 /// 组件初使化
 /// 发送组件注册
 /// 发送组件查询
 /// 收到开启组件后发送船状态设置
 /// 发送设备信息
 /// 收到设备成功消息后发送算法配置
 /// 发送船员信息
 /// </summary>
 public void InitData()
 {
     //发送组件注册请求
     assembly.SendComponentSign("WEB", "");
     Task.Factory.StartNew(state =>
     {
         while (ManagerHelp.Cid == "")
         {
             Thread.Sleep(1000);
         }
         //发送查询请求
         assembly.SendComponentQuery(ManagerHelp.Cid);
         Task.Factory.StartNew(state =>
         {
             while (ManagerHelp.ComponentReponse == "")
             {
                 Thread.Sleep(1000);
             }
             InitStatus();
             InitDevice();
             ManagerHelp.ComponentReponse = "";
             if (ManagerHelp.isInit)
             {
                 Task.Factory.StartNew(t =>
                 {
                     while (ManagerHelp.DeviceResult == "")
                     {
                         Thread.Sleep(1000);
                     }
                     //发送算法信息
                     InitAlgorithm();
                     //发送船员信息
                     InitCrew();
                     ManagerHelp.isInit       = false;
                     ManagerHelp.DeviceResult = "";
                 }, TaskCreationOptions.LongRunning);
             }
         }, TaskCreationOptions.LongRunning);
     }, TaskCreationOptions.LongRunning);
     ManagerHelp.isInit  = true;
     ManagerHelp.atWorks = new List <AtWork>();
     ManagerHelp.UpSend  = new List <string>();
 }
        public IActionResult Load()
        {
            List <ComponentViewModel> list = new List <ComponentViewModel>();
            string identity = "";

            if (base.user.IsLandHome)
            {
                identity = base.user.ShipId;
            }
            List <Models.Component> components = new List <Models.Component>();
            SendDataMsg             assembly   = new SendDataMsg();

            assembly.SendComponentQuery(identity);
            ProtoBuffer.Models.ComponentResponse response = new ProtoBuffer.Models.ComponentResponse();
            //Task.WhenAny();
            bool flag = true;

            new TaskFactory().StartNew(() =>
            {
                while (ManagerHelp.ComponentReponse == "" && flag)
                {
                    Thread.Sleep(100);
                }
            }).Wait(3000);
            flag = false;
            try
            {
                if (ManagerHelp.ComponentReponse != "")
                {
                    response = JsonConvert.DeserializeObject <ProtoBuffer.Models.ComponentResponse>(ManagerHelp.ComponentReponse);
                    ManagerHelp.ComponentReponse = "";
                    if (response.result == 0 && response.componentinfos != null && response.componentinfos.Count > 0)
                    {
                        SaveData(response.componentinfos);
                        foreach (var item in response.componentinfos)
                        {
                            if (item.componentid == ManagerHelp.ComponentId)
                            {
                                continue;
                            }
                            ComponentViewModel model = new ComponentViewModel()
                            {
                                Id   = item.componentid,
                                name = item.cname,
                                type = (int)item.type
                            };
                            list.Add(model);
                        }
                    }
                }
            }
            catch (Exception)
            {
            }

            var data = new
            {
                code = 0,
                data = list
            };

            return(new JsonResult(data));
        }
Beispiel #3
0
        /// <summary>
        /// 设备界面显示
        /// </summary>
        /// <param name="isShow"></param>
        /// <param name="id">不为空时是陆地端跳转</param>
        /// <param name="shipName"></param>
        /// <returns></returns>
        public IActionResult Index(bool isShow = false, string id = "", string shipName = "")
        {
            if (!string.IsNullOrEmpty(id))
            {
                string browsertoken = HttpContext.Request.Cookies["token"];
                if (browsertoken != null)
                {
                    string urlstr = HttpContext.Session.GetString(browsertoken);
                    user            = JsonConvert.DeserializeObject <UserToken>(urlstr);
                    user.ShipId     = id;
                    user.IsLandHome = true;
                    user.ShipName   = shipName;
                    string userStr = JsonConvert.SerializeObject(user);
                    //将请求的url注册
                    HttpContext.Session.SetString(browsertoken, userStr);
                    //写入浏览器token
                    HttpContext.Response.Cookies.Append("token", browsertoken);
                }
                //陆地端过来不显示报警信息
                ManagerHelp.IsShowAlarm = false;
                ManagerHelp.isInit      = false;
                ViewBag.LoginName       = base.user.Name;
                ViewBag.ShipName        = base.user.ShipName;
                ViewBag.src             = "/Device/Index";
                ViewBag.layuithis       = "device";

                #region 缓存当前船下的组件信息,提供给设备,算法,船员,船状态操作
                assembly.SendComponentQuery(id);
                bool flag = true;
                new TaskFactory().StartNew(() =>
                {
                    while (ManagerHelp.ComponentReponse == "" && flag)
                    {
                        Thread.Sleep(1000);
                    }
                    if (ManagerHelp.ComponentReponse != "")
                    {
                        ProtoBuffer.Models.ComponentResponse response = JsonConvert.DeserializeObject <ProtoBuffer.Models.ComponentResponse>(ManagerHelp.ComponentReponse);
                        ManagerHelp.ComponentReponse = "";
                        List <ComponentToken> tokens = new List <ComponentToken>();
                        if (response.result == 0 && response.componentinfos != null)
                        {
                            foreach (var item in response.componentinfos)
                            {
                                ComponentToken token = new ComponentToken()
                                {
                                    Id = item.componentid,
                                    //CommId = item.commid,
                                    Name = item.cname,
                                    Type = (ComponentType)item.type
                                };
                                tokens.Add(token);
                            }
                        }
                        string com = JsonConvert.SerializeObject(tokens);
                        HttpContext.Session.SetString("comtoken", com);
                    }
                }).Wait(timeout);
                flag = false;
                #endregion
            }
            ViewBag.IsLandHome   = base.user.IsLandHome;
            ViewBag.IsShowLayout = isShow;
            ViewBag.IsSet        = base.user.EnableConfigure;
            return(View());
        }
Beispiel #4
0
        /// <summary>
        /// 陆地端获取船信息
        /// </summary>
        /// <returns></returns>
        public IActionResult LoadAll()
        {
            try
            {
                List <ShipViewModel> list = new List <ShipViewModel>();
                //var compents = _context.Component.Where(c => c.Type == ComponentType.XMQ).ToList();
                var compents = from a in _context.Component
                               join b in _context.Ship on a.ShipId equals b.Id into c
                               from d in c.DefaultIfEmpty()
                               where a.Type == ComponentType.XMQ
                               select new
                {
                    a.Cid,
                    a.ShipId,
                    a.Line,
                    d.Name,
                    d.Flag
                };

                foreach (var item in compents)
                {
                    ShipViewModel model = new ShipViewModel()
                    {
                        Id   = item.Cid,
                        Name = item.Name,
                        flag = item.Flag,
                        Line = item.Line == 0 ? true : false//默认离线
                    };
                    list.Add(model);
                }
                var comLine = compents.Where(c => c.Line == 0).ToList();
                Console.WriteLine("异步执行开始:" + DateTime.Now);
                new TaskFactory().StartNew(() =>
                {
                    Console.WriteLine("异步执行方法:" + DateTime.Now);
                    foreach (var item in comLine)
                    {
                        //根据当前XMQ的ID
                        assembly.SendComponentQuery(item.Cid);
                        Task.Factory.StartNew(state => {
                            while (ManagerHelp.ComponentReponse == "")
                            {
                                Thread.Sleep(10);
                            }
                            var webcom   = JsonConvert.DeserializeObject <ProtoBuffer.Models.ComponentResponse>(ManagerHelp.ComponentReponse);
                            string webId = "";
                            if (webcom != null && webcom.componentinfos.Count > 0)
                            {
                                var web = webcom.componentinfos.FirstOrDefault(c => c.type == ComponentInfo.Type.WEB);
                                if (web != null)
                                {
                                    webId = web.componentid;
                                }
                            }
                            if (webId != "")
                            {
                                assembly.SendStatusQuery(item.Cid + ":" + webId);
                                Task.Factory.StartNew(ss => {
                                    while (ManagerHelp.StatusReponse == "")
                                    {
                                        Thread.Sleep(10);
                                    }
                                    var response = JsonConvert.DeserializeObject <StatusResponse>(ManagerHelp.StatusReponse);
                                    if (response != null)
                                    {
                                        list.FirstOrDefault(c => c.Id == item.Cid).flag = response.flag;
                                        LandSave(response, item.ShipId);
                                    }
                                }, TaskCreationOptions.LongRunning);
                            }
                        }, TaskCreationOptions.LongRunning);
                    }
                    Console.WriteLine("结束:" + DateTime.Now);
                }).Wait(5000);
                Console.WriteLine("完成:" + DateTime.Now);
                var result = new
                {
                    code  = 0,
                    data  = list,
                    isSet = base.user.EnableConfigure
                };
                return(new JsonResult(result));
            }
            catch (Exception ex)
            {
                _logger.LogError("陆地端获取船信息异常【LoadAll】" + ex.Message);
                return(new JsonResult(new { code = 1, msg = "获取数据失败!" + ex.Message }));
            }
        }