非常感谢你们的回答。我选择按照 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) 符号?当我尝试输入它时,我总是得到一个块引用......