| 107 | service.updater.interval = 0; |
| 108 | } |
| 109 | remove(service, callback) { |
| 110 | if ("string" === typeof service) { |
| 111 | service += ".local"; |
| 112 | service = this.monitors.findIndex(item => item.service === service); |
| 113 | if (service >= 0) { |
| 114 | callback = this.monitors[service].callbacks.findIndex(item => item === callback); |
| 115 | if (callback < 0) throw new Error("callback not found"); |
| 116 | this.monitors[service].callbacks.splice(callback, 1); |
| 117 | if (0 === this.monitors[service].callbacks.length) { |
| 118 | this.monitors[service].close = true; |
| 119 | Timer.clear(this.monitors[service].timer); |
| 120 | this.monitors.splice(service, 1); |
| 121 | } |
| 122 | } |
| 123 | } |
| 124 | else { |
| 125 | const index = this.services.indexOf(service); |
| 126 | if (index < 0) throw new Error("service not found"); |
| 127 | |
| 128 | this.services.splice(index, 1); |
| 129 | try { |
| 130 | this.write(MDNS.IP, MDNS.PORT, this.reply(null, 0x0F, service, true)); |
| 131 | } |
| 132 | catch { |
| 133 | // write fails if socket closed |
| 134 | } |
| 135 | |
| 136 | Timer.clear(service.timer); |
| 137 | delete service.timer; |
| 138 | } |
| 139 | } |
| 140 | monitor(service, callback) { |
| 141 | service += ".local"; |
| 142 | let monitor = this.monitors.find(item => item.service === service); |