# native-mdns A Kotlin multiplatform library for mdns announcer(mdns server), only broadcast is supported, Also, nmdns can be compiled to shared/static lib for other language calling, see [c++ example](#cpp) Supported platforms: 1. windows64(mingwx64) 2. linuxX64 3. linuxArm64 4. macosArm64 5. macosX64 6. jvm(11 or later) Supported srv type 1. A 2. PTR > AAAA is not supported AirPlay2(_airplay._tcp.local.) is tested # How to use Add maven repository ```kotlin repositories { mavenCentral() maven("https://repo.maven.rtast.cn/releases") } ``` Add dependency ```kotlin kotlin { linuxX64() // Add other platforms sourceSets { commonMain.dependencies { implementation("cn.rtast.nmdns:native-mdns:") } } } ``` There is a simple airplay2 service ```kotlin val service = registerService( serviceType = "_airplay._tcp.local.", serviceName = "AP@RTAST", hostname = "rtakland.local.", ipAddress = "192.168.10.104", port = 7001, bindAddress = "192.168.10.104", mdnsPort = 5356, txtRecords = listOf("key1=value1", "key2=value2") ) while (true) { service.broadcast() delay(2000L) // or use cn.rtast.nmdns.sleep1(2) sleep 2 seconds } ``` # cpp ```cpp #include #include #include "libnmdns_api.h" volatile sig_atomic_t keepRunning = 1; void handle_sigint(int sig) { std::printf("\nCaught signal %d, exiting...\n", sig); keepRunning = 0; } int main() { libnmdns_kref_kotlin_collections_List txt = create_txt_records(); add_txt_record(txt, "deviceid=ef:42:0d:76:f1:97"); add_txt_record(txt, "model=AppleTV3,2C"); add_txt_record(txt, "features=0x5A7FFFF7,0x1E"); add_txt_record(txt, "srcvers=220.68"); add_txt_record(txt, "pk=f3769a660475d27b4f6040381d784645e13e21c53e6d2da6a8c3d757086fc336"); libnmdns_kref_cn_rtast_nmdns_NMDNSAnnouncer service = register_service( "_airplay._tcp.local.", "AP@RTAST", "rtakland.local.", "192.168.10.104", 7001, 3652, "192.168.10.104", txt ); std::signal(SIGINT, handle_sigint); std::signal(SIGTERM, handle_sigint); std::signal(SIGHUP, handle_sigint); std::signal(SIGQUIT, handle_sigint); std::printf("Running... Press Ctrl+C to exit\n"); while (keepRunning) { broadcast(service); sleep1(2); } return 0; } ```