using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; using FObjBase; using FLY.Thick.Base.IService; using FLY.Thick.Base.OBJ_INTERFACE; namespace FLY.Thick.Base.Server.OBJProxy { public class GetSample_OBJProxy : FObj { #region 延时推送 MARKNO const int MARKNO_PUSH_PARAMS = 1; const int MARKNO_PUSH_STATE = 2; #endregion IGetSampleService mGetSampleService; public GetSample_OBJProxy(int objsys_idx, UInt32 id, IGetSampleService getSampleService) :base(objsys_idx) { ID = id; mGetSampleService = getSampleService; mGetSampleService.PropertyChanged += new PropertyChangedEventHandler(mGetSampleService_PropertyChanged); for(int i=0;i<mGetSampleService.Samples.Length;i++) { mGetSampleService.Samples[i].PropertyChanged += new PropertyChangedEventHandler(mSampleCell_PropertyChanged); } for (int i = 0; i < mGetSampleService.Features.Length; i++) { mGetSampleService.Features[i].PropertyChanged += new PropertyChangedEventHandler(mSampleFeature_PropertyChanged); } } void push_params() { FObjBase.PollModule.Current.Poll_JustOnce( new PollModule.PollHandler(delegate() { byte[] buf; GetValue(null, 0, GETSAMPLE_OBJ_INTERFACE.GET_PARAMS, out buf); CurrObjSys.PushObjInfoEx( this, GETSAMPLE_OBJ_INTERFACE.PUSH_PARAMS, buf); }), this, MARKNO_PUSH_PARAMS); } void push_state() { FObjBase.PollModule.Current.Poll_JustOnce( new PollModule.PollHandler(delegate() { byte[] buf; GetValue(null, 0, GETSAMPLE_OBJ_INTERFACE.GET_STATE, out buf); CurrObjSys.PushObjInfoEx( this, GETSAMPLE_OBJ_INTERFACE.PUSH_STATE, buf); }), this, MARKNO_PUSH_STATE); } void mSampleFeature_PropertyChanged(object sender, PropertyChangedEventArgs e) { if ((e.PropertyName == "Enable") || (e.PropertyName == "StartPos") || (e.PropertyName == "EndPos")) { push_params(); } else if ((e.PropertyName == "MaxRelevancy") || (e.PropertyName == "MaxOffset") || (e.PropertyName == "ScanData")) { push_state(); } } void mSampleCell_PropertyChanged(object sender, PropertyChangedEventArgs e) { if ((e.PropertyName == "Enable") || (e.PropertyName == "JustForCheck") || (e.PropertyName == "OrgAD") || (e.PropertyName == "Position")) { push_params(); } else if ((e.PropertyName == "AD") || (e.PropertyName == "SampleValue")) { push_state(); } } void mGetSampleService_PropertyChanged(object sender, PropertyChangedEventArgs e) { if ((e.PropertyName == "Enable") || (e.PropertyName == "Interval") || (e.PropertyName == "Velocity") || (e.PropertyName == "Range") || (e.PropertyName == "Window") || (e.PropertyName == "IsCheckByPercent") || (e.PropertyName == "ErrPercent") || (e.PropertyName == "ErrValue") || (e.PropertyName == "Search")) { push_params(); } else if (e.PropertyName == "PosOfGrid") { push_state(); } } public override void GetValue(IFConn from, uint srcid, ushort memid, out byte[] infodata) { infodata = null; switch (memid) { case GETSAMPLE_OBJ_INTERFACE.GET_PARAMS: { GETSAMPLE_OBJ_INTERFACE.Pack_Params p = new GETSAMPLE_OBJ_INTERFACE.Pack_Params() { enable = mGetSampleService.Enable, range = mGetSampleService.Range, velocity = mGetSampleService.Velocity, window = mGetSampleService.Window, IsCheckByPercent = mGetSampleService.IsCheckByPercent, ErrPercent = mGetSampleService.ErrPercent, ErrValue = mGetSampleService.ErrValue, search = mGetSampleService.Search }; p.samples = (from sample in mGetSampleService.Samples select new GETSAMPLE_OBJ_INTERFACE.Pack_Params_SampleCell() { enable = sample.Enable, justForCheck = sample.JustForCheck, orgad = sample.OrgAD, position = sample.Position }); p.features = (from feature in mGetSampleService.Features select new GETSAMPLE_OBJ_INTERFACE.Pack_Params_SampleFeature() { enable = feature.Enable, startpos = feature.StartPos, endpos = feature.EndPos }); string json = Newtonsoft.Json.JsonConvert.SerializeObject(p); infodata = Misc.Converter.StringToBytes(json); } break; case GETSAMPLE_OBJ_INTERFACE.GET_STATE: { GETSAMPLE_OBJ_INTERFACE.Pack_State p = new GETSAMPLE_OBJ_INTERFACE.Pack_State() { posOfGrid = mGetSampleService.PosOfGrid, samples = from sample in mGetSampleService.Samples select new GETSAMPLE_OBJ_INTERFACE.Pack_State_SampleCell() { ad = sample.AD, value = sample.SampleValue }, features = from feature in mGetSampleService.Features select new GETSAMPLE_OBJ_INTERFACE.Pack_State_SampleFeature() { maxRelevancy = feature.MaxRelevancy, maxOffset = feature.MaxOffset, scanData = feature.ScanData } }; string json = Newtonsoft.Json.JsonConvert.SerializeObject(p); infodata = Misc.Converter.StringToBytes(json); } break; default: infodata = null; break; } } public override void SetValue(IFConn from, uint srcid, ushort memid, byte[] infodata) { switch (memid) { case GETSAMPLE_OBJ_INTERFACE.SET_PARAMS: { string json = Misc.Converter.BytesToString(infodata); var p = Newtonsoft.Json.JsonConvert.DeserializeObject<GETSAMPLE_OBJ_INTERFACE.Pack_Params>(json); mGetSampleService.Enable = p.enable; mGetSampleService.Range = p.range; mGetSampleService.Velocity = p.velocity; mGetSampleService.Window = p.window; mGetSampleService.IsCheckByPercent = p.IsCheckByPercent; mGetSampleService.ErrPercent = p.ErrPercent; mGetSampleService.ErrValue = p.ErrValue; mGetSampleService.Search = p.search; for(int i=0;i<mGetSampleService.Samples.Count() && i<p.samples.Count();i++) { var sample_src = p.samples.ElementAt(i); var sample_desp = mGetSampleService.Samples[i]; sample_desp.Enable = sample_src.enable; sample_desp.JustForCheck = sample_src.justForCheck; sample_desp.OrgAD = sample_src.orgad; sample_desp.Position = sample_src.position; } for (int i = 0; i < mGetSampleService.Features.Count() && i < p.features.Count(); i++) { var feature_src = p.features.ElementAt(i); var feature_desp = mGetSampleService.Features[i]; feature_desp.Enable = feature_src.enable; feature_desp.StartPos = feature_src.startpos; feature_desp.EndPos = feature_src.endpos; } mGetSampleService.Apply(); } break; } } public override void CallFunction(IFConn from, uint srcid, uint magic, ushort funcid, byte[] infodata) { switch (funcid) { case GETSAMPLE_OBJ_INTERFACE.CALL_GET_TEMPDATAS: { mGetSampleService.GetTempFilterDatas((context,retdata) => { string json = Newtonsoft.Json.JsonConvert.SerializeObject(retdata); CurrObjSys.PushCallFunctionEx(from, srcid, ID, magic, funcid, Misc.Converter.StringToBytes(json)); }, null); }break; } } } }