"use strict"; import castv2 from "castv2"; import { sendMessage } from "../../lib/nativeMessaging"; import { Message } from "../../messaging"; import Session from "./Session"; import { NS_CONNECTION, NS_RECEIVER } from "./client"; const sessions = new Map(); export function handleCastMessage(message: Message) { switch (message.subject) { case "bridge:createCastSession": { const { appId, receiverDevice } = message.data; // Connect and store with returned ID const session = new Session(appId, receiverDevice, sessionId => { sessions.set(sessionId, session); }); break; } case "bridge:sendCastReceiverMessage": { const { sessionId, messageData, messageId } = message.data; const session = sessions.get(sessionId); if (!session) { sendMessage({ subject: "cast:impl_sendMessage", data: { error: "Session does not exist", sessionId, messageId } }); break; } try { session.sendReceiverMessage(messageData); } catch (err) { sendMessage({ subject: "cast:impl_sendMessage", data: { error: `Failed to send message (${err})`, sessionId, messageId } }); break; } // Success sendMessage({ subject: "cast:impl_sendMessage", data: { sessionId, messageId } }); break; } case "bridge:sendCastSessionMessage": { const { namespace, sessionId, messageId } = message.data; const session = sessions.get(sessionId); if (!session) { sendMessage({ subject: "cast:impl_sendMessage", data: { error: "Session does not exist", sessionId, messageId } }); break; } try { // Handle string messages let { messageData } = message.data; if (typeof messageData === "string") { messageData = JSON.parse(messageData); } session.sendMessage(namespace, messageData); } catch (err) { sendMessage({ subject: "cast:impl_sendMessage", data: { error: `Failed to send message (${err})`, sessionId, messageId } }); break; } // Success sendMessage({ subject: "cast:impl_sendMessage", data: { sessionId, messageId } }); break; } case "bridge:stopCastApp": { const { host, port } = message.data.receiverDevice; const client = new castv2.Client(); client.connect({ host, port }, () => { const sourceId = "sender-0"; const destinationId = "receiver-0"; const clientConnection = client.createChannel( sourceId, destinationId, NS_CONNECTION, "JSON" ); const clientReceiver = client.createChannel( sourceId, destinationId, NS_RECEIVER, "JSON" ); clientConnection.send({ type: "CONNECT" }); clientReceiver.send({ type: "STOP", requestId: 1 }); }); break; } } }