From 4e4c868c1510e14f8c6c7f49c4ca348d77064742 Mon Sep 17 00:00:00 2001 From: hensm Date: Fri, 20 Oct 2023 20:42:46 +0100 Subject: [PATCH] Add some basic logging --- bridge/src/bridge/components/cast/client.ts | 19 +++++++++- bridge/src/bridge/components/cast/remote.ts | 40 +++++++++++++++++---- bridge/src/bridge/index.ts | 6 ++++ 3 files changed, 58 insertions(+), 7 deletions(-) diff --git a/bridge/src/bridge/components/cast/client.ts b/bridge/src/bridge/components/cast/client.ts index 602d8c7..a820851 100644 --- a/bridge/src/bridge/components/cast/client.ts +++ b/bridge/src/bridge/components/cast/client.ts @@ -13,6 +13,7 @@ interface CastClientConnectOptions { port?: number; onReceiverMessage?: (message: ReceiverMessage) => void; onHeartbeat?: () => void; + onClose?: () => void; } export default class CastClient { @@ -55,6 +56,8 @@ export default class CastClient { sendReceiverMessage(message: DistributiveOmit) { if (!this.receiverChannel) return; + console.error("[CastClient] Sending receiver message", message); + const requestId = this.receiverRequestId++; this.receiverChannel.send({ ...message, requestId }); return requestId; @@ -66,12 +69,25 @@ export default class CastClient { */ connect(host: string, options?: CastClientConnectOptions) { return new Promise((resolve, reject) => { + let isPromiseResolved = false; + // Handle errors - this.client.on("error", reject); + this.client.on("error", err => { + if (!isPromiseResolved) { + isPromiseResolved = true; + reject(); + } + + console.error(`[CastClient] Client at ${host} gave error:`, { + err + }); + }); this.client.on("close", () => { + console.error(`[CastClient] Client at ${host} closed!`); if (this.heartbeatChannel && this.heartbeatIntervalId) { clearInterval(this.heartbeatIntervalId); } + options?.onClose?.(); }); this.client.connect( @@ -98,6 +114,7 @@ export default class CastClient { options?.onHeartbeat?.(); }, HEARTBEAT_INTERVAL_MS); + isPromiseResolved = true; resolve(); } ); diff --git a/bridge/src/bridge/components/cast/remote.ts b/bridge/src/bridge/components/cast/remote.ts index d8981f8..4ea3ce3 100644 --- a/bridge/src/bridge/components/cast/remote.ts +++ b/bridge/src/bridge/components/cast/remote.ts @@ -71,17 +71,36 @@ export default class Remote extends CastClient { // Handle app creation/discovery if (application && !this.transportClient) { + console.error( + `[Remote]: Creating transport at ${this.host} for: `, + { application } + ); + this.transportClient = new RemoteTransport( application.transportId, message => this.onMediaMessage(message) ); - this.transportClient.connect(this.host).then(() => { - this.transportClient?.sendMediaMessage({ - type: "GET_STATUS", - requestId: 0 + this.transportClient + .connect(this.host, { + onClose: () => { + console.error( + `[Remote] Transport at ${this.host} client closed!` + ); + this.transportClient = undefined; + } + }) + .then(() => { + this.transportClient?.sendMediaMessage({ + type: "GET_STATUS", + requestId: 0 + }); + }) + .catch(() => { + console.error( + `[Remote] Failed to create transport at ${this.host}` + ); }); - }); this.options?.onApplicationFound?.(); } @@ -116,6 +135,15 @@ class RemoteTransport extends CastClient { } sendMediaMessage(message: SenderMediaMessage) { - this.mediaChannel.send(message); + console.error("[Remote] Sending receiver message", message); + + try { + this.mediaChannel.send(message); + } catch (err) { + console.error("[Remote] Failed to send media message!", { + message, + err + }); + } } } diff --git a/bridge/src/bridge/index.ts b/bridge/src/bridge/index.ts index 7232f7a..67f9505 100755 --- a/bridge/src/bridge/index.ts +++ b/bridge/src/bridge/index.ts @@ -51,6 +51,9 @@ messaging.on("message", (message: Message) => { }); if (shouldWatchStatus) { + console.error( + `Device found (id: ${device.id}, name: ${device.friendlyName}, host: ${device.host}), removing remote!` + ); remotes.set( device.id, new Remote(device.host, { @@ -90,6 +93,9 @@ messaging.on("message", (message: Message) => { if (shouldWatchStatus) { if (remotes.has(deviceId)) { + console.error( + `Device lost (id: ${deviceId}), removing remote!` + ); remotes.get(deviceId)?.disconnect(); remotes.delete(deviceId); }