BlowingProfileServiceClient.cs 5.99 KB
using FLY.Thick.BlowingScan.Common;
using FLY.Thick.BlowingScan.IService;
using FLY.Thick.BlowingScan.OBJ_INTERFACE;
using FObjBase;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace FLY.Thick.BlowingScan.Client
{
    /// <summary>
    /// 
    /// </summary>
    public class BlowingProfileServiceClient : FObj, IBlowingProfileService
    {
        IFConn mConn;
        UInt32 mServerID;

        /// <summary>
        /// 
        /// </summary>
        /// <param name="id"></param>
        public BlowingProfileServiceClient(UInt32 id)
        {
            mServerID = id;
        }

        #region IProfileService  接口
        /// <summary>
        /// 
        /// </summary>
        public BlowingProfileParam Param { get; } = new BlowingProfileParam();
  


        /// <summary>
        /// 应用 &amp; 保存
        /// </summary>
        public void Apply()
        {
            string json = JsonConvert.SerializeObject(Param);
            CurrObjSys.SetValueEx(mConn, mServerID, ID,
                BLOWING_PROFILE_OBJ_INTERFACE.SET_PARAMS,
                Misc.Converter.StringToBytes(json));
        }



        /// <summary>
        /// 获取产品列表, 返回类型为 List&lt;string&gt;
        /// </summary>
        /// <param name="AsyncDelegate"></param>
        /// <param name="AsyncState"></param>
        public void GetList(AsyncCBHandler AsyncDelegate, object AsyncState)
        {
            CurrObjSys.CallFunctionEx(mConn, mServerID, ID,
                BLOWING_PROFILE_OBJ_INTERFACE.CALL_GETLIST,
                null,
                AsyncDelegate, AsyncState);
        }

        /// <summary>
        /// 删除指定产品
        /// </summary>
        /// <param name="productname"></param>
        public void Del(string productname)
        {
            string json = JsonConvert.SerializeObject(productname);

            CurrObjSys.CallFunctionEx(mConn, mServerID, ID,
                BLOWING_PROFILE_OBJ_INTERFACE.CALL_DEL, Misc.Converter.StringToBytes(json));
        }

        /// <summary>
        /// 读取指定产品,返回类型为 ProfileParam
        /// </summary>
        /// <param name="productname"></param>
        /// <param name="AsyncDelegate"></param>
        /// <param name="AsyncState"></param>
        public void Read(string productname, AsyncCBHandler AsyncDelegate, object AsyncState)
        {
            string json = JsonConvert.SerializeObject(productname);

            CurrObjSys.CallFunctionEx(mConn, mServerID, ID,
                BLOWING_PROFILE_OBJ_INTERFACE.CALL_READ,
                Misc.Converter.StringToBytes(json),
                AsyncDelegate, AsyncState);
        }
        #endregion


        /// <summary>
        /// 
        /// </summary>
        public override void Dispose()
        {
            CurrObjSys.ObjRemove(
                this, mConn);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="from"></param>
        public override void ConnectNotify(IFConn from)
        {
            mConn = from;
            if (from.IsConnected)
            {
                //获取所有数据,设置推送
                CurrObjSys.GetValueEx(
                    mConn, mServerID, ID,
                    BLOWING_PROFILE_OBJ_INTERFACE.GET_PARAMS);

                CurrObjSys.SenseConfigEx(
                    mConn, mServerID, ID,
                    0xffffffff,
                    SENSE_CONFIG.ADD);
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="from"></param>
        /// <param name="srcid"></param>
        /// <param name="memid"></param>
        /// <param name="infodata"></param>
        public override void PushGetValue(IFConn from, uint srcid, ushort memid, byte[] infodata)
        {
            switch (memid)
            {
                case BLOWING_PROFILE_OBJ_INTERFACE.GET_PARAMS:
                    {
                        string json = Misc.Converter.BytesToString(infodata);
                        BlowingProfileParam p = JsonConvert.DeserializeObject<BlowingProfileParam>(json);

                        Misc.PropertiesManager.CopyTo(p, Param);

                    }
                    break;
            }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="from"></param>
        /// <param name="srcid"></param>
        /// <param name="infoid"></param>
        /// <param name="infodata"></param>
        public override void PushInfo(IFConn from, uint srcid, ushort infoid, byte[] infodata)
        {

            PushGetValue(from, srcid, infoid, infodata);


        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="from"></param>
        /// <param name="srcid"></param>
        /// <param name="magic"></param>
        /// <param name="funcid"></param>
        /// <param name="retdata"></param>
        /// <param name="AsyncDelegate"></param>
        /// <param name="AsyncState"></param>
        public override void PushCallFunction(IFConn from, uint srcid, uint magic, ushort funcid, byte[] retdata, object AsyncDelegate, object AsyncState)
        {
            switch (funcid)
            {
                case BLOWING_PROFILE_OBJ_INTERFACE.CALL_GETLIST:
                    {
                        string json = Misc.Converter.BytesToString(retdata);
                        List<string> p = JsonConvert.DeserializeObject<List<string>>(json);
                        ((AsyncCBHandler)AsyncDelegate)(AsyncState, p);
                    }
                    break;
                case BLOWING_PROFILE_OBJ_INTERFACE.CALL_READ:
                    {
                        string json = Misc.Converter.BytesToString(retdata);
                        BlowingProfileParam p = JsonConvert.DeserializeObject<BlowingProfileParam>(json);
                        
                        ((AsyncCBHandler)AsyncDelegate)(AsyncState, p);
                    }
                    break;
            }
        }
    }
}