Как бы вы разработали Windows-клиент для системы синхронизации типа Dropbox, используя .NET в качестве базовой платформы?
Клиент связывается с сервером, используя HTTP (json) для синхронизации метаданных, информации о пользователе и т. Д., И использует rsync для фактической передачи файла. Должно быть главное окно интерфейса, графический интерфейс, доступный из системного трея (и всегда активный там для уведомлений), и расширение оболочки для интеграции контекстного меню и значков.
GUI может быть автономным приложением Windows Forms (или WPF), по умолчанию свернутым в трей. Расширение Shell должно быть автономной DLL, зарегистрированной в процессе проводника. Как насчет основных функций клиента для связи с сервером и для передачи файлов, а также для мониторинга изменений файловой системы?
Каков наилучший способ реализовать это? Как отдельное приложение, библиотека DLL, содержащая требуемые функции, или фоновая служба Windows, которую при необходимости вызывают GUI и расширение оболочки? Или что-то еще, кроме 3 упомянутых?
Одной из проблем может быть необходимость для основных функций вызывать (выполнять) внешний процесс rsync.exe для передачи файлов. Кроме того, где бы ни находились основные функции, DLL расширения оболочки должна иметь возможность их использовать.
Есть ли какие-либо детали реализации или дизайна где-нибудь для реального клиента Windows Dropbox? Все, что я смог найти, это то, что он написан на python, кажется, использует базу данных sqlite3 для индексации файлов и subversion и RSync для управления ревизиями.
РЕДАКТИРОВАТЬ: Кроме того, я забыл еще один подход - удаленное взаимодействие .NET. Клиентское приложение будет предоставлять методы для взаимодействия с сервером, которое может использовать расширение Shell.