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;
using FLY.Thick.Base.Common;
using PropertyChanged;
using Newtonsoft.Json;
namespace FLY.Thick.Base.Client
{
///
/// 样品采样服务 客户代理
///
[JsonObject(MemberSerialization.OptIn)]
public class GetSampleServiceClient : FObjServiceClient, IGetSampleService
{
#region IGetSampleService 成员
///
/// 参数:使能
///
[JsonProperty]
public bool Enable { get; set; }
///
/// 参数:速度
///
[JsonProperty]
public UInt32 Velocity { get; set; }
///
/// 参数:样品点范围
///
[JsonProperty]
public int Range { get; set; }
///
/// 滤波窗口
///
[JsonProperty]
public int Window { get; set; }
///
/// 使用%方式检查异常
///
[JsonProperty]
public bool IsCheckByPercent { get; set; } = true;
///
/// 异常% 单位%
///
[JsonProperty]
public double ErrPercent { get; set; } = 2;
///
/// 异常值
///
[JsonProperty]
public int ErrValue { get; set; } = 200;
///
/// 样品
///
[JsonProperty]
public SampleCell[] Samples { get; set; } = new SampleCell[3];
///
/// 查找公差
///
[JsonProperty]
public int Search { get; set; }
///
/// 特征 相识度 0 正, 1 反
///
[JsonProperty]
public SampleFeature[] Features { get; set; } = new SampleFeature[2];
///
/// 状态:从flyad7 得到的。 用于绘制图
///
[JsonProperty]
public int PosOfGrid { get; set; } = 10;
///
///
///
public void Apply()
{
GETSAMPLE_OBJ_INTERFACE.Pack_Params p = new GETSAMPLE_OBJ_INTERFACE.Pack_Params
{
enable = Enable,
velocity = Velocity,
range = Range,
window = Window,
IsCheckByPercent = IsCheckByPercent,
ErrPercent = ErrPercent,
ErrValue = ErrValue,
search = Search,
samples = from sample in Samples
select
new GETSAMPLE_OBJ_INTERFACE.Pack_Params_SampleCell()
{
enable = sample.Enable,
justForCheck = sample.JustForCheck,
orgad = sample.OrgAD,
position = sample.Position
},
features = from feature in 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);
//获取所有数据,设置推送
CurrObjSys.SetValueEx(
mConn, mServerID, ID,
GETSAMPLE_OBJ_INTERFACE.SET_PARAMS,
Misc.Converter.StringToBytes(json)
);
}
#endregion
public GetSampleServiceClient(UInt32 id) : base(id) { init(); }
public GetSampleServiceClient(UInt32 serviceId, string connName) : base(serviceId, connName) { init(); }
void init()
{
for (int i = 0; i < Samples.Count(); i++)
Samples[i] = new SampleCell();
for (int i = 0; i < Features.Count(); i++)
Features[i] = new SampleFeature();
}
public override void ConnectNotify(IFConn from)
{
base.ConnectNotify(from);
if (from.IsConnected)
{
//获取所有数据,设置推送
CurrObjSys.GetValueEx(
mConn, mServerID, ID,
GETSAMPLE_OBJ_INTERFACE.GET_PARAMS);
CurrObjSys.GetValueEx(
mConn, mServerID, ID,
GETSAMPLE_OBJ_INTERFACE.GET_STATE);
CurrObjSys.SenseConfigEx(
mConn, mServerID, ID,
0xffffffff, SENSE_CONFIG.ADD);
}
}
public override void PushGetValue(IFConn from, uint srcid, ushort memid, byte[] infodata)
{
switch (memid)
{
case GETSAMPLE_OBJ_INTERFACE.GET_PARAMS:
{
string json = Misc.Converter.BytesToString(infodata);
var p = Newtonsoft.Json.JsonConvert.DeserializeObject(json);
Enable = p.enable;
Range = p.range;
Velocity = p.velocity;
Window = p.window;
IsCheckByPercent = p.IsCheckByPercent;
ErrPercent = p.ErrPercent;
ErrValue = p.ErrValue;
for (int i = 0; i < Samples.Count() && i < p.samples.Count(); i++)
{
var sample_src = p.samples.ElementAt(i);
var sample_desp = 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;
}
Search = p.search;
for (int i = 0; i < Features.Count() && i < p.features.Count(); i++)
{
var feature_src = p.features.ElementAt(i);
var feature_desp = Features[i];
feature_desp.Enable = feature_src.enable;
feature_desp.StartPos = feature_src.startpos;
feature_desp.EndPos = feature_src.endpos;
}
} break;
case GETSAMPLE_OBJ_INTERFACE.GET_STATE:
{
string json = Misc.Converter.BytesToString(infodata);
var p = Newtonsoft.Json.JsonConvert.DeserializeObject(json);
PosOfGrid = p.posOfGrid;
for (int i = 0; i < Samples.Count() && i < p.samples.Count(); i++)
{
var sample_src = p.samples.ElementAt(i);
var sample_desp = Samples[i];
sample_desp.AD = sample_src.ad;
sample_desp.SampleValue = sample_src.value;
}
for (int i = 0; i < Features.Count() && i < p.features.Count(); i++)
{
var feature_src = p.features.ElementAt(i);
var feature_desp = Features[i];
feature_desp.MaxRelevancy = feature_src.maxRelevancy;
feature_desp.MaxOffset = feature_src.maxOffset;
feature_desp.ScanData = feature_src.scanData;
}
} break;
}
}
public override void PushInfo(IFConn from, uint srcid, ushort infoid, byte[] infodata)
{
PushGetValue(from, srcid, infoid, infodata);
}
public override void PushCallFunction(IFConn from, uint srcid, uint magic, ushort funcid, byte[] retdata, object AsyncDelegate, object AsyncState)
{
switch (funcid) {
case GETSAMPLE_OBJ_INTERFACE.CALL_GET_TEMPDATAS:
{
string json = Misc.Converter.BytesToString(retdata);
var reponse = Newtonsoft.Json.JsonConvert.DeserializeObject>>(json);
(AsyncDelegate as AsyncCBHandler)(AsyncState, reponse);
}
break;
}
}
public void GetTempFilterDatas(AsyncCBHandler asyncCB, object asyncContext)
{
CurrObjSys.CallFunctionEx(mConn, mServerID, ID, GETSAMPLE_OBJ_INTERFACE.CALL_GET_TEMPDATAS, null, asyncCB, asyncContext);
}
}
}