Support event hooking
This commit is contained in:
4 files changed
+61
-6
No files matched your search
@@ -20,6 +20,9 @@ Supported record type
|
|||||||
3. SRV
|
3. SRV
|
||||||
4. TXT
|
4. TXT
|
||||||
|
|
||||||
|
Supported features
|
||||||
|
1. Event hooking(Kotlin only)
|
||||||
|
|
||||||
> AAAA is not supported
|
> AAAA is not supported
|
||||||
|
|
||||||
AirPlay2(_airplay._tcp.local.) is tested
|
AirPlay2(_airplay._tcp.local.) is tested
|
||||||
@@ -53,7 +56,21 @@ val service = registerService(
|
|||||||
bindAddress = "192.168.10.104",
|
bindAddress = "192.168.10.104",
|
||||||
mdnsPort = 5356,
|
mdnsPort = 5356,
|
||||||
txtRecords = listOf("key1=value1", "key2=value2")
|
txtRecords = listOf("key1=value1", "key2=value2")
|
||||||
)
|
) {
|
||||||
|
// This block is optional
|
||||||
|
// Event hooking in this block
|
||||||
|
onBroadcast {
|
||||||
|
println("broadcasted")
|
||||||
|
}
|
||||||
|
|
||||||
|
onRegister {
|
||||||
|
println("reg")
|
||||||
|
}
|
||||||
|
|
||||||
|
onUnregistered {
|
||||||
|
println("unreg")
|
||||||
|
}
|
||||||
|
}
|
||||||
while (true) {
|
while (true) {
|
||||||
service.broadcast()
|
service.broadcast()
|
||||||
delay(2000L) // or use cn.rtast.nmdns.sleep1(2) sleep 2 seconds, this function is not a suspended function
|
delay(2000L) // or use cn.rtast.nmdns.sleep1(2) sleep 2 seconds, this function is not a suspended function
|
||||||
|
|||||||
+1
-1
@@ -1,3 +1,3 @@
|
|||||||
kotlin.code.style=official
|
kotlin.code.style=official
|
||||||
kotlin.native.enableKlibsCrossCompilation=true
|
kotlin.native.enableKlibsCrossCompilation=true
|
||||||
libVersion=0.1.1
|
libVersion=0.1.2
|
||||||
@@ -12,6 +12,17 @@ package cn.rtast.nmdns
|
|||||||
import kotlin.experimental.ExperimentalNativeApi
|
import kotlin.experimental.ExperimentalNativeApi
|
||||||
import kotlin.native.CName
|
import kotlin.native.CName
|
||||||
|
|
||||||
|
public fun NMDNSAnnouncer.onRegister(callback: () -> Unit) {
|
||||||
|
onRegisterCallback = callback
|
||||||
|
}
|
||||||
|
|
||||||
|
public fun NMDNSAnnouncer.onBroadcast(callback: () -> Unit) {
|
||||||
|
onBroadcastCallback = callback
|
||||||
|
}
|
||||||
|
|
||||||
|
public fun NMDNSAnnouncer.onUnregistered(callback: () -> Unit) {
|
||||||
|
onUnregisterCallback = callback
|
||||||
|
}
|
||||||
|
|
||||||
public data class NMDNSAnnouncer(
|
public data class NMDNSAnnouncer(
|
||||||
/**
|
/**
|
||||||
@@ -52,6 +63,11 @@ public data class NMDNSAnnouncer(
|
|||||||
*/
|
*/
|
||||||
internal val packet: ByteArray,
|
internal val packet: ByteArray,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
internal var onRegisterCallback: (() -> Unit)? = null
|
||||||
|
internal var onBroadcastCallback: (() -> Unit)? = null
|
||||||
|
internal var onUnregisterCallback: (() -> Unit)? = null
|
||||||
|
|
||||||
override fun equals(other: Any?): Boolean {
|
override fun equals(other: Any?): Boolean {
|
||||||
if (this === other) return true
|
if (this === other) return true
|
||||||
if (other == null || this::class != other::class) return false
|
if (other == null || this::class != other::class) return false
|
||||||
@@ -88,6 +104,7 @@ public data class NMDNSAnnouncer(
|
|||||||
* broadcast packet
|
* broadcast packet
|
||||||
*/
|
*/
|
||||||
public fun broadcast() {
|
public fun broadcast() {
|
||||||
|
this.onBroadcastCallback?.invoke()
|
||||||
this.server.send(packet)
|
this.server.send(packet)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,6 +112,7 @@ public data class NMDNSAnnouncer(
|
|||||||
* unregister service
|
* unregister service
|
||||||
*/
|
*/
|
||||||
public fun unregister() {
|
public fun unregister() {
|
||||||
|
this.onUnregisterCallback?.invoke()
|
||||||
this.server.destroy()
|
this.server.destroy()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -140,10 +158,12 @@ public fun registerService(
|
|||||||
mdnsPort: Int = 9872,
|
mdnsPort: Int = 9872,
|
||||||
bindAddress: String,
|
bindAddress: String,
|
||||||
txtRecords: List<String>,
|
txtRecords: List<String>,
|
||||||
|
callback: NMDNSAnnouncer.() -> Unit = {},
|
||||||
): NMDNSAnnouncer {
|
): NMDNSAnnouncer {
|
||||||
val server = createSocket()
|
val socket = createSocket()
|
||||||
.bind(bindAddress, port)
|
.bind(bindAddress, port)
|
||||||
return NMDNSAnnouncer(
|
|
||||||
|
val server = NMDNSAnnouncer(
|
||||||
serviceType,
|
serviceType,
|
||||||
serviceName,
|
serviceName,
|
||||||
hostname,
|
hostname,
|
||||||
@@ -151,9 +171,12 @@ public fun registerService(
|
|||||||
port,
|
port,
|
||||||
mdnsPort,
|
mdnsPort,
|
||||||
txtRecords,
|
txtRecords,
|
||||||
server,
|
socket,
|
||||||
buildPacket(serviceType, "$serviceName.$serviceType", hostname, ipAddress, port, txtRecords),
|
buildPacket(serviceType, "$serviceName.$serviceType", hostname, ipAddress, port, txtRecords),
|
||||||
)
|
)
|
||||||
|
server.callback()
|
||||||
|
server.onRegisterCallback?.invoke()
|
||||||
|
return server
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun buildPacket(
|
internal fun buildPacket(
|
||||||
|
|||||||
@@ -7,6 +7,9 @@
|
|||||||
|
|
||||||
package test
|
package test
|
||||||
|
|
||||||
|
import cn.rtast.nmdns.onBroadcast
|
||||||
|
import cn.rtast.nmdns.onRegister
|
||||||
|
import cn.rtast.nmdns.onUnregistered
|
||||||
import cn.rtast.nmdns.randomMacAddress
|
import cn.rtast.nmdns.randomMacAddress
|
||||||
import cn.rtast.nmdns.registerService
|
import cn.rtast.nmdns.registerService
|
||||||
import cn.rtast.nmdns.sleep1
|
import cn.rtast.nmdns.sleep1
|
||||||
@@ -30,7 +33,19 @@ class TestLinux {
|
|||||||
"srcvers=220.68",
|
"srcvers=220.68",
|
||||||
"pk=f3769a660475d27b4f6040381d784645e13e21c53e6d2da6a8c3d757086fc336"
|
"pk=f3769a660475d27b4f6040381d784645e13e21c53e6d2da6a8c3d757086fc336"
|
||||||
)
|
)
|
||||||
)
|
) {
|
||||||
|
onBroadcast {
|
||||||
|
println(111)
|
||||||
|
}
|
||||||
|
|
||||||
|
onRegister {
|
||||||
|
println("reg")
|
||||||
|
}
|
||||||
|
|
||||||
|
onUnregistered {
|
||||||
|
println("unreg")
|
||||||
|
}
|
||||||
|
}
|
||||||
while (true) {
|
while (true) {
|
||||||
service.broadcast()
|
service.broadcast()
|
||||||
sleep1(2)
|
sleep1(2)
|
||||||
|
|||||||
Reference in New Issue
Block a user