From 99a40d8302b539bf042398ccba89170e7b20c80b Mon Sep 17 00:00:00 2001 From: hensm Date: Sat, 24 Apr 2021 05:24:25 +0100 Subject: [PATCH] Fix mdns/castv2 uncaught errors --- .../bridge/components/chromecast/Session.ts | 13 +++++-- app/src/bridge/components/chromecast/index.ts | 4 +++ app/src/bridge/components/discovery.ts | 36 +++++++++++-------- 3 files changed, 37 insertions(+), 16 deletions(-) diff --git a/app/src/bridge/components/chromecast/Session.ts b/app/src/bridge/components/chromecast/Session.ts index 48d4784..f39c2db 100644 --- a/app/src/bridge/components/chromecast/Session.ts +++ b/app/src/bridge/components/chromecast/Session.ts @@ -33,8 +33,17 @@ export default class Session { , private sessionId: string , private referenceId: string) { - this.client = new Client(); - this.client.connect({ host, port }, this.onConnect.bind(this)); + const client = new Client(); + + client.on("error", err => { + console.error(`castv2 error: ${err}`); + }); + client.on("close", () => { + // TODO: Don't send new data + }); + + client.connect({ host, port }, this.onConnect.bind(this)); + this.client = client; } private onConnect () { diff --git a/app/src/bridge/components/chromecast/index.ts b/app/src/bridge/components/chromecast/index.ts index 72c5270..b954126 100644 --- a/app/src/bridge/components/chromecast/index.ts +++ b/app/src/bridge/components/chromecast/index.ts @@ -76,4 +76,8 @@ export function stopReceiverApp (host: string, port: number) { clientConnection.send({ type: "CONNECT" }); clientReceiver.send({ type: "STOP", requestId: 1 }); }); + + client.on("error", err => { + console.error(`castv2 error (stopReceiverApp): ${err}`); + }); } diff --git a/app/src/bridge/components/discovery.ts b/app/src/bridge/components/discovery.ts index 862df4b..14aeef5 100644 --- a/app/src/bridge/components/discovery.ts +++ b/app/src/bridge/components/discovery.ts @@ -7,6 +7,13 @@ import { ReceiverStatus } from "../types"; import { sendMessage } from "../lib/messaging"; +interface CastTxtRecord { + id: string; cd: string; rm: string; + ve: string; md: string; ic: string; + fn: string; ca: string; st: string; + bs: string; nf: string; rs: string; +} + const browser = mdns.createBrowser(mdns.tcp("googlecast"), { resolverSequence: [ mdns.rst.DNSServiceResolve() @@ -19,24 +26,26 @@ const browser = mdns.createBrowser(mdns.tcp("googlecast"), { }); function onBrowserServiceUp (service: mdns.Service) { + // Ignore without txt record + if (!service.txtRecord) { + return; + } + + const txtRecord = service.txtRecord as CastTxtRecord; + sendMessage({ subject: "main:serviceUp" , data: { host: service.addresses[0] , port: service.port - , id: service.txtRecord.id - , friendlyName: service.txtRecord.fn + , id: txtRecord.id + , friendlyName: txtRecord.fn } }); } function onBrowserServiceDown (service: mdns.Service) { - sendMessage({ - subject: "main:serviceDown" - , data: { - id: service.txtRecord.id - } - }); + // TODO: Fix service down detection } browser.on("serviceUp", onBrowserServiceUp); @@ -59,6 +68,10 @@ export function startDiscovery (options: InitializeOptions) { const statusListeners = new Map(); function onStatusBrowserServiceUp (service: mdns.Service) { + if (!service.txtRecord) { + return; + } + const { id } = service.txtRecord; const listener = new StatusListener( @@ -97,12 +110,7 @@ export function startDiscovery (options: InitializeOptions) { } function onStatusBrowserServiceDown (service: mdns.Service) { - const { id } = service.txtRecord; - - if (statusListeners.has(id)) { - statusListeners.get(id)!.deregister(); - statusListeners.delete(id); - } + // TODO: Fix service down detection } }