mirror of
https://gitea.toothfairyai.com/ToothFairyAI/tf_code.git
synced 2026-03-29 21:33:54 +00:00
58 lines
1.3 KiB
TypeScript
58 lines
1.3 KiB
TypeScript
import { Log } from "@/util/log"
|
|
import Bonjour from "bonjour-service"
|
|
|
|
const log = Log.create({ service: "mdns" })
|
|
|
|
export namespace MDNS {
|
|
let bonjour: Bonjour | undefined
|
|
let currentPort: number | undefined
|
|
|
|
export function publish(port: number, name = "opencode") {
|
|
if (currentPort === port) return
|
|
if (bonjour) unpublish()
|
|
|
|
try {
|
|
bonjour = new Bonjour()
|
|
const service = bonjour.publish({
|
|
name,
|
|
type: "http",
|
|
port,
|
|
txt: { path: "/" },
|
|
})
|
|
|
|
service.on("up", () => {
|
|
log.info("mDNS service published", { name, port })
|
|
})
|
|
|
|
service.on("error", (err) => {
|
|
log.error("mDNS service error", { error: err })
|
|
})
|
|
|
|
currentPort = port
|
|
} catch (err) {
|
|
log.error("mDNS publish failed", { error: err })
|
|
if (bonjour) {
|
|
try {
|
|
bonjour.destroy()
|
|
} catch {}
|
|
}
|
|
bonjour = undefined
|
|
currentPort = undefined
|
|
}
|
|
}
|
|
|
|
export function unpublish() {
|
|
if (bonjour) {
|
|
try {
|
|
bonjour.unpublishAll()
|
|
bonjour.destroy()
|
|
} catch (err) {
|
|
log.error("mDNS unpublish failed", { error: err })
|
|
}
|
|
bonjour = undefined
|
|
currentPort = undefined
|
|
log.info("mDNS service unpublished")
|
|
}
|
|
}
|
|
}
|