Ho pensato di risolvere usando le stringlists, essendo possbile inviarle sul socket (la prima stringa della lista rappresenta il comando e le successive eventuali parametri).

Ora però mi sorge un altro problema:
codice:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
 commands : TStrings;
begin
 commands := TStringList.Create;
 Label1.Caption := 'ricezione dati in corso';
 AThread.Connection.ReadStrings(commands,-1);
 if (commands.strings[0] = 'login') then
  if (commands.strings[1] = 'pippo') and (commands.strings[2] = 'pluto') then
   ShowMessage('Login corretto')
  else
   ShowMessage('Login errato');
end;
Non mi compare alcun popup.
Sicuramente l'evento viene soddisfatto dato che il label1 viene riempito con la stringa "Ricezione dati in corso".

Cosa delle stringlist mi sfugge? :master: