From 3770acf56104f6401ecad3402eb0d10f93035a57 Mon Sep 17 00:00:00 2001 From: Mygod Date: Mon, 12 Aug 2019 13:13:29 +0800 Subject: [PATCH] Avoid runBlocking --- .../src/main/java/be/mygod/vpnhotspot/net/Routing.kt | 11 ++++++----- .../mygod/vpnhotspot/net/monitor/TrafficRecorder.kt | 5 ++--- .../java/be/mygod/vpnhotspot/room/ClientRecord.kt | 4 ++++ .../java/be/mygod/vpnhotspot/room/TrafficRecord.kt | 4 ++-- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/net/Routing.kt b/mobile/src/main/java/be/mygod/vpnhotspot/net/Routing.kt index 8e4866bb..22fe7ab3 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/net/Routing.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/net/Routing.kt @@ -13,10 +13,12 @@ import be.mygod.vpnhotspot.room.AppDatabase import be.mygod.vpnhotspot.util.RootSession import be.mygod.vpnhotspot.util.computeIfAbsentCompat import be.mygod.vpnhotspot.widget.SmartSnackbar -import kotlinx.coroutines.runBlocking import timber.log.Timber import java.io.IOException -import java.net.* +import java.net.Inet4Address +import java.net.InetAddress +import java.net.NetworkInterface +import java.net.SocketException /** * A transaction wrapper that helps set up routing environment. @@ -221,9 +223,8 @@ class Routing(private val caller: Any, private val downstream: String) : IpNeigh override fun onIpNeighbourAvailable(neighbours: Collection) = synchronized(this) { val toRemove = HashSet(clients.keys) for (neighbour in neighbours) { - if (neighbour.dev != downstream || neighbour.ip !is Inet4Address || runBlocking { - AppDatabase.instance.clientRecordDao.lookupOrDefault(neighbour.lladdr) - }.blocked) continue + if (neighbour.dev != downstream || neighbour.ip !is Inet4Address || + AppDatabase.instance.clientRecordDao.lookupOrDefaultBlocking(neighbour.lladdr).blocked) continue toRemove.remove(neighbour.ip) try { clients.computeIfAbsentCompat(neighbour.ip) { Client(neighbour.ip, neighbour.lladdr) } diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/net/monitor/TrafficRecorder.kt b/mobile/src/main/java/be/mygod/vpnhotspot/net/monitor/TrafficRecorder.kt index 53b501e2..4cf954de 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/net/monitor/TrafficRecorder.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/net/monitor/TrafficRecorder.kt @@ -11,7 +11,6 @@ import be.mygod.vpnhotspot.util.RootSession import be.mygod.vpnhotspot.util.parseNumericAddress import be.mygod.vpnhotspot.util.putIfAbsentCompat import be.mygod.vpnhotspot.widget.SmartSnackbar -import kotlinx.coroutines.runBlocking import timber.log.Timber import java.net.InetAddress import java.util.concurrent.TimeUnit @@ -27,7 +26,7 @@ object TrafficRecorder { fun register(ip: InetAddress, downstream: String, mac: Long) { val record = TrafficRecord(mac = mac, ip = ip, downstream = downstream) - runBlocking { AppDatabase.instance.trafficRecordDao.insert(record) } + AppDatabase.instance.trafficRecordDao.insert(record) synchronized(this) { DebugHelper.log(TAG, "Registering $ip%$downstream") check(records.putIfAbsentCompat(Pair(ip, downstream), record) == null) @@ -120,7 +119,7 @@ object TrafficRecorder { check(record.sentBytes >= 0) check(record.receivedPackets >= 0) check(record.receivedBytes >= 0) - runBlocking { AppDatabase.instance.trafficRecordDao.insert(record) } + AppDatabase.instance.trafficRecordDao.insert(record) } foregroundListeners(records.values, oldRecords) } diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/room/ClientRecord.kt b/mobile/src/main/java/be/mygod/vpnhotspot/room/ClientRecord.kt index 4504eca1..8b495e55 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/room/ClientRecord.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/room/ClientRecord.kt @@ -12,6 +12,10 @@ data class ClientRecord(@PrimaryKey var macLookupPending: Boolean = true) { @androidx.room.Dao abstract class Dao { + @Query("SELECT * FROM `ClientRecord` WHERE `mac` = :mac") + protected abstract fun lookupBlocking(mac: Long): ClientRecord? + fun lookupOrDefaultBlocking(mac: Long) = lookupBlocking(mac) ?: ClientRecord(mac) + @Query("SELECT * FROM `ClientRecord` WHERE `mac` = :mac") protected abstract suspend fun lookup(mac: Long): ClientRecord? suspend fun lookupOrDefault(mac: Long) = lookup(mac) ?: ClientRecord(mac) diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/room/TrafficRecord.kt b/mobile/src/main/java/be/mygod/vpnhotspot/room/TrafficRecord.kt index 7cab74d7..7ebc224d 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/room/TrafficRecord.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/room/TrafficRecord.kt @@ -41,8 +41,8 @@ data class TrafficRecord( @androidx.room.Dao abstract class Dao { @Insert - protected abstract suspend fun insertInternal(value: TrafficRecord): Long - suspend fun insert(value: TrafficRecord) { + protected abstract fun insertInternal(value: TrafficRecord): Long + fun insert(value: TrafficRecord) { check(value.id == null) value.id = insertInternal(value) }