using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; using Misc; using System.Windows.Threading; using FlyADBase; using FObjBase; namespace Flyad7_WPF { public class FlyADClientUI : INotifyPropertyChanged { #region 延时推送 MARKNO const int MARKNO_PUSH_ACCESS = 2; #endregion public DateTime Now { get; set; } public int Position { get; set; } public int Speed { get; set; } public int Position2 { get; set; } public int Speed2 { get; set; } public int AD { get; set; } private DispatcherTimer timer = new DispatcherTimer(); private FlyAD7 flyad; public FlyADClientUI(FlyAD7 flyad) { Init(flyad); } void Init(FlyAD7 flyad) { this.flyad = flyad; timer.Interval = TimeSpan.FromSeconds(0.1); timer.Tick += new EventHandler(timer_Tick); timer.Start(); } void timer_Tick(object sender, EventArgs e) { Position = flyad.Position; Position2 = flyad.Position2; AD = flyad.AD; Speed = flyad.Speed; Speed2 = flyad.Speed2; Now = flyad.Now; } public event PropertyChangedEventHandler PropertyChanged; class AsyncDelegateObj { public AsyncCBHandler asyncDelegate; public object asyncContext; } List setAccessRetList = new List(); PropertyChangedEventHandler mFlyAD_PropertyChangedHandler = null; /// /// 设置授权码 返回类型typeof(AccessInfo) /// /// /// /// public void SetAccess(byte[] access, AsyncCBHandler asyncDelegate, object asyncContext) { flyad.SetAccess(access); setAccessRetList.Add(new AsyncDelegateObj() { asyncDelegate = asyncDelegate, asyncContext = asyncContext }); if (mFlyAD_PropertyChangedHandler == null) { mFlyAD_PropertyChangedHandler = new PropertyChangedEventHandler(delegate (object sender, PropertyChangedEventArgs e) { if ((e.PropertyName == nameof(flyad.AreaStatus)) || (e.PropertyName == nameof(flyad.Code)) || (e.PropertyName == nameof(flyad.Surplus)) || (e.PropertyName == nameof(flyad.Access)) || (e.PropertyName == nameof(flyad.AreaRet))) { FObjBase.PollModule.Current.Poll_JustOnce( new PollModule.PollHandler(delegate () { flyad.PropertyChanged -= mFlyAD_PropertyChangedHandler; AccessInfo ainfo = new AccessInfo() { status = (AREA_STATUS)flyad.AreaStatus, ret = (AREA_ERR)flyad.AreaRet, surplus = flyad.Surplus, code = flyad.Code, access = flyad.Access }; for (int i = 0; i < setAccessRetList.Count(); i++) { setAccessRetList[i].asyncDelegate(setAccessRetList[i].asyncContext, ainfo); } setAccessRetList.Clear(); }), this, MARKNO_PUSH_ACCESS); }; }); } flyad.PropertyChanged += mFlyAD_PropertyChangedHandler; } /// /// 设置初始化 返回类型typeof(AccessInfo) /// public void InitArea(AsyncCBHandler asyncDelegate, object asyncContext) { flyad.InitArea(); setAccessRetList.Add(new AsyncDelegateObj() { asyncDelegate = asyncDelegate, asyncContext = asyncContext }); if (mFlyAD_PropertyChangedHandler == null) { mFlyAD_PropertyChangedHandler = new PropertyChangedEventHandler(delegate (object sender, PropertyChangedEventArgs e) { if ((e.PropertyName == nameof(flyad.AreaStatus)) || (e.PropertyName == nameof(flyad.Code)) || (e.PropertyName == nameof(flyad.Surplus)) || (e.PropertyName == nameof(flyad.Access)) || (e.PropertyName == nameof(flyad.AreaRet))) { FObjBase.PollModule.Current.Poll_JustOnce( new PollModule.PollHandler(delegate () { flyad.PropertyChanged -= mFlyAD_PropertyChangedHandler; AccessInfo ainfo = new AccessInfo() { status = (AREA_STATUS)flyad.AreaStatus, ret = (AREA_ERR)flyad.AreaRet, surplus = flyad.Surplus, code = flyad.Code, access = flyad.Access }; for (int i = 0; i < setAccessRetList.Count(); i++) { setAccessRetList[i].asyncDelegate(setAccessRetList[i].asyncContext, ainfo); } setAccessRetList.Clear(); }), this, MARKNO_PUSH_ACCESS); }; }); } flyad.PropertyChanged += mFlyAD_PropertyChangedHandler; } } /// /// 授权码包 /// public class AccessInfo { /// /// 密码区状态 /// public AREA_STATUS status; /// /// 操作结果 /// public AREA_ERR ret; /// /// 序列码 /// public byte[] code = new byte[7]; /// /// 剩余时间 /// public int surplus; /// /// 授权码 /// public byte[] access = new byte[8]; } }