there are of use if you are building a Managed FTPS/FTP system and you want to do something to the files after they are fully received/stored by the server.
For example: have a sqlite database with rules based on Unix style pattern matching and then move the files based on stored destinations for those files, or maybe PGP decrypt the files automatically, do a Unix to Windows i.e. LF to CRLF conversion of the file, the list goes on and on.
It's just super nice having the events part of the server component. Remy suggested doing a new inherited tfilestream object with a custom destroy event and that would probably work.
But to me it just makes sense to have those two events fire when a file is Sent or Received :-)
I Implemented the events in my copy of Indy almost two years ago and the server has been in production for about 1.5 years and we transfer around 1k files per day and when a file is received I have a I/O completion port queue that does the processing based on the file pattern found in the sqlite database. No issues with the events ever.
There are natural companions to the OnStoreFile and OnRetreiveFile events.