| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267 | using Aitex.Core.Common;using Aitex.Core.RT.Event;using Aitex.Core.RT.Log;using Aitex.Core.RT.OperationCenter;using Aitex.Core.Util;using FabConnect.SecsGemInterface.Common.ToolModel;using log4net.Core;using MECF.Framework.Common.Equipment;using MECF.Framework.Common.SubstrateTrackings;using Mono.Security.Authenticode;using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Runtime.Serialization;using System.Text;using System.Threading.Tasks;using Venus_RT.HostWrapper;using static Aitex.Core.RT.Log.LOG;using static Mono.Security.X509.X520;namespace Venus_RT.FAs{    public class FaEvent    {        //public event Action<PostFAItem> PostEvent;        static Dictionary<string, PostFAItem> _eventDic = new Dictionary<string, PostFAItem>();        static FixSizeQueue<PostFAItem> _eventQueue;        PeriodicJob _eventJob;        private const string INFORMATION_EVENT = "INFORMATION_EVENT";        private const string WARNING_EVENT = "WARNING_EVENT";        private const string ALARM_EVENT = "ALARM_EVENT";        public void Initialize(string commonEventListXmlFile)        {            _eventJob = new PeriodicJob(100, this.PeriodicRun, "FaEventPeriodicJob", true);            _eventQueue = new FixSizeQueue<PostFAItem>(1000);            AddFaEvent(new PostFAItem(INFORMATION_EVENT, EventLevel.Information));            AddFaEvent(new PostFAItem(WARNING_EVENT, EventLevel.Warning));            AddFaEvent(new PostFAItem(ALARM_EVENT, EventLevel.Alarm));            try            {                EventDefine eventList = CustomXmlSerializer.Deserialize<EventDefine>(new FileInfo(commonEventListXmlFile));                foreach (var item in eventList.Items)                {                    _eventDic[item.EventEnum] = new PostFAItem();                    _eventDic[item.EventEnum].FaEventEnum = item.EventEnum;                    _eventDic[item.EventEnum].Description = item.Description;                    _eventDic[item.EventEnum].Level = item.Level;                    _eventDic[item.EventEnum].Source = item.Source;                    _eventDic[item.EventEnum].FaEventEnum = item.EventEnum;                }            }            catch (ArgumentNullException)            {                throw new ApplicationException("初始化EventManager没有设置Event列表文件");            }            catch (FileNotFoundException ex)            {                throw new ApplicationException("没有找到Event列表文件," + ex.Message);            }            catch (Exception ex)            {                throw new ApplicationException("EventDefine文件格式不对," + commonEventListXmlFile + ",\r\n" + ex.Message);            }        }        public void Terminate()        {            if (_eventJob != null)            {                _eventJob.Stop();                _eventJob = null;            }        }        public static void AddFaEvent(PostFAItem item)        {            if (_eventDic.ContainsKey(item.FaEventEnum))            {                return;            }            _eventDic[item.FaEventEnum] = item;        }        bool PeriodicRun()        {            PostFAItem FaEv;            while (_eventQueue.TryDequeue(out FaEv))            {                try                {                    InstanceOnOnEvent(FaEv);                }                catch (Exception ex)                {                }            }            return true;        }        private void InstanceOnOnEvent(PostFAItem obj)        {            if (obj.Level != EventLevel.Alarm)            {                Singleton<FaManager>.Instance.NotifyEvent(obj.FaEventEnum, obj.DVID, obj.ObjDVID);            }            else            {                Singleton<FaManager>.Instance.NotifyAlarm(obj.FaEventEnum, obj.DVID, obj.ObjDVID, obj.Description);            }        }        public static void SendHost(string module, string eventName, params object[] args)        {            if (!_eventDic.ContainsKey(eventName))            {                //LOG.Write(eEvent.INFO_FA, "Event name not registered, " + eventName);                return;            }            PostFAItem item = _eventDic[eventName].Clone();            item.Source = module;            item.Description = string.Format(_eventDic[eventName].Description, args);            if (!string.IsNullOrWhiteSpace(item.Source))            {                item.Description = item.Source + "  " + item.Description;            }            _eventQueue.Enqueue(item);        }        public static void SendHost(string module, string eventName, string description)        {            if (!_eventDic.ContainsKey(eventName))            {                //LOG.Write(eEvent.INFO_FA, "Event name not registered, " + eventName);                return;            }            PostFAItem item = _eventDic[eventName].Clone();            item.Source = module;            item.Description = description;            if (!string.IsNullOrWhiteSpace(item.Source))            {                item.Description = item.Source + "  " + item.Description;            }            _eventQueue.Enqueue(item);        }        public static void SendHost(string eventName, SerializableDictionary<string, string> dvid)        {            if (!_eventDic.ContainsKey(eventName))            {                return;            }            PostFAItem item = _eventDic[eventName].Clone();            item.Description = string.Format(_eventDic[eventName].Description);            item.DVID = dvid;            item.Source = _eventDic[eventName].Source;            _eventQueue.Enqueue(item);        }        public static void SendHost(string eventName, SerializableDictionary<string, object> dvid)        {            if (!_eventDic.ContainsKey(eventName))            {                return;            }            PostFAItem item = _eventDic[eventName].Clone(dvid);            item.Description = string.Format(_eventDic[eventName].Description);            item.ObjDVID = dvid;            item.Source = _eventDic[eventName].Source;            _eventQueue.Enqueue(item);        }        public static void FaPostAlarm(string module, string message)        {            SendHost(module, WARNING_EVENT, message);        }        public static void FaPostWarning(string module, string message)        {            SendHost(module, ALARM_EVENT, message);        }        public static void FaPostInfo(string module, string message)        {            SendHost(module, INFORMATION_EVENT, message);        }        public static void FaPostMessage(string module, string message, params object[] args)        {            SendHost(module, message,args);        }        public static void FaNotify(string eventName, SerializableDictionary<string, string> dvid)        {            SendHost(eventName, dvid);        }        public static void FaNotify(string eventName, SerializableDictionary<string, object> dvid)        {            SendHost(eventName, dvid);        }    }    public class PostFAItem    {        public string Source { get; set; }        public string FaEventEnum { get; set; }        public int Id { get; set; }        public string Explaination { get; set; }        public EventLevel Level { get; set; }        public string Description { get; set; }        public SerializableDictionary<string, string> DVID        {            get;            set;        }        public SerializableDictionary<string, object> ObjDVID        {            get;            set;        }        public PostFAItem Clone()        {            PostFAItem result = new PostFAItem();            result.Description = Description;            result.FaEventEnum = FaEventEnum;            result.Explaination = Explaination;            result.Id = Id;            result.Level = Level;            result.Source = Source;            result.DVID = DVID;            result.ObjDVID = ObjDVID;            return result;        }        public PostFAItem Clone(SerializableDictionary<string, object> objDvid)        {            PostFAItem result = new PostFAItem();            result.Description = Description;            result.FaEventEnum = FaEventEnum;            result.Explaination = Explaination;            result.Id = Id;            result.Level = Level;            result.Source = Source;            result.DVID = DVID;            result.ObjDVID = objDvid;            return result;        }        public PostFAItem()        {        }        public PostFAItem(string name, EventLevel level)        {            FaEventEnum = name;            Level = level;        }        public PostFAItem(string source, string name, string description, EventLevel level)        {            Source = source;            FaEventEnum = name;            Description = description;            Level = level;        }        public PostFAItem(string source, string name, string description)        {            Source = source;            FaEventEnum = name;            Description = description;        }    }}
 |