Delphi XE を使用して新しい Datasnap サーバー (tcp/ip) を開発していますが、問題が発生しました。クライアントがいつ異常な方法で切断されるかはわかりません。接続が切断されるか、クライアント PC が再起動されます。
クライアントが接続を確立すると、その詳細が次のようにリストに保存されます。
TClientInfo = record
Id: integer;
Session: TDSSession;
LastSeen: TDateTime;
end;
...
ClientInfoList: TDictionary<Integer, TClientInfo>;
...
//OnConnect
ClientInfo.ClientId := ClientId;
ClientInfo.Session := TDSSessionManager.GetThreadSession;
ClientInfo.LastSeen := Now();
ClientInfoList.Add(ClientId, ClientInfo);
理想的には、ClientInforList を反復処理し、30 分間確認されていないクライアントを切断する必要がありますが、ここで問題が発生します。
次のようにクライアントセッションを切断または終了しようとしましたが、うまくいきませんでした。
for i in ServerContainer.ClientInfoList.Keys do
begin
ClientInfo := TClientInfo(ServerContainer.ClientInfoList[i]);
ClientInfo.Session.Terminate;
end;
Delphi XEでこれを行う方法はありますか?