123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501 |
- using Aitex.Core.UI.MVVM;
- using Aitex.Core.Util;
- using Aitex.Core.Utilities;
- using MECF.Framework.Common.DataCenter;
- using MECF.Framework.Common.Equipment;
- using MECF.Framework.Common.OperationCenter;
- using OpenSEMI.ClientBase;
- using System;
- using System.Collections.Concurrent;
- using System.Collections.Generic;
- using System.Linq;
- using System.Reflection;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Input;
- using Aitex.Core.RT.Log;
- using MessageBox = Xceed.Wpf.Toolkit.MessageBox;
- using PageSCValue = MECF.Framework.UI.Core.View.Common.PageSCValue;
- using Prism.Mvvm;
- namespace CyberX8_MainPages.ViewModels
- {
- public enum FACommunicationState
- {
- Disabled,
- Enabled,
- EnabledNotCommunicating,
- EnabledCommunicating,
- WaitCRA,
- WaitDelay,
- WaitCRFromHost,
- }
- public enum FAControlState
- {
- Unknown,
- EquipmentOffline,
- AttemptOnline,
- HostOffline,
- OnlineLocal,
- OnlineRemote,
- }
- public enum FAControlSubState
- {
- Local,
- Remote,
- }
- public enum FASpoolingState
- {
- Active = 1,
- Inactive
- }
- public class FACommandName
- {
- public const string FAEnable = "FAEnable";
- public const string FADisable = "FADisable";
- public const string FAOnline = "FAOnline";
- public const string FAOffline = "FAOffline";
- public const string FALocal = "FALocal";
- public const string FARemote = "FARemote";
- public const string FAEnableSpooling = "FAEnableSpooling";
- public const string FADisableSpooling = "FADisableSpooling";
- public const string FASendTerminalMessage = "FASendTerminalMessage";
- }
- public class FAViewModel : BindableBase
- {
- protected ConcurrentBag<string> _subscribedKeys = new ConcurrentBag<string>();
- protected Func<object, bool> _isSubscriptionAttribute;
- protected Func<MemberInfo, bool> _hasSubscriptionAttribute;
- private class DataName
- {
- public const string CommunicationStatus = "CommunicationStatus";
- public const string ControlStatus = "ControlStatus";
- public const string ControlSubStatus = "ControlSubStatus";
- public const string SpoolingState = "SpoolingState";
- public const string SpoolingActual = "SpoolingActual";
- public const string SpoolingTotal = "SpoolingTotal";
- public const string SpoolingFullTime = "SpoolingFullTime";
- public const string SpoolingStartTime = "SpoolingStartTime";
- public const string IsSpoolingEnable = "IsSpoolingEnable";
- //EFEM
- }
- public FAViewModel()
- {
- ConfigFeedback = new PageSCFA();
- ConfigSetPoint = new PageSCFA();
- SetConfigCommand = new DelegateCommand<object>(SetConfig);
- InvokeCommand = new DelegateCommand<object>(Invoke);
- Initialize();
- }
- protected void Initialize()
- {
- _isSubscriptionAttribute = attribute => attribute is SubscriptionAttribute;
- _hasSubscriptionAttribute = mi => mi.GetCustomAttributes(false).Any(_isSubscriptionAttribute);
- Parallel.ForEach(this.GetType().GetProperties().Where(_hasSubscriptionAttribute),
- property =>
- {
- SubscriptionAttribute subscription = property.GetCustomAttributes(false).First(_isSubscriptionAttribute) as SubscriptionAttribute;
- string key = subscription.ModuleKey;
- if (!_subscribedKeys.Contains(key))
- _subscribedKeys.Add(key);
- });
- _timer = new PeriodicJob(200, this.OnTimer, "UIUpdaterThread - " + GetType().Name, true);
- ConfigSetPoint.Update(QueryDataClient.Instance.Service.PollConfig(ConfigSetPoint.GetKeys()));
- }
- #region subscrib
- [Subscription(DataName.IsSpoolingEnable, ModuleNameString.System)]
- public bool IsSpoolingEnable
- {
- get { return _isSpoolingEnable; }
- set
- {
- IsEnableSpoolingEnableButton = !value;
- IsEnableSpoolingDisableButton = value;
- _isSpoolingEnable = value;
- }
- }
- private bool _isSpoolingEnable = false;
- [Subscription("System.SpoolingState")]
- public string SpoolingState
- {
- get;
- set;
- }
- [Subscription(DataName.SpoolingActual, ModuleNameString.System)]
- public string SpoolingActual
- {
- get;
- set;
- }
- [Subscription(DataName.SpoolingTotal, ModuleNameString.System)]
- public string SpoolingTotal
- {
- get;
- set;
- }
- [Subscription(DataName.SpoolingFullTime, ModuleNameString.System)]
- public string SpoolingFullTime
- {
- get;
- set;
- }
- [Subscription(DataName.SpoolingStartTime, ModuleNameString.System)]
- public string SpoolingStartTime
- {
- get;
- set;
- }
- [Subscription(DataName.ControlStatus, ModuleNameString.System)]
- public string HostControlStatus
- {
- get { return _hostControlStatus; }
- set
- {
- IsEnableOnlineButton = FACommunicationState == FACommunicationState.EnabledCommunicating && (value == FAControlState.Unknown.ToString() || value == FAControlState.EquipmentOffline.ToString());
- IsEnableOfflineButton = FACommunicationState == FACommunicationState.EnabledCommunicating && (value == FAControlState.Unknown.ToString() || value != FAControlState.EquipmentOffline.ToString());
- IsEnableRemoteButton = FACommunicationState == FACommunicationState.EnabledCommunicating&&value==FAControlState.OnlineLocal.ToString();
- IsEnableLocalButton = FACommunicationState == FACommunicationState.EnabledCommunicating && value == FAControlState.OnlineRemote.ToString();
- _hostControlStatus = value;
- }
- }
- private string _hostControlStatus;
- [Subscription(DataName.CommunicationStatus, ModuleNameString.System)]
- public string HostCommunicationStatus
- {
- get { return _hostCommunicationStatus; }
- set
- {
- if(_hostCommunicationStatus == FACommunicationState.Disabled.ToString())
- {
- IsEnableEnableButton = true;
- IsEnableDisableButton = false;
- }
- else
- {
- IsEnableEnableButton = false;
- IsEnableDisableButton = true;
- }
- _hostCommunicationStatus = value;
- }
- }
- private string _hostCommunicationStatus;
- #endregion
- #region logic
- public FACommunicationState FACommunicationState
- {
- get
- {
- return string.IsNullOrEmpty(HostCommunicationStatus) ? FACommunicationState.Disabled
- : (FACommunicationState)Enum.Parse(typeof(FACommunicationState), HostCommunicationStatus);
- }
- }
- public FAControlState FAControlState
- {
- get
- {
- return string.IsNullOrEmpty(HostControlStatus) ? FAControlState.Unknown
- : (FAControlState)Enum.Parse(typeof(FAControlState), HostControlStatus);
- }
- }
- //Disabled,
- //Enabled,
- //EnabledNotCommunicating,
- //EnabledCommunicating,
- //WaitCRA,
- //WaitDelay,
- //WaitCRFromHost,
- public bool IsEnableEnableButton
- {
- get { return _isEnableEnableButton; }
- set { SetProperty(ref _isEnableEnableButton, value); }
- }
- private bool _isEnableEnableButton = false;
- public bool IsEnableDisableButton
- {
- get { return _isEnableDisableButton; }
- set { SetProperty(ref _isEnableDisableButton, value); }
- }
- private bool _isEnableDisableButton;
- //Unknown,
- //EquipmentOffline,
- //AttemptOnline,
- //HostOffline,
- //OnlineLocal,
- //OnlineRemote,
- public bool IsEnableOnlineButton
- {
- get { return _isEnableOnlineButton; }
- set { SetProperty(ref _isEnableOnlineButton, value); }
- }
- private bool _isEnableOnlineButton;
- public bool IsEnableOfflineButton
- {
- get { return _isEnableOfflineButton; }
- set { SetProperty(ref _isEnableOfflineButton, value); }
- }
- private bool _isEnableOfflineButton;
- public bool IsEnableLocalButton
- {
- get { return _isEnableLocalButton; }
- set { SetProperty(ref _isEnableLocalButton, value); }
- }
- private bool _isEnableLocalButton;
- public bool IsEnableRemoteButton
- {
- get { return _isEnableRemoteButton; }
- set { SetProperty(ref _isEnableRemoteButton,value); }
- }
- private bool _isEnableRemoteButton;
- public bool IsEnableSpoolingEnableButton
- {
- get
- {
- return _isEnableSpoolingEnableButton;//SpoolingState == FASpoolingState.Inactive.ToString();
- }
- set
- {
- SetProperty(ref _isEnableSpoolingEnableButton, value);
- }
- }
- private bool _isEnableSpoolingEnableButton;
- public bool IsEnableSpoolingDisableButton
- {
- get
- {
- return _isEnableSpoolingDisableButton;// SpoolingState == FASpoolingState.Active.ToString();
- }
- set
- {
- SetProperty(ref _isEnableSpoolingDisableButton, value);
- }
- }
- private bool _isEnableSpoolingDisableButton;
- #endregion
- [IgnorePropertyChange]
- public PageSCFA ConfigFeedback
- {
- get;
- set;
- }
- [IgnorePropertyChange]
- public PageSCFA ConfigSetPoint
- {
- get;
- set;
- }
- [IgnorePropertyChange]
- public ICommand SetConfigCommand
- {
- get;
- private set;
- }
- [IgnorePropertyChange]
- public ICommand InvokeCommand
- {
- get;
- private set;
- }
- PeriodicJob _timer;
- //protected ConcurrentBag<string> _subscribedKeys = new ConcurrentBag<string>();
- //protected Func<object, bool> _isSubscriptionAttribute;
- //protected Func<MemberInfo, bool> _hasSubscriptionAttribute;
- private void Invoke(object param)
- {
- InvokeClient.Instance.Service.DoOperation("FACommand", ((string)param).Split(',')[1]);
- }
- void SetConfig(object param)
- {
- object[] sc = (object[])param;
- InvokeClient.Instance.Service.DoOperation("System.SetConfig", sc[0].ToString(), sc[1].ToString());
- UpdateConfig();
- }
- public void UpdateConfig()
- {
- ConfigFeedback.Update(QueryDataClient.Instance.Service.PollConfig(ConfigFeedback.GetKeys()));
- this.RaisePropertyChanged("ConfigFeedback");
- }
- private bool OnTimer()
- {
- try
- {
- Poll();
- UpdateConfig();
- }
- catch
- {
- }
- return true;
- }
- private void Poll()
- {
- if (_subscribedKeys.Count > 0)
- {
- Dictionary<string, object> result = QueryDataClient.Instance.Service.PollData(_subscribedKeys);
- if (result == null)
- {
- return;
- }
- if (result.Count != _subscribedKeys.Count)
- {
- string unknowKeys = string.Empty;
- foreach (string key in _subscribedKeys)
- {
- if (!result.ContainsKey(key))
- {
- unknowKeys += key + "\r\n";
- }
- }
- //System.Diagnostics.Debug.Assert(false, unknowKeys);
- }
- UpdateValue(result);
- }
- }
- void UpdateValue(Dictionary<string, object> data)
- {
- if (data == null)
- return;
- UpdateSubscribe(data, this);
- }
- void UpdateSubscribe(Dictionary<string, object> data, object target, string module = null)
- {
- Parallel.ForEach(target.GetType().GetProperties().Where(_hasSubscriptionAttribute),
- property =>
- {
- PropertyInfo pi = (PropertyInfo)property;
- SubscriptionAttribute subscription = property.GetCustomAttributes(false).First(_isSubscriptionAttribute) as SubscriptionAttribute;
- string key = subscription.ModuleKey;
- key = module == null ? key : string.Format("{0}.{1}", module, key);
- if (_subscribedKeys.Contains(key) && data.ContainsKey(key))
- {
- try
- {
- var convertedValue = Convert.ChangeType(data[key], pi.PropertyType);
- var originValue = Convert.ChangeType(pi.GetValue(target, null), pi.PropertyType);
- if (originValue != convertedValue)
- {
- pi.SetValue(target, convertedValue, null);
- RaisePropertyChanged(pi.Name);
- }
- }
- catch
- {
- }
- }
- });
- }
- }
- public class PageSCFA : PageSCValue
- {
- public string Fa_ConnectionMode { get; set; }
- public string FA_LocalIpAddress { get; set; }
- public int FA_LocalPortNumber { get; set; }
- public string FA_RemoteIpAddress { get; set; }
- public int FA_RemotePortNumber { get; set; }
- public int FA_T3Timeout { get; set; }
- public int FA_T5Timeout { get; set; }
- public int FA_T6Timeout { get; set; }
- public int FA_T7Timeout { get; set; }
- public int FA_T8Timeout { get; set; }
- public bool FA_EnableSpooling { get; set; }
- public int FA_LinkTestInterval { get; set; }
- public string FA_DefaultCommunicationState { get; set; }
- public string FA_DefaultControlState { get; set; }
- public string FA_DefaultControlSubState { get; set; }
- public string FA_DeviceId { get; set; }
- public int FA_SpoolingCapability { get; set; }
- public int FA_SpoolingMaxTransmit { get; set; }
- public string FA_SpoolingFullOverWrite { get; set; }
- public List<string> FA_SpoolingFullOverWriteLst
- {
- get { return new List<string>() { "True", "False" }; }
- }
- public List<string> FA_CommunicateStateLst
- {
- get { return new List<string>() {"Enabled","Disabled" };}
- }
- public List<string> FA_ControlStateLst
- {
- get { return new List<string>() { "Online", "Offline" }; }
- }
- public List<string> FA_ControlSubStateLst
- {
- get { return new List<string>() { "Local", "Remote" }; }
- }
- public PageSCFA()
- {
- UpdateKeys(typeof(PageSCFA).GetProperties());
- }
- }
- }
|