fix(app-glasses): не застревать на fallback 10.0.2.2 — перепоиск телефона
Если при старте очков телефон недоступен, discoverPhoneUrl возвращал fallback (эмуляторный 10.0.2.2), он запоминался как lastUrl — очки вечно реконнектили туда. Теперь на устройстве fallback не используется: не нашли — повторный поиск через 3с (connectLoop рекурсивно). На эмуляторе fallback остался. Железо: очки сами нашли телефон после его включения.
This commit is contained in:
@@ -94,13 +94,21 @@ class HostConnection(
|
||||
|
||||
/**
|
||||
* Первое подключение: mDNS-дискавери телефона (до 15с на устройстве, 3с на
|
||||
* эмуляторе), найденный адрес — в приоритете, иначе scan /24 (план Б),
|
||||
* иначе fallback (эмуляторный 10.0.2.2). Внутри [GlassesWsClient.connect]
|
||||
* живёт бесконечный реконнект с тем же адресом (переиспользование последнего
|
||||
* найденного); при его отсутствии — повторный mDNS-цикл.
|
||||
* эмуляторе), найденный адрес — в приоритете, иначе scan /24 (план Б).
|
||||
* Fallback на эмуляторный 10.0.2.2 только на эмуляторе; на устройстве при
|
||||
* пустом адресе — повторный поиск через 3с (lastUrl не запоминается).
|
||||
* Внутри [GlassesWsClient.connect] живёт бесконечный реконнект с тем же
|
||||
* адресом (переиспользование последнего найденного); при его отсутствии —
|
||||
* повторный mDNS-цикл.
|
||||
*/
|
||||
private suspend fun connectLoop() {
|
||||
val url = lastUrl ?: discoverPhoneUrl()
|
||||
if (url.isEmpty()) {
|
||||
log("app", "телефон не найден — повтор поиска через 3с")
|
||||
delay(3_000)
|
||||
connectLoop()
|
||||
return
|
||||
}
|
||||
lastUrl = url
|
||||
log("app", "подключаюсь к $url")
|
||||
|
||||
@@ -130,9 +138,10 @@ class HostConnection(
|
||||
}
|
||||
|
||||
/**
|
||||
* Цепочка поиска адреса телефона: mDNS → scan /24 (план Б) → fallback.
|
||||
* На эмуляторе scan пропускается (телефона в эмуляторной /24 нет, а fallback
|
||||
* на 10.0.2.2 должен наступать быстро).
|
||||
* Цепочка поиска адреса телефона: mDNS → scan /24 (план Б).
|
||||
* На эмуляторе scan пропускается (телефона в эмуляторной /24 нет) и сразу
|
||||
* наступает fallback на 10.0.2.2. На устройстве fallback запрещён — при
|
||||
* неудачном поиске возвращается пустой адрес (повторный поиск в [connectLoop]).
|
||||
*/
|
||||
private suspend fun discoverPhoneUrl(): String {
|
||||
val found = discovery.findPhoneIp(timeoutMs = MdnsClient.mdnsTimeoutMs(isEmulator()))
|
||||
@@ -150,8 +159,12 @@ class HostConnection(
|
||||
log("app", "нет локального IPv4 — scan /24 пропущен")
|
||||
}
|
||||
}
|
||||
log("app", "mDNS и scan не нашли телефон — fallback на $fallbackUrl")
|
||||
return fallbackUrl
|
||||
if (isEmulator()) {
|
||||
log("app", "эмулятор — fallback на $fallbackUrl")
|
||||
return fallbackUrl
|
||||
}
|
||||
log("app", "mDNS и scan не нашли телефон — повтор поиска через 3с")
|
||||
return ""
|
||||
}
|
||||
|
||||
/** Отправка сообщения на телефон (используется менеджером скачивания). */
|
||||
|
||||
Reference in New Issue
Block a user