Skip to content

UserManager

Derovi edited this page May 3, 2021 · 1 revision

NetworkService умеет отправлять сообщения по InetSocketAddress, дает возможность узнать доставлено ли оно.

Удобнее было бы отправлять сообщения, указывая UserID, чтобы логика получения InetSocketAddress была инкапсулирована. Эту возможность предоставляет UserManager.

Причины почему NetworkService не работает напрямую с UserID:

  • SRP
  • NetworkService умеет меньше зависимостей, его удобнее тестировать.

UserManager предоставляет такие же методы для отправки сообщений - sendGet, sendPost, но вместо InetSocketAddress они принимают UserID.

Как происходит получение InetSocketAddress по UserID.

  • Если в локальном хранилище (StorageService) для данного UserID уже записан InetSocketAddress, используется он
  • Если в локальном хранилище нет UserID, отправляется запрос в DHT, полученный InetSocketAddress используется и записывается локально
  • Если использован InetSocketAddress из локального хранилища, но сообщение не доставлено, происходит попытка использовать InetSocketAddress из DHT, обновляется локальный (если он совпадает с тем, что хранится локально, игнорируется)

Clone this wiki locally