Files
vpnhotspotmod/mobile/src/main/java/be/mygod/vpnhotspot/util/Events.kt
Mygod 38f95a382e VPN Hotspot 2.0: Client+ (#39)
Fix #13, #38. I don't have a lot of confidence that this would work very well for every device.

Also here's an SQL command that hopefully somebody could make into the app for me: `SELECT TrafficRecord.mac, SUM(TrafficRecord.sentPackets), SUM(TrafficRecord.sentBytes), SUM(TrafficRecord.receivedPackets), SUM(TrafficRecord.receivedBytes) FROM TrafficRecord LEFT JOIN TrafficRecord AS Next ON TrafficRecord.id = Next.previousId WHERE Next.id IS NULL GROUP BY TrafficRecord.mac;`
2018-10-02 21:12:19 +08:00

35 lines
1018 B
Kotlin

package be.mygod.vpnhotspot.util
import java.util.concurrent.ConcurrentHashMap
/**
* These class are based off https://github.com/1blustone/kotlin-events.
*/
open class Event0 : ConcurrentHashMap<Any, () -> Unit>() {
operator fun invoke() {
for ((_, handler) in this) handler()
}
}
class StickyEvent0 : Event0() {
override fun put(key: Any, value: () -> Unit): (() -> Unit)? =
super.put(key, value).also { if (it == null) value() }
}
open class Event1<T> : ConcurrentHashMap<Any, (T) -> Unit>() {
operator fun invoke(arg: T) {
for ((_, handler) in this) handler(arg)
}
}
class StickyEvent1<T>(private val fire: () -> T) : Event1<T>() {
override fun put(key: Any, value: (T) -> Unit): ((T) -> Unit)? =
super.put(key, value).also { if (it == null) value(fire()) }
}
open class Event2<T1, T2> : ConcurrentHashMap<Any, (T1, T2) -> Unit>() {
operator fun invoke(arg1: T1, arg2: T2) {
for ((_, handler) in this) handler(arg1, arg2)
}
}