zoukankan      html  css  js  c++  java
  • TDSTCPServerTransport 的Filters

    TDSTCPServerTransport 的Filters

    TDSTCPServerTransport 的 Filter 属性,可以对传递的数据进行加密,压缩,再修改等,有
    点注入的概念。默认情况下,Datasnap 自带的ZLIB, PC1,RSA 三个Filter。测试了一下,
    RSA 只对KEY 加密,PC1 才对内容加密,ZLIB 来做压缩,ZLIB 压缩实在不咋的。并且,
    Filter 的顺序,是依次执行的。我现在打算实现,服务器的一个Log 功能,记录下来进入的
    数据,出去的数据,要求记录下来的数据是明文。
    TTransportFilter 的 ProcessInput ,ProcessOutput 光看名字比较费解,可以这么理解
    ProcessInput 为编码,ProcessOutput 可以理解为解码。


    首先给DSTCPServerTransport1 的Fitlers 都加上默认的3 个Filter。
    上一个完整的代码
    unituLogFilter;

    interface

    uses
    SysUtils, DBXPlatform, DBXTransport;

    type
    TLogHeadFilter =class(TTransportFilter)
    public
    constructorCreate;override;
    destructorDestroy;override;
    functionProcessInput(constData: TBytes): TBytes;override;
    functionProcessOutput(constData: TBytes): TBytes;override;//do nothing
    functionId: UnicodeString;override;
    end;

    TLogTailFilter =class(TTransportFilter)
    public
    constructorCreate;override;
    destructorDestroy;override;
    functionProcessInput(constData: TBytes): TBytes;override;//do nothing
    functionProcessOutput(constData: TBytes): TBytes;override;
    functionId: UnicodeString;override;
    end;

    procedureAddLogFilter(Filters: TTransportFilterCollection);

    implementation

    uses
    CodeSiteLogging;

    const
    LogFilterName_Tail ='LogTail';
    LogFilterName_Head ='LogHead';

    procedureAddLogFilter(Filters: TTransportFilterCollection);
    var
    fs: TDBXStringArray;
    i:Integer;
    begin

    fs := Filters.FilterIdList;
    Filters.Clear;
    Filters.AddFilter(LogFilterName_Head);
    fori := Low(fs)toHigh(fs)do
    begin
    Filters.AddFilter(fs[i]);
    end;
    Filters.AddFilter(LogFilterName_Tail);
    end;

    constructorTLogTailFilter.Create;
    begin
    inheritedCreate;
    //CodeSite.Send(csmBlue, 'TLogTailFilter.Create');
    end;

    destructorTLogTailFilter.Destroy;
    begin
    //CodeSite.Send(csmBlue, 'TLogTailFilter.Destroy');
    inheritedDestroy;
    end;

    functionTLogTailFilter.ProcessInput(constData: TBytes): TBytes;
    begin
    Result := Data;
    CodeSite.Send(csmOrange,'To Client: '+ IntToStr(Length(Data)));
    end;

    functionTLogTailFilter.ProcessOutput(constData: TBytes): TBytes;
    begin
    Result := Data;
    CodeSite.Send(csmOrange,'From Client: '+ IntToStr(Length(Data)),
    TEncoding.ASCII.GetString(Data));
    end;

    functionTLogTailFilter.Id: UnicodeString;
    begin
    Result := LogFilterName_Tail;
    end;

    { TLogInputFilter }

    constructorTLogHeadFilter.Create;
    begin

    inherited;
    //CodeSite.Send(csmBlue, 'TLogHeadFilter.Create');
    end;

    destructorTLogHeadFilter.Destroy;
    begin
    //CodeSite.Send(csmBlue, 'TLogHeadFilter.Destroy');
    inherited;
    end;

    functionTLogHeadFilter.Id: UnicodeString;
    begin
    Result := LogFilterName_Head;
    end;

    functionTLogHeadFilter.ProcessInput(constData: TBytes): TBytes;
    begin
    Result := Data;
    CodeSite.Send(csmYellow,'To Client: '+ IntToStr(Length(Data)),
    TEncoding.ASCII.GetString(Data));
    end;

    functionTLogHeadFilter.ProcessOutput(constData: TBytes): TBytes;
    begin
    Result := Data;
    CodeSite.Send(csmYellow,'From Client: '+ IntToStr(Length(Data)));

  • 相关阅读:
    (五)《Java编程思想》——final关键字
    eclipse与github建立版本关联、git使用说明
    (四)《Java编程思想》——可变参数列表
    (三)《Java编程思想》——构造函数初始化
    (二)《Java编程思想》——t h i s 关键字
    (一)《Java编程思想》学习——按位运算符、移位运算符
    (三)一个工作任务引起的乱战——udp通信
    (二)一个工作任务引起的乱战——C++程序编译为dll,让C#调用
    (一)一个工作任务引起的乱战——c#中结构体与byte[]间相互转换
    如何反编译silverlight
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/5105857.html
Copyright © 2011-2022 走看看