nativescript-dna-netservices
Version:
NativeScript plugin for Bonjour/ZeroConf and network monitoring. RxJS based APIs for Android and iOS.
72 lines • 2.97 kB
JavaScript
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