我们正在使用 Delphi XE 开发一个新的 Datasnap 服务器 (tcp/ip) 并遇到了问题。我们不知道客户端何时以异常方式断开连接,即。连接断开或客户端电脑重新启动。
当客户端建立连接时,我们将其详细信息保存在列表中,如下所示:
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 中有没有办法做到这一点?