Das OnExecute wird doch nur ausgeführt, wenn was vom Client kommt oder nicht?
OnExecute wird vom Server in einer Schleife immer wieder ausgeführt. Es gibt ja auch Fälle in denen der Client nur einmal eine Verbindung herstellt und dann wartet, bis der Server Daten sendet, und dann weiter wartet.
Der Server würde dann in OnExecute prüfen, ob er eine neue Nachricht für den Client hat, und falls nein, die Methode verlassen ... die dann aber "sofort" wieder aufgerufen wird. (Das kann zu einer 100 % Auslastung der CPU führen, dann muss noch eine Bremse wie Sleep eingebaut werden).
Das saubere clientseitige Disconnect würde der Server beim Read oder Write, oder mit CheckForDataOnSource / CheckForDisconnect feststellen.