UNPKG

nativescript-dna-netservices

Version:

NativeScript plugin for Bonjour/ZeroConf and network monitoring. RxJS based APIs for Android and iOS.

72 lines 2.97 kB
import { Observable } from "rxjs"; import * as application from "@nativescript/core/application"; import { ZeroConf, zeroConfStatus } from "./netservice.common"; import { mapError } from "./zeroconf-service.common"; import { startWith } from "rxjs/operators"; const MORE_COMING = 1 << 0; const SERVICE_LOST = 1 << 8; export class ZeroConfServiceBrowser { searchForBrowsableDomains() { return new Observable((observer) => { let status = zeroConfStatus.add; status |= zeroConfStatus.stopComing; observer.next(new ZeroConf({ status, domain: "local." })); observer.complete(); }); } searchForRegistrationDomains() { return new Observable((observer) => { let status = zeroConfStatus.add; status |= zeroConfStatus.stopComing; observer.next(new ZeroConf({ status, domain: "local." })); observer.complete(); }); } searchForServicesOfTypeInDomain(type, domain) { const observable = new Observable((observer) => { const nextHandler = new io.reactivex.functions.Consumer({ accept: bonjourService => { let status = zeroConfStatus.unKnown; const flags = bonjourService.getFlags(); if (flags & SERVICE_LOST) { status = zeroConfStatus.remove; } else { status = zeroConfStatus.add; } status |= flags & MORE_COMING ? zeroConfStatus.moreComing : zeroConfStatus.stopComing; observer.next(new ZeroConf({ status: status, name: bonjourService.getServiceName(), type: bonjourService.getRegType(), domain: bonjourService.getDomain(), hostName: bonjourService.getHostname(), port: bonjourService.getPort() })); } }); const errorHandler = new io.reactivex.functions.Consumer({ accept: ec => { observer.error(mapError(ec)); } }); const rxdnssd = new com.github.druk.rx2dnssd.Rx2DnssdBindable(application.android.context); const disposable = rxdnssd .browse(type, domain) .subscribe(nextHandler, errorHandler); return () => disposable.dispose(); }); return observable.pipe(startWith(new ZeroConf({ status: zeroConfStatus.serviceBegins, type: type, domain: domain }))); } stop() { console.assert(false, "On Android stop api is not implemented."); } } //# sourceMappingURL=zeroconf-service-browser.android.js.map