mirror of
https://github.com/hensm/fx_cast.git
synced 2026-06-11 10:09:59 +00:00
Refactor session impl messages
This commit is contained in:
@@ -130,6 +130,22 @@ export default class Session {
|
|||||||
this.close();
|
this.close();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case "bridge:session/sendReceiverMessage": {
|
||||||
|
let wasError = false;
|
||||||
|
try {
|
||||||
|
this.clientReceiver?.send(message.data.message);
|
||||||
|
} catch (err) {
|
||||||
|
wasError = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.sendMessage("shim:session/sendReceiverMessageResponse", {
|
||||||
|
messageId: message.data.messageId
|
||||||
|
, wasError
|
||||||
|
});
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case "bridge:session/impl_addMessageListener":
|
case "bridge:session/impl_addMessageListener":
|
||||||
this._impl_addMessageListener(message.data.namespace);
|
this._impl_addMessageListener(message.data.namespace);
|
||||||
break;
|
break;
|
||||||
@@ -140,22 +156,6 @@ export default class Session {
|
|||||||
, message.data.message
|
, message.data.message
|
||||||
, message.data.messageId);
|
, message.data.messageId);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "bridge:session/impl_setReceiverMuted":
|
|
||||||
this._impl_setReceiverMuted(
|
|
||||||
message.data.muted
|
|
||||||
, message.data.volumeId);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "bridge:session/impl_setReceiverVolumeLevel":
|
|
||||||
this._impl_setReceiverVolumeLevel(
|
|
||||||
message.data.newLevel
|
|
||||||
, message.data.volumeId);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "bridge:session/impl_stop":
|
|
||||||
this._impl_stop(message.data.stopId);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -209,7 +209,7 @@ export default class Session {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.createChannel(namespace);
|
this.createChannel(namespace);
|
||||||
this.channelMap.get(namespace)!.send(message);
|
this.channelMap.get(namespace)?.send(message);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
error = true;
|
error = true;
|
||||||
}
|
}
|
||||||
@@ -220,66 +220,4 @@ export default class Session {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private _impl_setReceiverMuted(muted: boolean, volumeId: string) {
|
|
||||||
|
|
||||||
let error = false;
|
|
||||||
|
|
||||||
try {
|
|
||||||
this.clientReceiver!.send({
|
|
||||||
type: "SET_VOLUME"
|
|
||||||
, volume: { muted }
|
|
||||||
, requestId: 0
|
|
||||||
});
|
|
||||||
} catch (err) {
|
|
||||||
error = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.sendMessage("shim:session/impl_setReceiverMuted", {
|
|
||||||
volumeId
|
|
||||||
, error
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private _impl_setReceiverVolumeLevel(newLevel: number, volumeId: string) {
|
|
||||||
|
|
||||||
let error = false;
|
|
||||||
|
|
||||||
try {
|
|
||||||
this.clientReceiver!.send({
|
|
||||||
type: "SET_VOLUME"
|
|
||||||
, volume: { level: newLevel }
|
|
||||||
, requestId: 0
|
|
||||||
});
|
|
||||||
} catch (err) {
|
|
||||||
error = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.sendMessage("shim:session/impl_setReceiverVolumeLevel", {
|
|
||||||
volumeId
|
|
||||||
, error
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private _impl_stop(stopId: string) {
|
|
||||||
let error = false;
|
|
||||||
|
|
||||||
try {
|
|
||||||
this.clientReceiver!.send({
|
|
||||||
type: "STOP"
|
|
||||||
, sessionId: this.sessionId
|
|
||||||
, requestId: 0
|
|
||||||
});
|
|
||||||
} catch (err) {
|
|
||||||
error = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.client.close();
|
|
||||||
|
|
||||||
clearInterval(this.clientHeartbeatIntervalId!);
|
|
||||||
|
|
||||||
this.sendMessage("shim:session/impl_stop", {
|
|
||||||
stopId
|
|
||||||
, error
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
import { ReceiverDevice
|
import { ReceiverDevice
|
||||||
|
, ReceiverMessage
|
||||||
, ReceiverSelectionCast
|
, ReceiverSelectionCast
|
||||||
, ReceiverSelectionStop
|
, ReceiverSelectionStop
|
||||||
, ReceiverStatus } from "./types";
|
, ReceiverStatus
|
||||||
|
, Volume } from "./types";
|
||||||
|
|
||||||
|
|
||||||
type MessageDefinitions = {
|
type MessageDefinitions = {
|
||||||
@@ -15,7 +17,11 @@ type MessageDefinitions = {
|
|||||||
, displayName: string
|
, displayName: string
|
||||||
, statusText: string
|
, statusText: string
|
||||||
}
|
}
|
||||||
, "shim:session/updateStatus": { volume: any /* Volume */ }
|
, "shim:session/updateStatus": { volume: Volume }
|
||||||
|
, "shim:session/sendReceiverMessageResponse": {
|
||||||
|
messageId: string
|
||||||
|
, wasError: boolean
|
||||||
|
}
|
||||||
, "shim:session/impl_addMessageListener": {
|
, "shim:session/impl_addMessageListener": {
|
||||||
namespace: string
|
namespace: string
|
||||||
, data: string
|
, data: string
|
||||||
@@ -24,18 +30,6 @@ type MessageDefinitions = {
|
|||||||
messageId: string
|
messageId: string
|
||||||
, error: boolean
|
, error: boolean
|
||||||
}
|
}
|
||||||
, "shim:session/impl_setReceiverMuted": {
|
|
||||||
volumeId: string
|
|
||||||
, error: boolean
|
|
||||||
}
|
|
||||||
, "shim:session/impl_setReceiverVolumeLevel": {
|
|
||||||
volumeId: string
|
|
||||||
, error: boolean
|
|
||||||
}
|
|
||||||
, "shim:session/impl_stop": {
|
|
||||||
stopId: string
|
|
||||||
, error: boolean
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bridge session messages
|
// Bridge session messages
|
||||||
, "bridge:session/initialize": {
|
, "bridge:session/initialize": {
|
||||||
@@ -46,6 +40,11 @@ type MessageDefinitions = {
|
|||||||
, _id: string
|
, _id: string
|
||||||
}
|
}
|
||||||
, "bridge:session/close": {}
|
, "bridge:session/close": {}
|
||||||
|
, "bridge:session/sendReceiverMessage": {
|
||||||
|
message: ReceiverMessage
|
||||||
|
, messageId: string
|
||||||
|
, _id: string
|
||||||
|
}
|
||||||
, "bridge:session/impl_leave": {
|
, "bridge:session/impl_leave": {
|
||||||
id: string
|
id: string
|
||||||
, _id: string
|
, _id: string
|
||||||
@@ -56,20 +55,6 @@ type MessageDefinitions = {
|
|||||||
, messageId: string
|
, messageId: string
|
||||||
, _id: string
|
, _id: string
|
||||||
}
|
}
|
||||||
, "bridge:session/impl_setReceiverMuted": {
|
|
||||||
muted: boolean
|
|
||||||
, volumeId: string
|
|
||||||
, _id: string
|
|
||||||
}
|
|
||||||
, "bridge:session/impl_setReceiverVolumeLevel": {
|
|
||||||
newLevel: number
|
|
||||||
, volumeId: string
|
|
||||||
, _id: string
|
|
||||||
}
|
|
||||||
, "bridge:session/impl_stop": {
|
|
||||||
stopId: string;
|
|
||||||
_id: string;
|
|
||||||
}
|
|
||||||
, "bridge:session/impl_addMessageListener": {
|
, "bridge:session/impl_addMessageListener": {
|
||||||
namespace: string;
|
namespace: string;
|
||||||
_id: string;
|
_id: string;
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ export interface ReceiverStatus {
|
|||||||
, volume: Volume
|
, volume: Volume
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export interface MediaStatus {
|
export interface MediaStatus {
|
||||||
mediaSessionId: number;
|
mediaSessionId: number;
|
||||||
supportedMediaCommands: number;
|
supportedMediaCommands: number;
|
||||||
@@ -102,3 +103,15 @@ export class Volume {
|
|||||||
public level: (number | null) = null
|
public level: (number | null) = null
|
||||||
, public muted: (boolean | null) = null) {}
|
, public muted: (boolean | null) = null) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export type ReceiverMessage =
|
||||||
|
{ type: "LAUNCH", appId: string }
|
||||||
|
| { type: "STOP", sessionId: string }
|
||||||
|
| { type: "GET_STATUS" }
|
||||||
|
| { type: "GET_APP_AVAILABILITY", appId: string[] }
|
||||||
|
| {
|
||||||
|
type: "SET_VOLUME"
|
||||||
|
, volume: { level: number }
|
||||||
|
| { muted: boolean }
|
||||||
|
};
|
||||||
|
|||||||
@@ -1,13 +1,19 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
import Messenger from "./lib/Messenger";
|
import Messenger from "./lib/Messenger";
|
||||||
import { TypedPort } from "./lib/TypedPort";
|
|
||||||
|
|
||||||
|
import { TypedPort } from "./lib/TypedPort";
|
||||||
import { BridgeInfo } from "./lib/bridge";
|
import { BridgeInfo } from "./lib/bridge";
|
||||||
import { ReceiverDevice, ReceiverStatus } from "./types";
|
|
||||||
|
import { ReceiverDevice
|
||||||
|
, ReceiverMessage
|
||||||
|
, ReceiverStatus } from "./types";
|
||||||
|
|
||||||
import { ReceiverSelectorMediaType } from "./background/receiverSelector";
|
import { ReceiverSelectorMediaType } from "./background/receiverSelector";
|
||||||
import { ReceiverSelection, ReceiverSelectionCast, ReceiverSelectionStop }
|
import { ReceiverSelection
|
||||||
from "./background/receiverSelector/ReceiverSelector";
|
, ReceiverSelectionCast
|
||||||
|
, ReceiverSelectionStop }
|
||||||
|
from "./background/receiverSelector/ReceiverSelector";
|
||||||
|
|
||||||
import { Volume } from "./shim/cast/dataClasses";
|
import { Volume } from "./shim/cast/dataClasses";
|
||||||
import { MediaInfo } from "./shim/cast/media";
|
import { MediaInfo } from "./shim/cast/media";
|
||||||
@@ -74,6 +80,10 @@ type AppMessageDefinitions = {
|
|||||||
, statusText: string
|
, statusText: string
|
||||||
}
|
}
|
||||||
, "shim:session/updateStatus": { volume: Volume }
|
, "shim:session/updateStatus": { volume: Volume }
|
||||||
|
, "shim:session/sendReceiverMessageResponse": {
|
||||||
|
messageId: string
|
||||||
|
, wasError: boolean
|
||||||
|
}
|
||||||
, "shim:session/impl_addMessageListener": {
|
, "shim:session/impl_addMessageListener": {
|
||||||
namespace: string
|
namespace: string
|
||||||
, data: string
|
, data: string
|
||||||
@@ -82,18 +92,6 @@ type AppMessageDefinitions = {
|
|||||||
messageId: string
|
messageId: string
|
||||||
, error: boolean
|
, error: boolean
|
||||||
}
|
}
|
||||||
, "shim:session/impl_setReceiverMuted": {
|
|
||||||
volumeId: string
|
|
||||||
, error: boolean
|
|
||||||
}
|
|
||||||
, "shim:session/impl_setReceiverVolumeLevel": {
|
|
||||||
volumeId: string
|
|
||||||
, error: boolean
|
|
||||||
}
|
|
||||||
, "shim:session/impl_stop": {
|
|
||||||
stopId: string
|
|
||||||
, error: boolean
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bridge session messages
|
// Bridge session messages
|
||||||
, "bridge:session/initialize": {
|
, "bridge:session/initialize": {
|
||||||
@@ -104,6 +102,11 @@ type AppMessageDefinitions = {
|
|||||||
, _id: string
|
, _id: string
|
||||||
}
|
}
|
||||||
, "bridge:session/close": {}
|
, "bridge:session/close": {}
|
||||||
|
, "bridge:session/sendReceiverMessage": {
|
||||||
|
message: ReceiverMessage
|
||||||
|
, messageId: string
|
||||||
|
, _id: string
|
||||||
|
}
|
||||||
, "bridge:session/impl_leave": {
|
, "bridge:session/impl_leave": {
|
||||||
id: string
|
id: string
|
||||||
, _id: string
|
, _id: string
|
||||||
@@ -114,20 +117,6 @@ type AppMessageDefinitions = {
|
|||||||
, messageId: string
|
, messageId: string
|
||||||
, _id: string
|
, _id: string
|
||||||
}
|
}
|
||||||
, "bridge:session/impl_setReceiverMuted": {
|
|
||||||
muted: boolean
|
|
||||||
, volumeId: string
|
|
||||||
, _id: string
|
|
||||||
}
|
|
||||||
, "bridge:session/impl_setReceiverVolumeLevel": {
|
|
||||||
newLevel: number
|
|
||||||
, volumeId: string
|
|
||||||
, _id: string
|
|
||||||
}
|
|
||||||
, "bridge:session/impl_stop": {
|
|
||||||
stopId: string;
|
|
||||||
_id: string;
|
|
||||||
}
|
|
||||||
, "bridge:session/impl_addMessageListener": {
|
, "bridge:session/impl_addMessageListener": {
|
||||||
namespace: string;
|
namespace: string;
|
||||||
_id: string;
|
_id: string;
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
import { v4 as uuid } from "uuid";
|
import { v4 as uuid } from "uuid";
|
||||||
|
|
||||||
import logger from "../../lib/logger";
|
import logger from "../../lib/logger";
|
||||||
|
import { ReceiverMessage } from "../../types";
|
||||||
|
|
||||||
import { ListenerObject
|
import { onMessage
|
||||||
, onMessage
|
|
||||||
, sendMessageResponse } from "../eventMessageChannel";
|
, sendMessageResponse } from "../eventMessageChannel";
|
||||||
|
|
||||||
import { Callbacks
|
import { Callbacks
|
||||||
@@ -38,11 +38,8 @@ export default class Session {
|
|||||||
#messageListeners = new Map<string, Set<MessageListener>>();
|
#messageListeners = new Map<string, Set<MessageListener>>();
|
||||||
#updateListeners = new Set<UpdateListener>();
|
#updateListeners = new Set<UpdateListener>();
|
||||||
|
|
||||||
#leaveCallbacks = new Map<string, Callbacks>();
|
|
||||||
#sendMessageCallbacks = new Map<string, Callbacks>();
|
#sendMessageCallbacks = new Map<string, Callbacks>();
|
||||||
#setReceiverMutedCallbacks = new Map<string, Callbacks>();
|
#sendReceiverMessageCallbacks = new Map<string, Function>();
|
||||||
#setReceiverVolumeLevelCallbacks = new Map<string, Callbacks>();
|
|
||||||
#stopCallbacks = new Map<string, Callbacks>();
|
|
||||||
|
|
||||||
#listener = onMessage(message => {
|
#listener = onMessage(message => {
|
||||||
// Filter other session messages
|
// Filter other session messages
|
||||||
@@ -103,6 +100,17 @@ export default class Session {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case "shim:session/sendReceiverMessageResponse": {
|
||||||
|
const { messageId, wasError } = message.data;
|
||||||
|
const callback =
|
||||||
|
this.#sendReceiverMessageCallbacks.get(messageId);
|
||||||
|
if (callback) {
|
||||||
|
callback(wasError);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
case "shim:session/impl_addMessageListener": {
|
case "shim:session/impl_addMessageListener": {
|
||||||
const { namespace, data } = message.data;
|
const { namespace, data } = message.data;
|
||||||
@@ -132,66 +140,6 @@ export default class Session {
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case "shim:session/impl_setReceiverMuted": {
|
|
||||||
const { volumeId, error } = message.data;
|
|
||||||
const [ successCallback, errorCallback ] =
|
|
||||||
this.#setReceiverMutedCallbacks.get(volumeId) ?? [];
|
|
||||||
|
|
||||||
if (error && errorCallback) {
|
|
||||||
errorCallback(new _Error(ErrorCode.SESSION_ERROR));
|
|
||||||
} else if (successCallback) {
|
|
||||||
successCallback();
|
|
||||||
}
|
|
||||||
|
|
||||||
this.#setReceiverMutedCallbacks.delete(volumeId);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case "shim:session/impl_setReceiverVolumeLevel": {
|
|
||||||
const { volumeId, error } = message.data;
|
|
||||||
const [ successCallback, errorCallback ] =
|
|
||||||
this.#setReceiverVolumeLevelCallbacks
|
|
||||||
.get(volumeId) ?? [];
|
|
||||||
|
|
||||||
if (error && errorCallback) {
|
|
||||||
errorCallback(new _Error(ErrorCode.SESSION_ERROR));
|
|
||||||
} else if (successCallback) {
|
|
||||||
successCallback();
|
|
||||||
}
|
|
||||||
|
|
||||||
this.#setReceiverVolumeLevelCallbacks.delete(volumeId);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case "shim:session/impl_stop": {
|
|
||||||
const { stopId, error } = message.data;
|
|
||||||
const [ successCallback, errorCallback ] =
|
|
||||||
this.#stopCallbacks.get(stopId) ?? [];
|
|
||||||
|
|
||||||
// Disconnect from extension messages
|
|
||||||
this.#listener.disconnect();
|
|
||||||
|
|
||||||
if (error && errorCallback) {
|
|
||||||
errorCallback(new _Error(ErrorCode.SESSION_ERROR));
|
|
||||||
} else {
|
|
||||||
this.status = SessionStatus.STOPPED;
|
|
||||||
|
|
||||||
for (const listener of this.#updateListeners) {
|
|
||||||
listener(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (successCallback) {
|
|
||||||
successCallback();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.#stopCallbacks.delete(stopId);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -262,23 +210,10 @@ export default class Session {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public leave(
|
public leave(
|
||||||
successCallback?: SuccessCallback
|
_successCallback?: SuccessCallback
|
||||||
, errorCallback?: ErrorCallback): void {
|
, _errorCallback?: ErrorCallback): void {
|
||||||
|
|
||||||
const id = uuid();
|
logger.info("STUB :: Session#leave");
|
||||||
|
|
||||||
sendMessageResponse({
|
|
||||||
subject: "bridge:session/impl_leave"
|
|
||||||
, data: {
|
|
||||||
id
|
|
||||||
, _id: this.#id
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
this.#leaveCallbacks.set(id, [
|
|
||||||
successCallback
|
|
||||||
, errorCallback
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public loadMedia(
|
public loadMedia(
|
||||||
@@ -394,21 +329,11 @@ export default class Session {
|
|||||||
, successCallback?: SuccessCallback
|
, successCallback?: SuccessCallback
|
||||||
, errorCallback?: ErrorCallback) {
|
, errorCallback?: ErrorCallback) {
|
||||||
|
|
||||||
const volumeId = uuid();
|
this.#sendReceiverMessage(
|
||||||
|
{ type: "SET_VOLUME"
|
||||||
sendMessageResponse({
|
, volume: { muted }})
|
||||||
subject: "bridge:session/impl_setReceiverMuted"
|
.then(successCallback)
|
||||||
, data: {
|
.catch(errorCallback);
|
||||||
muted
|
|
||||||
, volumeId
|
|
||||||
, _id: this.#id
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
this.#setReceiverMutedCallbacks.set(volumeId, [
|
|
||||||
successCallback
|
|
||||||
, errorCallback
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public setReceiverVolumeLevel(
|
public setReceiverVolumeLevel(
|
||||||
@@ -416,44 +341,50 @@ export default class Session {
|
|||||||
, successCallback?: SuccessCallback
|
, successCallback?: SuccessCallback
|
||||||
, errorCallback?: ErrorCallback): void {
|
, errorCallback?: ErrorCallback): void {
|
||||||
|
|
||||||
const volumeId = uuid();
|
this.#sendReceiverMessage(
|
||||||
|
{ type: "SET_VOLUME"
|
||||||
sendMessageResponse({
|
, volume: { level: newLevel }})
|
||||||
subject: "bridge:session/impl_setReceiverVolumeLevel"
|
.then(successCallback)
|
||||||
, data: {
|
.catch(errorCallback);
|
||||||
newLevel
|
|
||||||
, volumeId
|
|
||||||
, _id: this.#id
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
this.#setReceiverVolumeLevelCallbacks.set(volumeId, [
|
|
||||||
successCallback
|
|
||||||
, errorCallback
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public stop(
|
public stop(
|
||||||
successCallback?: SuccessCallback
|
successCallback?: SuccessCallback
|
||||||
, errorCallback?: ErrorCallback): void {
|
, errorCallback?: ErrorCallback): void {
|
||||||
|
|
||||||
const stopId = uuid();
|
this.#sendReceiverMessage(
|
||||||
|
{ type: "STOP"
|
||||||
sendMessageResponse({
|
, sessionId: this.sessionId })
|
||||||
subject: "bridge:session/impl_stop"
|
.then(successCallback)
|
||||||
, data: {
|
.catch(errorCallback);
|
||||||
stopId
|
|
||||||
, _id: this.#id
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
this.#stopCallbacks.set(stopId, [
|
|
||||||
successCallback
|
|
||||||
, errorCallback
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends a message to the bridge that is forwarded to the
|
||||||
|
* receiver device. Promise resolves once the message is sent
|
||||||
|
* or an error occurs.
|
||||||
|
*/
|
||||||
|
#sendReceiverMessage = (message: ReceiverMessage) => {
|
||||||
|
return new Promise<void>((resolve, reject) => {
|
||||||
|
const messageId = uuid();
|
||||||
|
sendMessageResponse({
|
||||||
|
subject: "bridge:session/sendReceiverMessage"
|
||||||
|
, data: { message, messageId, _id: this.#id }
|
||||||
|
});
|
||||||
|
|
||||||
|
this.#sendReceiverMessageCallbacks.set(
|
||||||
|
messageId, (wasError: boolean) => {
|
||||||
|
if (wasError) {
|
||||||
|
reject(new _Error(ErrorCode.SESSION_ERROR));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private _sendMediaMessage(message: string | {}) {
|
private _sendMediaMessage(message: string | {}) {
|
||||||
this.sendMessage("urn:x-cast:com.google.cast.media", message);
|
this.sendMessage("urn:x-cast:com.google.cast.media", message);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,3 +30,14 @@ export interface ReceiverStatus {
|
|||||||
, userEq: unknown
|
, userEq: unknown
|
||||||
, volume: Volume
|
, volume: Volume
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type ReceiverMessage =
|
||||||
|
{ type: "LAUNCH", appId: string }
|
||||||
|
| { type: "STOP", sessionId: string }
|
||||||
|
| { type: "GET_STATUS" }
|
||||||
|
| { type: "GET_APP_AVAILABILITY", appId: string[] }
|
||||||
|
| {
|
||||||
|
type: "SET_VOLUME"
|
||||||
|
, volume: { level: number }
|
||||||
|
| { muted: boolean }
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user