Моему приложению (Android) требуется функция сетевого сканера.
Я хочу назначить ему подсеть и отправить запрос на каждый возможный адрес в подсети и определить, отвечает ли он или нет.
У меня есть два класса:
Устройство, которое содержит адрес и свойство available
(bool) (которое может быть установлено методом checkAvailable
),
NetworkerScanner, который расширяет Thread
и создает экземпляры всех Device
s.
В конце концов, я планирую иметь объект, который является наблюдателем в коллекции Observable, которая будет содержать все доступные устройства.
Добавление доступных устройств в коллекцию неочевидно.
Алгоритм
Let col be a Observable Collection
For each possible address
Instantiate a corresponding Device
On a new, separate thread, get this new device's availability.
If it's available, then add it to col.
Проверка доступности устройства невозможнанемедленное (я использую Volley, который использует обратные вызовы).
Как я могу из своего обратного вызова HTTP добавить устройство в коллекцию?
У меня есть несколько идей:
Передать ссылку наколлекция на устройство при создании его экземпляра, что кажется плохой идеей, поскольку у коллекции нет причины быть свойством устройства.Более того, если бы я хотел запустить несколько сканирований на одном и том же Device
экземплярах, он бы больше не работал, поскольку Device
мог иметь только одну коллекцию.
Я мог бытакже передайте ссылку на коллекцию методу checkAvailable
, но я чувствую, что это уловка (и уловка неправильного типа уловок).
При вызове checkAvailable
, передайте ему ссылку на onResponseListener
(метод обратного вызова для HTTP-запроса).Так как я создал бы слушателя в моем NetworkScanner
, я мог захватить локальную коллекцию.Но я чувствую, что это неправильно.Как ... очень неправильно.
Пожалуйста, предложите.