Blowing_OBJProxy.cs 5.1 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.Linq;
using System.Text;

namespace FLY.Thick.Blowing.Server.OBJProxy
{
    /// <summary>
    /// 吹膜测厚 OBJ 服务代理
    /// </summary>
    public class Blowing_OBJProxy: FObj
    {
        #region 延时推送 MARKNO
        const int MARKNO_PUSH_PARAMS = 1;
        const int MARKNO_PUSH_MAP = 2;
        #endregion
        
        IBlowing mRenZiJia;
        
        /// <summary>
        /// 
        /// </summary>
        /// <param name="objsys_idx"></param>
        /// <param name="renzijia"></param>
        public Blowing_OBJProxy(int objsys_idx, UInt32 id, IBlowing renzijia) : base(objsys_idx)
        {
            ID = id;
            mRenZiJia = renzijia;
            mRenZiJia.PropertyChanged += mRenZiJiaFix_PropertyChanged;
            mRenZiJia.DataEvent += mRenZiJia_DataEvent;
        }

        void mRenZiJia_DataEvent(object sender, RenZiJiaDataEventArgs e)
        {
            string json = Newtonsoft.Json.JsonConvert.SerializeObject(e);
            CurrObjSys.PushObjInfoEx(
                this, BLOWINGFIX_OBJ_INTERFACE.PUSH_DATA,
                Misc.Converter.StringToBytes(json));
        }

        void mRenZiJiaFix_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            if (
                (e.PropertyName == "ChannelCnt") ||
                (e.PropertyName == "BPC") ||
                (e.PropertyName == "OrgBoltNo")
                )
            {
                FObjBase.PollModule.Current.Poll_JustOnce(
                    new PollModule.PollHandler(delegate ()
                    {
                        byte[] buf;
                        GetValue(null, 0, BLOWING_OBJ_INTERFACE.GET_PARAMS, out buf);
                        CurrObjSys.PushObjInfoEx(
                            this, BLOWING_OBJ_INTERFACE.PUSH_PARAMS,
                            buf);
                    }), this, MARKNO_PUSH_PARAMS);
            }
            if (
                (e.PropertyName == "Map") ||
                (e.PropertyName == "IsUsedMap"))
            {
                FObjBase.PollModule.Current.Poll_JustOnce(
                    new PollModule.PollHandler(delegate ()
                    {
                        byte[] buf;
                        GetValue(null, 0, BLOWING_OBJ_INTERFACE.GET_MAP, out buf);
                        CurrObjSys.PushObjInfoEx(
                            this, BLOWING_OBJ_INTERFACE.GET_MAP,
                            buf);
                    }), this, MARKNO_PUSH_MAP);
            }
        }

        public override void GetValue(IFConn from, uint srcid, ushort memid, out byte[] infodata)
        {
            switch (memid)
            {
                case BLOWING_OBJ_INTERFACE.GET_PARAMS:
                    {
                        BLOWING_OBJ_INTERFACE.Pack_Params p = new BLOWING_OBJ_INTERFACE.Pack_Params()
                        {

                            channelcnt = mRenZiJia.ChannelCnt,
                            bpc = mRenZiJia.BPC,
                            orgBolt = mRenZiJia.OrgBoltNo
                        };
                        string json = JsonConvert.SerializeObject(p);
                        infodata = Misc.Converter.StringToBytes(json);
                    }
                    break;
                case BLOWING_OBJ_INTERFACE.GET_MAP:
                    {
                        string json = JsonConvert.SerializeObject(new BLOWING_OBJ_INTERFACE.Pack_Map()
                        {
                            IsUsedMap = mRenZiJia.IsUsedMap,
                            Map = mRenZiJia.Map
                        });
                        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 BLOWING_OBJ_INTERFACE.SET_PARAMS:
                    {
                        string json = Misc.Converter.BytesToString(infodata);
                        var p = JsonConvert.DeserializeObject<BLOWING_OBJ_INTERFACE.Pack_Params>(json);
                        mRenZiJia.ChannelCnt = p.channelcnt;
                        mRenZiJia.BPC = p.bpc;
                        mRenZiJia.OrgBoltNo = p.orgBolt;
                        mRenZiJia.Apply();
                        
                    }
                    break;
                case BLOWING_OBJ_INTERFACE.SET_MAP:
                    {
                        string json = Misc.Converter.BytesToString(infodata);
                        var p = Newtonsoft.Json.JsonConvert.DeserializeObject<BLOWING_OBJ_INTERFACE.Pack_Map>(json);
                        mRenZiJia.IsUsedMap = p.IsUsedMap;
                        mRenZiJia.Map = p.Map.ToList();
                        mRenZiJia.Apply();
                    }
                    break;
            }
        }
    }
}