Beispiel #1
0
        private JsonEntity _PingCheck(bool isMaster, string clientId, List <int[]> taskState)
        {
            using (RLib.DB.DbConn dbconn = Pub.GetConn())
            {
                var nodemodel = nodedal.Detail(dbconn, clientId);
                #region 节点绑定及心跳
                if (nodemodel == null)
                {
                    return(new JsonEntity()
                    {
                        code = -10001, msg = "Ping成功,但节点未绑定!"
                    });
                }
                if (isMaster)
                {
                    if (nodemodel.NodeType == 0)
                    {
                        return(new JsonEntity()
                        {
                            code = -10001, msg = "Ping成功,但节点类型错误!"
                        });
                    }
                    if (nodemodel.NodeType == -1)
                    {
                        nodedal.SetNodeType(dbconn, nodemodel.NodeId, 1);
                    }
                }
                else
                {
                    if (nodemodel.NodeType == 1)
                    {
                        return(new JsonEntity()
                        {
                            code = -10001, msg = "Ping成功,但节点类型错误!"
                        });
                    }
                    if (nodemodel.NodeType == -1)
                    {
                        nodedal.SetNodeType(dbconn, nodemodel.NodeId, 0);
                    }
                }
                nodedal.UpdateLastHeart(dbconn, nodemodel.NodeId);
                #endregion

                #region 任务状态和版本
                var nodetasks = taskdal.NodeTaskSum(dbconn, nodemodel.NodeId);
                List <Model.TaskBinding> needupdate = new List <Model.TaskBinding>();
                foreach (var a in nodetasks)
                {
                    int ns = 0, nv = a.RunVersion;
                    var nsitem = taskState.FirstOrDefault(x => x[0] == a.TaskId);
                    if (nsitem != null)
                    {
                        ns = 1;
                        nv = nsitem[1];
                    }
                    if (a.ServerState != ns || a.RunVersion != nv)
                    {
                        a.ServerState = ns;
                        a.RunVersion  = nv;
                        needupdate.Add(a);
                    }
                }
                taskdal.UpdateNodeServerState(dbconn, needupdate);
                #endregion

                int newcmdcount = cmddal.HasNewCmd(dbconn, nodemodel.NodeId);
                return(new JsonEntity()
                {
                    code = 1, data = new Ruanal.Core.ApiSdk.PingResult()
                    {
                        HasCmd = newcmdcount
                    }
                });
            }
        }