Cześć wszystkim,
Ostatnio coś sobie tam grzebałem i napisałem prosty serwer FTP. Póki co serwer implementuje podstawowe komendy wspomniane w tym dokumencie :
http://www.iana.org/assignments/ftp-commands-extensions/ftp-commands-extensions.xhtml
plus kilka innych. W przyszłości będę grzebał dalej ale już się da łączyć z klientem + wysyłać/odbierać, zmieniać nazwy itd.
Źródła oczywiście na githubie: https://github.com/NeuroXiq/SharpFTP
Tak więc zapraszam do oceny ;)
Zaktualizowałem trochę kod, poprawiałem miejsca o których pisał msm i dodałem kilka nowych rzeczy :)
Do kodu doszły 2 nowe klasy FileMutex i DirectoryMutex:
https://github.com/NeuroXiq/SharpFTP/tree/master/FileSystem
Tak w skrócie: istniał mały problem z edytowaniem/pobieranie jednego pliku przez kilku kilentów. Np. jeden chciałbym go usunąć, inny pobrać i pojawia się problem z dostępem. Powyższe klasy mają trywialną funkcję która umożliwia dostęp do konkretnego pliku tylko jednemu kilentowi (problem dotyczy także całych folderów stąd DirecotryMutex)
(załącznik: ftpmutex.png)
Małe zmiany także nastąpiły w FTPDynamicServerState:
https://github.com/NeuroXiq/SharpFTP/blob/master/Server/FTPDynamicServerState.cs
Teraz nie ma już tego całego ++port tylko system sam wybiera sobie port który jest wolny i otwiera go. Można także ustawić swoje własne port z których serwer ma korzystać (metoda GetPasvTcpListener w linku powyżej)
Zrobiłem też przy okazji taką małą refaktoryzację, powywalałem zbędne komentarze, niekiedy w dłuższych metodach podzieliłem kod na mniejsze metody itp.
Warto dodać, że dostęp do użytkowników/ścieżek dostępu odbywa się za pomocą klasy abstrakcyjnej (którą przyjmuje konstruktor klasy serwera). Jest to mała klasa prosta w implementacji, przykładowy jej kod (dla użytkowników: admin, anonymous):
https://github.com/NeuroXiq/SharpFTP/blob/master/Server/EXAMPLE_UserDataContext.cs