Вы не упоминаете, какую версию Delphi или Indy вы используете, но следующее верно для D2010 и Indy 10.x.
Я использовал свойство "AContext.Data" для идентификации клиента. Обычно я создаю объект и освобождаю его, когда происходит событие отключения.
Новый код OnConnect ():
procedure TfrmMain.serverIndyConnect(AContext: TIdContext);
begin
AContext.Data := TMyObject.Create(NIL);
// Other Init code goes here, including adding the connection to the grid
end;
Измененный код OnDisconnect () ниже:
procedure TfrmMain.serverIndyDisconnect(AContext: TIdContext);
var I:Integer;
begin
for I := 0 to gridClients.RowCount - 1 do
begin
if gridClients.Cells[0, I] = IntToStr(AContext.Data) then
begin
gridClients.Rows[I].Delete(I);
end;
end;
WriteLogEntry('Connection closed... (' + AContext.Binding.PeerIP+')');
end;