So genau kenne ich das
FTP-Protokoll auch nicht, aber AFAIK gibt es Fehler-Kommandos. Entweder heißen sie "ERROR", "ERR" oder so ähnlich. Damit könntest du zumindest schonmal die Fehler zurückgeben.
So, damit eingehende Verbindungen immer gleichzeitig ablaufen, solltest du für jede Anfrage einen neuen Thread machen. Wenn du die
VCL mit dem TThread nimmst, ginge das mit einem array of TThread, bei der
API mit einem array voller Thread-Handles.
Ich kenne die Indies auch nicht, daher gehe ich mal von einer Komponente TidFTPServer aus, die hoffentlich ein Event "OnIncomingRequest" hat. Da schaust du dann, was da angefordert wird (Retry, Stor, Put oder Get) und öffnest einen neuen Thread, um eben diese Datei vom Client zu übertragen, oder zum Client, je nachdem. Das kann mehrfach geschehen, da Threads läuft alles gleichzeitig.
So, bei jedem neu erstellten Thread, also jeder Verbindung, die zustande kommt, schreibst du in eine Liste den Dateinamen der aktuell übertragenden Datei. Wenn dann ein neuer Request kommt, guckst du, ob die angeforderte Datei bereits in dieser Liste steht, also bereits hochgeladen wird. Ist das der Fall, gibst du die Fehlermeldung aus à la "ERROR "This file is being uploaded by another client, please try later."" und wartest auf weitere Kommandos des Clients (z.B. das Hochladen einer anderen Datei).
Soweit zur Theorie. Für die Praxis musst du jemanden finden, der sich mit den Indies auskennt
Oder deren Handbuch lesen, falls vorhanden
FTP ist auf jeden Fall von vielen Leuten einsetzbar. Du brauchst ja nur zur richtigen Zeit die richtigen Fehlermeldungen schicken. Ein fertiges Protokoll, daß das macht, ist mir nicht bekannt, aber mit den Protokollen hab' ich's eh nicht so *g*