非常感谢你的回答。我选择按照mghie描述的方式实现它 - 通过为我的连接实现一个自定义的拦截器类。只是对于那些有兴趣的解决方案,我会在这里提供一些源代码:
type
TCountTrafficInterceptor = class (TIdConnectionIntercept)
public
type TIntPointer = ^Longint;
private
FTraffic : TIntPointer;
public
constructor Create (TrafficVar : TIntPointer);
procedure Send (var ABuffer : TIdBytes); override;
procedure Receive (var ABuffer : TIdBytes); override;
end;
constructor TCountTrafficInterceptor.Create (TrafficVar : TIntPointer);
begin
FTraffic := TrafficVar;
end;
procedure TCountTrafficInterceptor.Send (var ABuffer : TIdBytes);
begin
inherited Send (ABuffer);
FTraffic^ := FTraffic^ + Length (ABuffer);
end;
procedure TCountTrafficInterceptor.Receive (var ABuffer : TIdBytes);
begin
inherited Receive (ABuffer);
FTraffic^ := FTraffic^ + Length (ABuffer);
end;
而在TIdTCPCmdServer的的onConnect方法:
AContext.Connection.IOHandler.Intercept :=
TCountTrafficInterceptor.Create (@FNetworkTraffic);
伟大工程,只是那种解决方案,我一直在寻找对于。再次感谢您的答案。
顺便说一句:如何使用我的帖子中的(at)标志?当我尝试输入时,我总是会得到一个块报价...
+1谢谢!我像你提议的那样实现它,并用一些源代码添加了一个新的答案 – jpfollenius 2009-02-18 13:32:10