ClientNode.cs 4.0 KB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

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

        /// <summary>
        /// 节点名称
        /// </summary>
        public string Name { set; get; }
        /// <summary>
        /// IP地址
        /// </summary>
        public string IP { set; get; }
        /// <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 ClientAction Action { set; get; }
        /// <summary>
        /// 小车名称
        /// </summary>
        public string AgvName { set; get; }
        /// <summary>
        /// 在线
        /// </summary>
        public bool Online { set; get; }
        /// <summary>
        /// 是否可用
        /// </summary>
        public bool IsUse { set; get; }

        /// <summary>
        /// 节点位置的guid
        /// </summary>
        public string Pos_guid { set; get; }
        /// <summary>
        /// 节点位置名称
        /// </summary>
        public string Pos_name { get; set; }
        /// <summary>
        /// 节点位置坐标
        /// </summary>
        public PositionStru position;

        public string AliceName { get; set; }
        /// <summary>
        /// 客户端节点
        /// </summary>
        /// <param name="name"></param>
        /// <param name="ip"></param>
        /// <param name="isUse"></param>
        public ClientNode(string name, string ip, string aliceName, string pos_name, string pos_guid, bool isUse)
        {
            Name = name;
            IP = ip;
            AliceName = aliceName;
            RFID = rfid;
            Action = ClientAction.None;
            AgvName = "";
            Online = false;
            IsUse = isUse;
            this.Pos_name = pos_name;
            this.Pos_guid = pos_guid;
        }

        /// <summary>
        /// 客户端节点
        /// </summary>
        /// <param name="name"></param>
        /// <param name="rfid"></param>
        /// <param name="action"></param>
        /// <param name="level"></param>
        public ClientNode(string name, string rfid = "", ClientAction action = ClientAction.None)
        {
            Name = name;
            RFID = rfid;
            Action = action;
            AgvName = "";
            Online = false;
            IsUse = false;
        }

        /// <summary>
        /// 所有属性的文本形式
        /// </summary>
        /// <returns></returns>
        public string ToText()
        {
            string s = string.Format("Name={0}, Action={1}, RFID={2}", Name, Action, RFID);
            return s;
        }

        public string[] ToRow()
        {
            //节点,IP,动作,RFID,AGV名称,在线,调用,清除AGV
            string[] s = new string[9];
            s[0] = AliceName;
            s[1] = IP;
            // if (Online)
            //  {
            s[2] = string.Format("({0},{1})", position.X.ToString("f2"), position.Y.ToString("f2"));
            s[3] = Action.ToString();
            s[4] = RFID;
            s[5] = AgvName;
            // }
            s[6] = Online ? "在线" : "离线";
            s[7] = IsUse ? "是" : "否";
            s[8] = "清除";
            return s;
        }

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

        public virtual Job GetNewJob(Agv_Info agv)
        {
            return null;
        }
    }
}