From d196f4201b3cb237d0dcd4cc51a39411145a0c42 Mon Sep 17 00:00:00 2001 From: hensm Date: Fri, 21 Feb 2020 12:21:16 +0000 Subject: [PATCH] Handle media session errors --- ext/src/shim/cast/media/classes/Media.ts | 28 +++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/ext/src/shim/cast/media/classes/Media.ts b/ext/src/shim/cast/media/classes/Media.ts index 83d6fb1..7175382 100644 --- a/ext/src/shim/cast/media/classes/Media.ts +++ b/ext/src/shim/cast/media/classes/Media.ts @@ -34,6 +34,7 @@ import { CallbacksMap const _id = new WeakMap(); +const _isActive = new WeakMap(); const _updateListeners = new WeakMap>(); const _sendMediaMessageCallbacks = new WeakMap(); @@ -64,6 +65,7 @@ export default class Media { , _internalSessionId: string) { _id.set(this, uuid()); + _isActive.set(this, true); _updateListeners.set(this, new Set()); _sendMediaMessageCallbacks.set(this, new Map()); @@ -288,9 +290,15 @@ export default class Media { , successCallback?: SuccessCallback , errorCallback?: ErrorCallback): void { - this._sendMediaMessage({ - type: "STOP" - }, successCallback, errorCallback); + this._sendMediaMessage( + { type: "STOP" } + , () => { + _isActive.set(this, false); + if (successCallback) { + successCallback(); + } + } + , errorCallback); } public supportsCommand (_command: string): boolean { @@ -304,6 +312,20 @@ export default class Media { , successCallback?: SuccessCallback , errorCallback?: ErrorCallback) { + // TODO: Handle this and other errors better + if (!_isActive.get(this)) { + if (errorCallback) { + errorCallback(new _Error(ErrorCode.SESSION_ERROR + , "INVALID_MEDIA_SESSION_ID" + , { + type: "INVALID_REQUEST" + , reason: "INVALID_MEDIA_SESSION_ID" + })); + } + + return; + } + message.mediaSessionId = this.mediaSessionId; message.requestId = 0; message.sessionId = this.sessionId;