mirror of
https://github.com/hensm/fx_cast.git
synced 2026-06-11 10:09:59 +00:00
Implement chrome.cast.Session#leave
This commit is contained in:
@@ -100,6 +100,11 @@ export const SessionSendMessageCallbacks = new WeakMap<
|
||||
Map<string, SendMessageCallback>
|
||||
>();
|
||||
|
||||
export const SessionLeaveSuccessCallback = new WeakMap<
|
||||
Session,
|
||||
Optional<() => void>
|
||||
>();
|
||||
|
||||
/** Creates a Session object and initializes private data. */
|
||||
export function createSession(
|
||||
sessionArgs: ConstructorParameters<typeof Session>
|
||||
@@ -139,6 +144,13 @@ export default class Session {
|
||||
return sendMessageCallback;
|
||||
}
|
||||
|
||||
get #leaveSuccessCallback() {
|
||||
return SessionLeaveSuccessCallback.get(this);
|
||||
}
|
||||
set #leaveSuccessCallback(successCallback: Optional<() => void>) {
|
||||
SessionLeaveSuccessCallback.set(this, successCallback);
|
||||
}
|
||||
|
||||
media: Media[] = [];
|
||||
namespaces: Array<{ name: string }> = [];
|
||||
senderApps: SenderApplication[] = [];
|
||||
@@ -257,10 +269,21 @@ export default class Session {
|
||||
}
|
||||
|
||||
leave(
|
||||
_successCallback?: () => void,
|
||||
_errorCallback?: (err: CastError) => void
|
||||
successCallback?: () => void,
|
||||
errorCallback?: (err: CastError) => void
|
||||
) {
|
||||
logger.info("STUB :: Session#leave");
|
||||
if (!this.sessionId) {
|
||||
errorCallback?.(
|
||||
new CastError(ErrorCode.INVALID_PARAMETER, "Session not active")
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
this.#leaveSuccessCallback = successCallback;
|
||||
|
||||
pageMessaging.page.sendMessage({
|
||||
subject: "main:leaveSession"
|
||||
});
|
||||
}
|
||||
|
||||
loadMedia(
|
||||
|
||||
@@ -33,6 +33,7 @@ import {
|
||||
|
||||
import Session, {
|
||||
createSession,
|
||||
SessionLeaveSuccessCallback,
|
||||
SessionMessageListeners,
|
||||
SessionSendMessageCallbacks,
|
||||
SessionUpdateListeners
|
||||
@@ -220,8 +221,7 @@ export default class {
|
||||
}
|
||||
|
||||
case "cast:sessionStopped": {
|
||||
const { sessionId } = message.data;
|
||||
const session = this.#sessions.get(sessionId);
|
||||
const session = this.#sessions.get(message.data.sessionId);
|
||||
if (session?.status === SessionStatus.CONNECTED) {
|
||||
session.status = SessionStatus.STOPPED;
|
||||
|
||||
@@ -236,6 +236,24 @@ export default class {
|
||||
break;
|
||||
}
|
||||
|
||||
case "cast:sessionDisconnected": {
|
||||
const session = this.#sessions.get(message.data.sessionId);
|
||||
if (session?.status === SessionStatus.CONNECTED) {
|
||||
session.status = SessionStatus.DISCONNECTED;
|
||||
|
||||
SessionLeaveSuccessCallback.get(session)?.();
|
||||
|
||||
const updateListeners = SessionUpdateListeners.get(session);
|
||||
if (updateListeners) {
|
||||
for (const listener of updateListeners) {
|
||||
listener(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case "cast:sessionMessageReceived": {
|
||||
const { sessionId, namespace, messageData } = message.data;
|
||||
const session = this.#sessions.get(sessionId);
|
||||
|
||||
Reference in New Issue
Block a user