謝謝您的建議,但我不傾向於在基礎TIdContext
類別中添加這些類型的補充。他們根本不屬於那裏。在這種情況下,派生自定義類並將其分配給服務器的ContextClass
屬性是正確和合適的解決方案。這就是爲什麼該財產首先存在。這實在是不算多的編碼,如:
type
TMyContext = class(TIdServerContext)
protected
FUserFlag: Boolean;
FUserID: Integer;
...
public
Property UserFlag: Boolean Read FUserFlag Write FUserFlag;
Property UserID: Integer Read FUserID Write FUserID;
end;
procedure TMyForm.FormCreate(Sender: TObject);
begin
// must do this before activating the server...
IdTCPServer1.ContextClass := TMyContext;
end;
,然後在需要的時候可以類型轉換TIdContext
對象指針TMyContext
。
各種Indy服務器在內部完成此操作。例如,TIdFTPServer
使用TIdFTPServerContext
類,該類具有登錄的會話的Account
和Username
屬性。
話雖這麼說,如果你不希望派生自定義類,基TIdContext
類也已經有公開的Data
屬性(或DataObject
和DataValue
性能在基於ARC的Delphi編譯器),可用於存儲用戶定義的數據,例如:
type
TMyData = class
protected
FUserFlag: Boolean;
FUserID: Integer;
...
public
Property UserFlag: Boolean Read FUserFlag Write FUserFlag;
Property UserID: Integer Read FUserID Write FUserID;
end;
procedure TMyForm.IdTCPServer1Connect(AContext: TIdContext);
begin
AContext.Data := TMyData.Create;
...
end;
然後你就可以簡單的類型轉換AContext.Data
到TMyData
需要的時候。
錯誤和功能請求可以提交給[Indy的問題跟蹤器](http://indy.codeplex.com),或在Embarcadero互聯網/套接字論壇中,或者私下提交給我。但是這個功能並不是我想要實現的功能。 –