AgvClient.cs 4.7 KB
using BLL;
using OnlineStore.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OnlineStore.DeviceLibrary
{
    public class AgvClient
    {
        private static string ServerIp = ConfigAppSettings.GetValue(Setting_Init.AgvServerIp);
        //private string NodeName = "";
        private static Client agvClient = null;
        public static Dictionary<string, Asa.Actions> actionMap = new Dictionary<string, Asa.Actions>();
        public static   List<string> NodeList = new List<string>();
        public static  void Init( )
        {
            try
            {
              //  this.NodeName = nodeID;
                if (agvClient == null)
                {
                    agvClient = new Client(ServerIp); 
                }
                actionMap = new Dictionary<string, Asa.Actions>();
                foreach(string key in NodeList)
                {
                    actionMap.Add(key, Asa.Actions.ClientClose);
                }
                agvClient.Info += AgvClient_Info;
                agvClient.Log += AgvClient_Log;
                agvClient.Connected += AgvClient_Connected;
                agvClient.Action += AgvClient_Action;
              
                agvClient.Connect();
            }
            catch (Exception ex)
            {
                LogUtil.error("初始化agvClient " + ServerIp + " 出错:" + ex.ToString());
            }
        }
        internal static  bool ISConnected()
        {
            if (agvClient == null)
            {
                return false;
            } 
            return agvClient.IsConn;
        }
        /// <summary>
        ///02 发送RFID
        /// </summary>
        /// <param name="NodeName"></param>
        internal static void SendRFID(string NodeName, byte[] data)
        {
            agvClient.SendRFID(NodeName, data);
        
        }  
        /// <summary>
            /// 10 准备空车
            /// </summary>
            /// <param name="NodeName"></param>
        internal static void ReadyEmpty(string NodeName)
        {
            agvClient.ReadyEmpty(NodeName);
        }
        /// <summary>
        /// 11 准备小车带料架
        /// </summary>
        /// <param name="NodeName"></param>
        internal static void ReadyShelf(string NodeName)
        {
            agvClient.ReadyShelf(NodeName);
        }
        /// <summary>
        /// 12  可以进入
        /// </summary>
        /// <param name="NodeName"></param>
        internal static void MayEnter(string NodeName)
        {
            agvClient.MayEnter(NodeName);
        }
        /// <summary>
        ///13  完成进入
        /// </summary>
        /// <param name="NodeName"></param>
        internal static void FinishEnter(string NodeName)
        {
            agvClient.FinishEnter(NodeName);
        }

        /// <summary>
        /// 14 可以出去
        /// </summary>
        /// <param name="NodeName"></param>
        internal static void MayOut(string NodeName)
        {
            agvClient.MayOut(NodeName);
        }
        /// <summary>
        ///17 小车离开
        /// </summary>
        /// <param name="NodeName"></param>
        internal static void GetOut(string NodeName)
        {
            agvClient.GetOut(NodeName);
        }


        private static bool AgvClient_Action(string name, Asa.Actions action)
        {
            if (actionMap.ContainsKey(name))
            {
                actionMap[name] = action;
            }
            else
            {
                actionMap.Add(name, action);
            }
            return LineManager.Line.FeedAGVProcess(name, action);
             
        }

        private static void AgvClient_Connected()
        {
            agvClient.SetNodeID(NodeList.ToArray());
        }

        private static void AgvClient_Log(string s)
        {
            LogUtil.info("AGV "+ ServerIp + " Log:" + s);
        }

        private static void AgvClient_Info(string s)
        { 
            LogUtil.info("AGV "+ ServerIp + " Info:" + s);
        }
        public static Asa.Actions GetAction(string NodeName)
        {
            if (actionMap.ContainsKey(NodeName))
            {
                return actionMap[NodeName];
            }
            return Asa.Actions.ClientClose;
        }
        public static  void Dispose()
        {
            try
            {
                if (agvClient != null)
                {
                    agvClient.Close();
                }
            }
            catch (Exception ex)
            {
                LogUtil.error("释放 agvClient "+ ServerIp + " 出错:" + ex.ToString());
            }
        }
    }
}