AeroToss: кнопка обновления + исправление mDNS обнаружения
- Добавлена кнопка 'Обновить' (rescan) на главный экран - Исправлен сервисный тип: _aerotoss._tcp. (без .local.) для совместимости - JMDNS слушает оба варианта типа: _aerotoss._tcp. и _aerotoss._tcp - Android NSD: гибкое сопоставление типа сервиса (contains aerotoss) - Добавлено логирование в JmdnsDiscovery для отладки - AeroTossManager.rescan() без параметров (берёт порт из transfer)
This commit is contained in:
@@ -32,6 +32,7 @@ class JmdnsDiscovery : DiscoveryManager {
|
||||
discoveryThread = Thread {
|
||||
try {
|
||||
val addr = findLocalAddress() ?: return@Thread
|
||||
println("AeroToss: Starting mDNS on ${addr.hostAddress}")
|
||||
jmdns = JmDNS.create(addr, "aerotoss-$deviceId")
|
||||
|
||||
val serviceInfo = ServiceInfo.create(
|
||||
@@ -41,13 +42,16 @@ class JmdnsDiscovery : DiscoveryManager {
|
||||
"path=/ aerotoss=1 id=$deviceId name=$deviceName"
|
||||
)
|
||||
jmdns?.registerService(serviceInfo)
|
||||
println("AeroToss: Registered service on port $servicePort")
|
||||
|
||||
serviceListener = object : ServiceListener {
|
||||
override fun serviceAdded(event: ServiceEvent) {
|
||||
println("AeroToss: Service added: ${event.name} type=${event.type}")
|
||||
jmdns?.requestServiceInfo(event.type, event.name, true)
|
||||
}
|
||||
|
||||
override fun serviceRemoved(event: ServiceEvent) {
|
||||
println("AeroToss: Service removed: ${event.name}")
|
||||
discoveredDevices.remove(event.name)
|
||||
_devices.value = discoveredDevices.values.toList()
|
||||
}
|
||||
@@ -55,6 +59,7 @@ class JmdnsDiscovery : DiscoveryManager {
|
||||
override fun serviceResolved(event: ServiceEvent) {
|
||||
val info = event.info
|
||||
val hostAddresses = info.hostAddresses
|
||||
println("AeroToss: Service resolved: ${event.name} addresses=${hostAddresses.toList()}")
|
||||
if (hostAddresses.isNotEmpty()) {
|
||||
val attributes = info.textBytes?.let { parseAttributes(it) } ?: emptyMap()
|
||||
val id = attributes["id"] ?: event.name
|
||||
@@ -75,9 +80,15 @@ class JmdnsDiscovery : DiscoveryManager {
|
||||
}
|
||||
|
||||
jmdns?.addServiceListener(SERVICE_TYPE, serviceListener)
|
||||
|
||||
// Also listen without the trailing dot for compatibility
|
||||
jmdns?.addServiceListener("_aerotoss._tcp", serviceListener)
|
||||
|
||||
println("AeroToss: Listening for services on $SERVICE_TYPE")
|
||||
Thread.currentThread().join()
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
println("AeroToss: mDNS error: ${e.message}")
|
||||
}
|
||||
}.apply {
|
||||
isDaemon = true
|
||||
@@ -91,6 +102,7 @@ class JmdnsDiscovery : DiscoveryManager {
|
||||
discoveryThread = null
|
||||
try {
|
||||
serviceListener?.let { jmdns?.removeServiceListener(SERVICE_TYPE, it) }
|
||||
serviceListener?.let { jmdns?.removeServiceListener("_aerotoss._tcp", it) }
|
||||
jmdns?.unregisterAllServices()
|
||||
jmdns?.close()
|
||||
} catch (_: Exception) {
|
||||
@@ -142,7 +154,7 @@ class JmdnsDiscovery : DiscoveryManager {
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val SERVICE_TYPE = "_aerotoss._tcp.local."
|
||||
const val SERVICE_TYPE = "_aerotoss._tcp."
|
||||
const val SERVICE_NAME = "AeroToss"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user