Support event hooking

This commit is contained in:
2025-10-31 06:51:13 +08:00
parent 2328bf7755
commit 896883a3e0
4 files changed
+61 -6

No files matched your search

+18 -1
View File
@@ -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
View File
@@ -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(
+16 -1
View File
@@ -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)