ClientNode.cs 4.2 KB
using System;
using System.Collections.Generic;

namespace DeviceLibrary
{
    /// <summary>
    /// 客户端的节点
    /// </summary>
    public class ClientNode : Node
    {
        private string rfid = "00";

        /// <summary>
        /// RFID
        /// </summary>
        public string RFID
        {
            set
            {
                //if (value.Length < 2)
                //    rfid = value.PadLeft(2, '0');
                //else
                rfid = value;
            }
            get
            {
                return rfid;
            }
        }

        /// <summary>
        /// 小车名称
        /// </summary>
        public string AgvName { set; get; }

        /// <summary>
        /// 线体名(佳世达)
        /// </summary>
        public string LineName { set; get; }


        public ClientLevel Level { get; set; } = ClientLevel.Low;


        public string Mark { get; set; } = "";



        public string AliceName { get; set; }

        /// <summary>
        /// 查看节点状态是否更新
        /// </summary>
        /// <returns></returns>
        public bool CheckNodeStateChanged(ClientNode node)
        {
            if (!Mark.Equals(node.Mark) ||
                !StateEquals(node.GetState()) ||
                !Level.Equals(node.Level) || RFID != node.RFID)
            {
                Mark = node.Mark;
                nodeStatus = node.GetState();
                Level = node.Level;
                RFID = node.RFID;
                return true;
            }
            else
            {
                return false;
            }
        }
        /// <summary>
        /// 客户端节点
        /// </summary>
        /// <param name="name"></param>
        /// <param name="ip"></param>
        /// <param name="isUse"></param>
        public ClientNode(string name, string aliceName, string lineName, bool isUse) : base(name, isUse)
        {
            LineName = lineName;
            AliceName = aliceName;
            RFID = rfid;
            AgvName = "";
            Online = false;
            IsUse = isUse;
        }
        /// <summary>
        /// 客户端节点
        /// </summary>
        /// <param name="name"></param>
        /// <param name="rfid"></param>
        /// <param name="action"></param>
        /// <param name="level"></param>
        public ClientNode(string name, string rfid = "", eNodeStatus status = eNodeStatus.None, string mark = "", ClientLevel level = ClientLevel.Low) : base(name)
        {

            RFID = rfid;
            Mark = mark;
            Level = level;
            nodeStatus = status;
            AgvName = "";
        }

        /// <summary>
        /// 节点状态的文本形式
        /// </summary>
        /// <returns></returns>
        public string StatetText()
        {
            string s = string.Format("[Name={0}, NodeStatus={1}, RFID={2},ClientLevel ={3}]", Name, nodeStatus.ToString(), RFID, Level.ToString());
            return s;
        }
        protected void UpdateDisplayBoard()
        {
            try
            {
                if (!Online)
                    displayBoard.Add(AliceName, "agv." + Name + ".OffLine", "离线");
                if (!IsUse)
                    displayBoard.Add(AliceName, "agv." + Name + ".IsUse", "调用关闭");
                displayBoard.UpdateAlarmMsg();
            }
            catch (Exception ex)
            {
                Common.LogUtil.error(Name + "上报节点信息失败" + ex.Message + ex.StackTrace);
            }
        }

        public string[] ToRow()
        {
            //节点,IP,动作,RFID,AGV名称,在线,调用,清除AGV
            List<string> list = new List<string>();
            list.Add(LineName);
            list.Add(nodeStatus.ToString());
            list.Add(Level.ToString());
            list.Add(RFID);
            list.Add(Online ? "在线" : "离线");
            list.Add(IsUse ? "是" : "否");
            return list.ToArray();
        }

        /// <summary>
        /// 脱机
        /// </summary>
        public void Offline()
        {
            RFID = "00";
            nodeStatus = eNodeStatus.None;
            AgvName = "";
            Online = false;
        }

    }
}