using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; using FLY.Thick.Base.Common; using FLY.Thick.Base.IService; using Misc; using FlyADBase; using FObjBase; namespace FLY.Thick.Base.Server { public class GM_Fix : IGageMode, IFixService { #region IGageMode public CTRL_STATE GMState { get { return CTRL_STATE.FIX; } } public bool IsRunning { get; protected set; } #endregion #region IFixService public DateTime UpdateTime { get; private set; } #endregion /// /// 闲置时(IsRunning==false) 忽略数据 /// public bool IsIgnoreDataWhenIdle { get; set; } = true; FlyADBase.FlyAD7 mFlyAD; DynArea mDynArea; AD2ThkHandler Ad2Thk; GetFixDatasReponse reponse; public GM_Fix() { } public void Init(FlyADBase.FlyAD7 flyad, DynArea dynarea, AD2ThkHandler func_ad2thk) { mFlyAD = flyad; mDynArea = dynarea; Ad2Thk = func_ad2thk; flyad.TimeGridEvent += new FlyADBase.TimeGridEventHandler(flyad_TimeGridEvent); } /// /// 1s 的AD值,就只是用来显示到主界面左上面角而已 DynArea.AD /// List Data1s = new List(); void flyad_TimeGridEvent(object sender, FlyADBase.TimeGridEventArgs e) { DateTime dt = e.Time; TimeSpan ts = e.Ts; var datas = e.Data.ToArray(); //1秒数据, 大概而已 Data1s.AddRange(datas); if (TimeSpan.FromTicks(Data1s.Count * ts.Ticks) >= TimeSpan.FromSeconds(1)) { int ad = (int)Data1s.Average(); Data1s.Clear(); mDynArea.AD = ad; mDynArea.Thk = Ad2Thk(ad); } //转换为thick double[] thks = datas.Select((ad) => Ad2Thk(ad)).ToArray(); reponse = new GetFixDatasReponse() { ADs = datas, thicks = thks, time = dt, ts = ts }; UpdateTime = dt; } #region IGageMode public void Start() { IsRunning = true; } public void Stop() { IsRunning = false; } #endregion public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; public void GetFixDatas(AsyncCBHandler asyncDelegate, object asyncContext) { asyncDelegate(asyncContext, reponse); } } }