mdns.ts 902 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import { Bonjour } from "bonjour-service"
  2. let bonjour: Bonjour | undefined
  3. let currentPort: number | undefined
  4. export function publish(port: number, domain?: string) {
  5. if (currentPort === port) return
  6. if (bonjour) unpublish()
  7. try {
  8. const host = domain ?? "kirincode.local"
  9. const name = `opencode-${port}`
  10. bonjour = new Bonjour()
  11. const service = bonjour.publish({
  12. name,
  13. type: "http",
  14. host,
  15. port,
  16. txt: { path: "/" },
  17. })
  18. service.on("error", () => {})
  19. currentPort = port
  20. } catch {
  21. if (bonjour) {
  22. try {
  23. bonjour.destroy()
  24. } catch {}
  25. }
  26. bonjour = undefined
  27. currentPort = undefined
  28. }
  29. }
  30. export function unpublish() {
  31. if (bonjour) {
  32. try {
  33. bonjour.unpublishAll()
  34. bonjour.destroy()
  35. } catch {}
  36. bonjour = undefined
  37. currentPort = undefined
  38. }
  39. }
  40. export * as MDNS from "./mdns"