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)));
TDSTCPServerTransport 的Filters的更多相关文章
- datasnap的初步
datasnap的初步-回调函数 服务器端 TServerMethods1 =class(TComponent) private { Private declarations } public { P ...
- DATASNAP压缩过滤器的使用
ZLIBCOMPRESSION FILTER 作为范例,我们使用已随D2010提供的DataSnap过滤器.可用于在客户端和服务端压缩数据流.这里说的ZlibCompression过滤器可以在DbxC ...
- ABP(现代ASP.NET样板开发框架)系列之13、ABP领域层——数据过滤器(Data filters)
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之13.ABP领域层——数据过滤器(Data filters) ABP是“ASP.NET Boilerplate P ...
- ASP.NET MVC Filters 4种默认过滤器的使用【附示例】
过滤器(Filters)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响应内容,只响应特定内容给那些有特定权限的用户,过滤器理论上有以下功能: 判断 ...
- correlation filters in object tracking
http://www.cnblogs.com/hanhuili/p/4266990.html Correlation Filter in Visual Tracking系列一:Visual Objec ...
- MongoDB JAVA API Filters
Filters 该过滤器类为所有的MongoDB的查询操作静态工厂方法.每个方法返回BSON类型,又可以传递给期望一个查询过滤器的任何方法的一个实例. eq:匹配等于指定值的值.gt:匹配大于指定值的 ...
- Android开发之旅: Intents和Intent Filters(理论部分)
引言 大部分移动设备平台上的应用程序都运行在他们自己的沙盒中.他们彼此之间互相隔离,并且严格限制应用程序与硬件和原始组件之间的交互. 我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义 ...
- >>> FilterDispatcher <<< is deprecated! Please use the new filters!
在struts2.3.20下,web.xml中使用 会出现*********************************************************************** ...
- Correlation Filter in Visual Tracking系列一:Visual Object Tracking using Adaptive Correlation Filters 论文笔记
Visual Object Tracking using Adaptive Correlation Filters 一文发表于2010的CVPR上,是笔者所知的第一篇将correlation filt ...
随机推荐
- E1963A/E6703B W-CDMA Online User's Guide
官网资料地址: http://rfmw.em.keysight.com/rfcomms/refdocs/wcdma/
- 专题九:实现类似QQ的即时通信程序
引言: 前面专题中介绍了UDP.TCP和P2P编程,并且通过一些小的示例来让大家更好的理解它们的工作原理以及怎样.Net类库去实现它们的.为了让大家更好的理解我们平常中常见的软件QQ的工作原理,所以在 ...
- LN : leetcode 238 Product of Array Except Self
lc 238 Product of Array Except Self 238 Product of Array Except Self Given an array of n integers wh ...
- 下载github项目
两种方法:通过https或者ssh地址 找一个放置项目的文件夹,右键git bash here 输入 $ git clone https://项目地址 通过https 项目地址可以直接复制网页地址,或 ...
- Tomcat无法clean,无法remove部署的项目
错误: 对部署在Tomcat下的项目进行clean操作,总是提示Could not load the Tomcat server configuration,错误信息如图: 解决: 原来是将Serve ...
- RabbitMQ - Publisher的消息确认机制
queue和consumer之间的消息确认机制:通过设置ack.那么Publisher能不到知道他post的Message有没有到达queue,甚至更近一步,是否被某个Consumer处理呢?毕竟对于 ...
- 云服务IaaS,PaaS,SaaS
IaaS:基础设施服务,Infrastructure-as-a-service PaaS:平台服务,Platform-as-a-service SaaS:软件服务,Software-as-a-serv ...
- Codeforces_750_C_(二分查找)
C. New Year and Rating time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- 梦想CAD控件事件COM接口知识点
一.鼠标事件 _DMxDrawXEvents::MouseEvent 控件中的鼠标事件. 参数 说明 LONG lType 事件类型,1鼠标移动,2是鼠标左键按下,3是鼠标右键按下,4是鼠标左键双击 ...
- RabbitMQ系列(四)--消息如何保证可靠性传输以及幂等性
一.消息如何保证可靠性传输 1.1.可能出现消息丢失的情况 1.Producer在把Message发送Broker的过程中,因为网络问题等发生丢失,或者Message到了Broker,但是出了问题,没 ...