mirror of
https://github.com/twinksoftware/Gearslip.git
synced 2026-11-11 00:12:24 +01:00
wireless: keep trying over the phone's own Wi-Fi when Android drops the car's network
This commit is contained in:
1 parent
02d6cb546e
commit
4000e0a9e9
1 file changed
+11
-2
@@ -82,6 +82,8 @@ object WirelessLink {
|
|||||||
@Volatile private var tcp: Socket? = null
|
@Volatile private var tcp: Socket? = null
|
||||||
@Volatile private var network: ConnectivityManager.NetworkCallback? = null
|
@Volatile private var network: ConnectivityManager.NetworkCallback? = null
|
||||||
@Volatile private var worker: Thread? = null
|
@Volatile private var worker: Thread? = null
|
||||||
|
/** Set when Android drops the car's network mid-try, so the rest don't bind to a dead one. */
|
||||||
|
@Volatile private var lostNetwork: Network? = null
|
||||||
private val writeLock = Any()
|
private val writeLock = Any()
|
||||||
|
|
||||||
/** Paired Bluetooth devices, cars or not: the driver picks theirs. Needs BLUETOOTH_CONNECT. */
|
/** Paired Bluetooth devices, cars or not: the driver picks theirs. Needs BLUETOOTH_CONNECT. */
|
||||||
@@ -315,7 +317,11 @@ object WirelessLink {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onLost(net: Network) {
|
override fun onLost(net: Network) {
|
||||||
log.w("Wi-Fi: lost \"$ssid\"")
|
lostNetwork = net
|
||||||
|
log.w(
|
||||||
|
"Wi-Fi: lost \"$ssid\" - Android dropped the car's network. Picking it by hand " +
|
||||||
|
"in the Wi-Fi list does this; the remaining tries go over the phone's own Wi-Fi",
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
network?.let { runCatching { manager.unregisterNetworkCallback(it) } }
|
network?.let { runCatching { manager.unregisterNetworkCallback(it) } }
|
||||||
@@ -363,10 +369,13 @@ object WirelessLink {
|
|||||||
|
|
||||||
private fun connectTcp(context: Context, output: OutputStream, name: String, net: Network, ip: String, port: Int) {
|
private fun connectTcp(context: Context, output: OutputStream, name: String, net: Network, ip: String, port: Int) {
|
||||||
SessionStatus.connecting("Wi-Fi: reaching $name")
|
SessionStatus.connecting("Wi-Fi: reaching $name")
|
||||||
|
lostNetwork = null
|
||||||
var last: Exception? = null
|
var last: Exception? = null
|
||||||
repeat(TCP_TRIES) { attempt ->
|
repeat(TCP_TRIES) { attempt ->
|
||||||
try {
|
try {
|
||||||
val socket = net.socketFactory.createSocket()
|
// A network Android has dropped refuses every bind (EPERM). If the driver joined the
|
||||||
|
// car's Wi-Fi by hand, the phone's ordinary route reaches it, so use that instead.
|
||||||
|
val socket = if (lostNetwork == net) Socket() else net.socketFactory.createSocket()
|
||||||
socket.tcpNoDelay = true
|
socket.tcpNoDelay = true
|
||||||
socket.connect(InetSocketAddress(ip, port), 5_000)
|
socket.connect(InetSocketAddress(ip, port), 5_000)
|
||||||
tcp = socket
|
tcp = socket
|
||||||
|
|||||||
Reference in new issue
Block a user