非常感謝你的回答。我選擇按照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