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

@@ -12,6 +12,17 @@ package cn.rtast.nmdns
import kotlin.experimental.ExperimentalNativeApi
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(
/**
@@ -52,6 +63,11 @@ public data class NMDNSAnnouncer(
*/
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 {
if (this === other) return true
if (other == null || this::class != other::class) return false
@@ -88,6 +104,7 @@ public data class NMDNSAnnouncer(
* broadcast packet
*/
public fun broadcast() {
this.onBroadcastCallback?.invoke()
this.server.send(packet)
}
@@ -95,6 +112,7 @@ public data class NMDNSAnnouncer(
* unregister service
*/
public fun unregister() {
this.onUnregisterCallback?.invoke()
this.server.destroy()
}
}
@@ -140,10 +158,12 @@ public fun registerService(
mdnsPort: Int = 9872,
bindAddress: String,
txtRecords: List<String>,
callback: NMDNSAnnouncer.() -> Unit = {},
): NMDNSAnnouncer {
val server = createSocket()
val socket = createSocket()
.bind(bindAddress, port)
return NMDNSAnnouncer(
val server = NMDNSAnnouncer(
serviceType,
serviceName,
hostname,
@@ -151,9 +171,12 @@ public fun registerService(
port,
mdnsPort,
txtRecords,
server,
socket,
buildPacket(serviceType, "$serviceName.$serviceType", hostname, ipAddress, port, txtRecords),
)
server.callback()
server.onRegisterCallback?.invoke()
return server
}
internal fun buildPacket(