zoukankan      html  css  js  c++  java
  • Zaxis数据编程方法

    每一个数据项包括3部分

    组包类、解码器类和界面

    一、界面

    1、在“资源解决方案管理器”中右单击SetupUI目录。菜单“添加”->“用户控件”。

     添加用户控件菜单

    出现添加新项对话框,输入名称,这里假设叫C_F13_zyd。确定。

    添加新项对话框

    3、出现新建用户控件的设计视图,按下F7键转换到代码视图。引用的命名空间加上

    using Zaxis.ControlBase;
    using PkgBuilder.Foundation;

    将这个控件的父类改为SetupCommonUI:

    public partial class C_F13_zyd : SetupCommonUI

    这时的设计视图已变为开发所需要的形式,在上半部分的区域中拖入需要的控件。

    4、修改bin\stipulation.xml文件,加入

    <AFN_0xC>
        <stext>F13每日0点综合数据</stext>
        <FunID>13</FunID>
        <fn>13</fn>
        <pn>0</pn>
        <UIClass>Zaxis.SetupUI.C_F13_zyd</UIClass>
    </AFN_0xC>

    注意类名要写全名Zaxis.SetupUI.C_F13_zyd。到这儿这个数据项的界面就新建完成了。

    二、组包类

    在Encode目录右键单击,选“添加”->“类”。输入类名。

    先加入命名空间

    using PkgBuilder;
    using PkgBuilder.Foundation;

    将此类继承自TerminalPackage。

    A_F3_SetupPkg:TerminalPackage

    在此文件中再写一个类封装此类数据所有的项目,继承自TerminalParameters。

    加上对应TerminalParameters(MSA, TerminalAreaCode, TerminalID, AFN, Pn, Fn)的构造函数。

    public A_F3_TerminalParameter(byte MSA, ushort TerminalAreaCode, ushort TerminalID, byte AFN, byte Pn, byte Fn,
                                                                                                                                    string _mainIP, ushort _mainPort, string _bakIP, ushort _bakPort, string _netgateIP, ushort _netgatePort, string _proxyIP, ushort _proxyPort, string _APN)
                : base(MSA, TerminalAreaCode, TerminalID, AFN, Pn, Fn)
            {
                this.mainIP = _mainIP;
                this.mainPort = _mainPort;
                this.bakIP = _bakIP;
                this.bakPort = _bakPort;
                this.netgateIP = _netgateIP;
                this.netgatePort = _netgatePort;
                this.proxyIP = _proxyIP;
                this.proxyPort = _proxyPort;
                this.APN = _APN;

                AppendParas = new ArrayList();
            }

    **调用你写的类形成数据包

    定义一个你定义的参数

    A_F3_TerminalParameter tep = new A_F3_TerminalParameter(……)

    A_F3_SetupPkg pkg = new A_F3_SetupPkg(tep, null, null);
    byte[] byts= pkg.Buffer;

    三、解码器

    在Decryptor目录右键单击,选“添加”->“类”。输入类名。

    加入Zaxis.Encode命名空间。

    所有的解码类继承自DecryptorBase,重写DoDecrypt方法。

    public override void DoDecrypt()
          {

    先定义一个本数据类的参数,

    A_F3_TerminalParameter p = new A_F3_TerminalParameter();

    将_strAry数组的内容按编码规则翻译成p的各项数据

    最后一定要 _TEParameter = p;

    }

    写个解码器

    每一个数据项包括3部分

    组包类、解码器类和界面

    SetupCommonUI的属性QueryEncodeBytes当被子类重写时的显示问题。

    TerminalParameters类的重要性

    它是终端下发包的基类,包含MSA, TerminalAreaCode, TerminalID, AFN, Pn, Fn这些信息,可以继承它添加新的成员。

    *******************************************************************

    1、DecryptHandler负责查找解码器,利用正则表达式匹配特征码。

    找到以后用Activator.CreateInstance创建实例。

    2、解码器的抽象基类DecryptorBase 中3个成员变量,供子类解析出数据保存。

        //要解析出的数据结构 用类表示(数据成员)抽象
        protected PackageParameters _TEParameter;
        protected PackageParameters _TRParameters;
        protected PackageParameters _CWParameters;

    DecryptorBase类在构造函数中调用DoDecrypt方法。

    DecryptorBase的子类必须实现DoDecrypt方法和ToString方法,

    public override void DoDecrypt()    具体
            {

               //定义自己的数据类的实例,这个类必须是上面3个之一的子类。
                A_F16_TerminalParameter A_F16_Parameter = new A_F16_TerminalParameter();

               //进行解析,为各个数据项赋值
                A_F16_Parameter.xnzwUserName = _strAry[0];
                A_F16_Parameter.xnzwPasswd = _strAry[1];

               //保存在_TEParameter变量中 抽象
                _TEParameter = A_F16_Parameter;
            }

    调用事件程序

    DecryptHandler.Decrypted(_decryptor, dmap.UIClassName, onepack, _decryptor.ToString());

    主窗体中有Decrypted事件的代码,将解析的结果转给对应的窗体。先用UIClassName找到页签。

    scui.Decrypt2UIAnsy(decryptor.TEParameter,OriginalPkgs); 抽象

    实际是异步调用:

    SetupCommonUI类中:

    public virtual void Decrypt2UI(PackageParameters DecryptedPara, string OriginalPkgs)
            {
                ShowPkgInGrid((byte)1, OriginalPkgs);
                //this.Invoke(new ShowPkgInGridD(ShowPkgInGrid), new object[] { (byte)1, OriginalPkgs });
            }

    子类中(也就是实际的界面)

    public override void Decrypt2UI(PackageParameters DecryptedPara, string OriginalPkgs)
    {

        //先将DecryptedPara还原成特定的数据类
        A_F16_TerminalParameter p = DecryptedPara as A_F16_TerminalParameter;  具体
        textBox1.Text = p.xnzwUserName.ToString();
        textBox2.Text = p.xnzwPasswd.ToString();

        //一定要再调用父类的这个过程
        base.Decrypt2UI(DecryptedPara, OriginalPkgs);
    }

    **************************************************************

    主体类框架

  • 相关阅读:
    Java 创建过滤器 解析xml文件
    web页面隐藏鼠标
    dom4j微信接口开发
    php实现远程网络文件下载到服务器指定目录 阿星小栈
    laravel 框架给$request添加数据 阿星小栈
    Agreeing to the Xcode/iOS license requires admin privileges, please run “sudo xcodebuild -license” and then retry this command. 阿星小栈
    在vue项目中使用echarts 阿星小栈
    js 数组、时间、邮箱等处理方法 阿星小栈
    iview 在Table组件render 中使用Poptip组件 阿星小栈
    逐步解决动态添加样式导致的元素闪烁 阿星小栈
  • 原文地址:https://www.cnblogs.com/edong/p/1738494.html
Copyright © 2011-2022 走看看