BlowingServiceClient.cs 5.03 KB
using FLY.Thick.Blowing.IService;
using FLY.Thick.Blowing.OBJ_INTERFACE;
using FObjBase;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;

namespace FLY.Thick.Blowing.Client
{
    public class BlowingServiceClient : FObj, IBlowing
    {
        protected IFConn mConn;
        protected UInt32 mServerID;
        
        public bool IsConnected { get; set; }

        #region IBlowing 成员变量
        #region 分区设定
        /// <summary>
        /// 加热通道数
        /// </summary>
        public int ChannelCnt { get; set; } = 44;


        /// <summary>
        /// 分区数/加热通道数
        /// </summary>
        public int BPC { get; set; } = 2;


        /// <summary>
        /// 风环螺丝数
        /// </summary>
        public int NBolts => ChannelCnt * BPC;



        public int OrgBoltNo { get; set; } = 1;

        /// <summary>
        /// 使用分区表
        /// </summary>
        public bool IsUsedMap { get; set; }


        /// <summary>
        /// 分区表
        /// </summary>
        [PropertyChanged.DoNotCheckEquality]
        public List<BoltMapCell> Map { get; set; } = new List<BoltMapCell>();

        #endregion


        #endregion

        /// <summary>
        /// 每次有新数据时候推送。 修改参数,不会推送
        /// </summary>
        public event RenZiJiaDataEventHandler DataEvent;

        public BlowingServiceClient(UInt32 serverid)
        {
            mServerID = serverid;
        }

        #region 功能
        public virtual void Apply()
        {
            string json = JsonConvert.SerializeObject(new BLOWING_OBJ_INTERFACE.Pack_Params()
            {
                channelcnt = ChannelCnt,
                bpc = BPC,
                orgBolt = OrgBoltNo
            });

            CurrObjSys.SetValueEx(
                mConn, mServerID, ID,
                BLOWING_OBJ_INTERFACE.SET_PARAMS,
                Misc.Converter.StringToBytes(json));

            json = JsonConvert.SerializeObject(new BLOWING_OBJ_INTERFACE.Pack_Map()
            {
                IsUsedMap = IsUsedMap,
                Map = Map
            });

            CurrObjSys.SetValueEx(
                mConn, mServerID, ID,
                BLOWING_OBJ_INTERFACE.SET_MAP, 
                Misc.Converter.StringToBytes(json));
        }

        #endregion


        #region INotifyPropertyChanged 成员

        public event PropertyChangedEventHandler PropertyChanged;
        #endregion

        public override void Dispose()
        {
            CurrObjSys.ObjRemove(
                this, mConn);
        }
        public override void ConnectNotify(IFConn from)
        {
            mConn = from;
            IsConnected = from.IsConnected;
            if (from.IsConnected)
            {
                //获取所有数据,设置推送
                CurrObjSys.GetValueEx(
                    mConn, mServerID, ID,
                    BLOWING_OBJ_INTERFACE.GET_PARAMS);

                CurrObjSys.GetValueEx(
                    mConn, mServerID, ID,
                    BLOWING_OBJ_INTERFACE.GET_MAP);

                CurrObjSys.SenseConfigEx(
                    mConn, mServerID, ID, 0xffffffff,
                    SENSE_CONFIG.ADD);

            }
        }
        public override void PushGetValue(IFConn from, uint srcid, ushort memid, byte[] infodata)
        {
            switch (memid)
            {
                case BLOWING_OBJ_INTERFACE.GET_PARAMS:
                    {
                        string json = Misc.Converter.BytesToString(infodata);
                        var p = JsonConvert.DeserializeObject<BLOWING_OBJ_INTERFACE.Pack_Params>(json);
                        
                        ChannelCnt = p.channelcnt;//总分区数,从1开始
                        BPC = p.bpc;
                        OrgBoltNo = p.orgBolt;
                    }
                    break;
                case BLOWING_OBJ_INTERFACE.GET_MAP:
                    {
                        string json = Misc.Converter.BytesToString(infodata);
                        var p = Newtonsoft.Json.JsonConvert.DeserializeObject<BLOWING_OBJ_INTERFACE.Pack_Map>(json);
                        
                        IsUsedMap = p.IsUsedMap;
                        Map = p.Map;
                    }
                    break;
            }
        }
        public override void PushInfo(IFConn from, uint srcid, ushort infoid, byte[] infodata)
        {
            switch (infoid)
            {
                case BLOWING_OBJ_INTERFACE.PUSH_DATA:
                    {
                        string json = Misc.Converter.BytesToString(infodata);
                        RenZiJiaDataEventArgs e = Newtonsoft.Json.JsonConvert.DeserializeObject<RenZiJiaDataEventArgs>(json);

                        DataEvent?.Invoke(this, e);
                    }
                    break;
                default:
                    PushGetValue(from, srcid, infoid, infodata);
                    break;
            }
        }

       
    }
}