Sì lo so... ho rotto io e gli indy
Credo il titolo sia alquanto autoesplicativo (almeno per chi si è ritrovato a sviluppare un'applicazione con IdTcpClient ).
Meglio spiegare in ogni caso:
Il componente IdTcpClient non gestisce gli eventi sulla lettura del socket (alcuni componenti riescono ad intercettare l'evento "onread", gli indy no), il che vuol dire che, se il server deve inviare dei trigger al client, il client non può leggerli se non sta a controllare ogni tanto il socket.
A questo proposito interviene un timer (io ho creato un thread apposito invece di usare il timer) che ogni tot millisecondi legge il socket.
Il problema è che il metodo "ReadLn" dell'IdTcpClient dovrebbe andare in timeout dopo un certo tot di millisecondi settabili dal programmatore (io ho settato 5 millisecondi mentre il thread si autoaggiorna ogni 500), però in timeout il readln non ci va. Resta in attesa finchè non riceve qualcosa da leggere.
Il che comporta il seguente problema:
come posso far sì che il client riceva i trigger dal server senza compromettere il funzionamento del client stesso?
Ho provato ad usare il componente "AntiFreeze" ma non mi convince, dato che quando disconnetto il client, l'applicazione si "freeza" lo stesso.