| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- 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")
- }
- }
- }
|