using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; using FObjBase; using FLY.Thick.BlowingScan.OBJ_INTERFACE; using FLY.Thick.BlowingScan.IService; using Misc; using FLY.Thick.Blowing.Client; using Newtonsoft.Json; namespace FLY.Thick.BlowingScan.Client { /// <summary> /// /// </summary> public class BlowingScanServiceClient : BlowingServiceClient, IBlowingScanService { /// <summary> /// /// </summary> public BlowingScanServiceClient(UInt32 serverid):base(serverid) { } #region IRenZiJiaScanService private int solvecnt = 4; /// <summary> /// 解方程数 /// </summary> public int SolveCnt { get { return solvecnt; } set { if (value < 3) value = 3; if (solvecnt != value) { solvecnt = value; } } } private int sensorwidth = 250; /// <summary> /// 探头宽度,用于解方程,可以与实际不符合 单位脉冲 /// </summary> public int SensorWidth { get { return sensorwidth; } set { if (value < 1) value = 1; if (sensorwidth != value) { sensorwidth = value; } } } private int smooth = 1; /// <summary> /// 平滑 /// </summary> public int Smooth { get { return smooth; } set { if (value < 0) value = 0; if (smooth != value) { smooth = value; } } } /// <summary> /// 缓冲区第一个记录序号 /// </summary> public int FirstBM { get; set; } = -1; /// <summary> /// 缓冲区最后一个记录序号 /// </summary> public int LastBM { get; set; } = -1; #endregion #region 下载进度 public bool IsDownloading { get; private set; } public int TotalSize { get; private set; } public int CurrentSize { get; private set; } #endregion public override void ConnectNotify(IFConn from) { base.ConnectNotify(from); if (from.IsConnected) { //获取所有数据,设置推送 CurrObjSys.GetValueEx( mConn, mServerID, ID, BLOWING_SCAN_OBJ_INTERFACE.GET_PARAMSEXT); CurrObjSys.GetValueEx( mConn, mServerID, ID, BLOWING_SCAN_OBJ_INTERFACE.GET_BUFINFO); } } public override void PushGetValue(IFConn from, uint srcid, ushort memid, byte[] infodata) { base.PushGetValue(from, srcid, memid, infodata); switch (memid) { case BLOWING_SCAN_OBJ_INTERFACE.GET_PARAMSEXT: { string json = Misc.Converter.BytesToString(infodata); var p = JsonConvert.DeserializeObject<BLOWING_SCAN_OBJ_INTERFACE.Pack_ParamsExt>(json); SolveCnt = p.solveCnt; SensorWidth = p.sensorWidth; Smooth = p.smooth; } break; case BLOWING_SCAN_OBJ_INTERFACE.GET_BUFINFO: { string json = Misc.Converter.BytesToString(infodata); var p = JsonConvert.DeserializeObject<BLOWING_SCAN_OBJ_INTERFACE.Pack_BM>(json); FirstBM = p.firstbm; LastBM = p.lastbm; } break; } } public override void PushCallFunction(IFConn from, uint srcid, uint magic, ushort funcid, byte[] retdata, object AsyncDelegate, object AsyncState) { switch (funcid) { case BLOWING_SCAN_OBJ_INTERFACE.CALL_GETBUF: { string json = Misc.Converter.BytesToString(retdata); var p = JsonConvert.DeserializeObject<GetBufListReponse>(json); ((AsyncCBHandler)AsyncDelegate)(AsyncState, p); } break; } } public override void PushCallFunctionBigSizeStatus(IFConn from, uint srcid, uint magic, ushort funcid, int total_size, int download_size, object AsyncState) { switch (funcid) { case BLOWING_SCAN_OBJ_INTERFACE.CALL_GETBUF: { TotalSize = total_size; CurrentSize = download_size; if (CurrentSize == TotalSize) { IsDownloading = false; } else { IsDownloading = true; } } break; } } /// <summary> /// 参数应用 /// </summary> public override void Apply() { base.Apply(); var p = new BLOWING_SCAN_OBJ_INTERFACE.Pack_ParamsExt() { solveCnt = SolveCnt, sensorWidth = SensorWidth, smooth = Smooth }; string json = JsonConvert.SerializeObject(p); CurrObjSys.SetValueEx( mConn, mServerID, ID, BLOWING_SCAN_OBJ_INTERFACE.SET_PARAMSEXT, Misc.Converter.StringToBytes(json)); } /// <summary> /// 获取 缓冲区列表 /// </summary> /// <param name="AsyncDelegate">retdata = GetBufListReponse</param> /// <param name="AsyncState"></param> public void GetBufList(AsyncCBHandler AsyncDelegate, object AsyncState) { CurrObjSys.CallFunctionEx(mConn, mServerID, ID, BLOWING_SCAN_OBJ_INTERFACE.CALL_GETBUF, null, AsyncDelegate, AsyncState); } } }