mirror of
https://github.com/hensm/fx_cast.git
synced 2026-06-10 09:39:58 +00:00
Improve app message types
This commit is contained in:
172
app/src/bridge/messaging.ts
Normal file
172
app/src/bridge/messaging.ts
Normal file
@@ -0,0 +1,172 @@
|
||||
"use strict";
|
||||
|
||||
import { Receiver
|
||||
, ReceiverSelectionCast
|
||||
, ReceiverSelectionStop
|
||||
, ReceiverStatus } from "./types";
|
||||
|
||||
|
||||
type MessageDefinitions = {
|
||||
"shim:serviceUp": { id: Receiver["id"] }
|
||||
, "shim:serviceDown": { id: Receiver["id"] }
|
||||
|
||||
, "shim:launchApp": { receiver: Receiver }
|
||||
|
||||
// Session messages
|
||||
, "shim:session/stopped": {}
|
||||
, "shim:session/connected": {
|
||||
sessionId: string
|
||||
, namespaces: Array<{ name: string }>
|
||||
, displayName: string
|
||||
, statusText: string
|
||||
}
|
||||
, "shim:session/updateStatus": { volume: any /* Volume */ }
|
||||
, "shim:session/impl_addMessageListener": {
|
||||
namespace: string
|
||||
, data: string
|
||||
}
|
||||
, "shim:session/impl_sendMessage": {
|
||||
messageId: string
|
||||
, 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/initialize": {
|
||||
address: string
|
||||
, port: number
|
||||
, appId: string
|
||||
, sessionId: string
|
||||
, _id: string
|
||||
}
|
||||
, "bridge:session/close": {}
|
||||
, "bridge:session/impl_leave": {
|
||||
id: string
|
||||
, _id: string
|
||||
}
|
||||
, "bridge:session/impl_sendMessage": {
|
||||
namespace: string
|
||||
, message: any
|
||||
, messageId: 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": {
|
||||
namespace: string;
|
||||
_id: string;
|
||||
}
|
||||
|
||||
// Media messages
|
||||
, "shim:media/update": {
|
||||
currentTime: number
|
||||
, _lastCurrentTime: number
|
||||
, customData: any
|
||||
, playbackRate: number
|
||||
, playerState: string
|
||||
, repeatMode: string
|
||||
, _volumeLevel: number
|
||||
, _volumeMuted: boolean
|
||||
, media: unknown // MediaInfo
|
||||
, mediaSessionId: number
|
||||
}
|
||||
, "shim:media/sendMediaMessageResponse": {
|
||||
messageId: string
|
||||
, error: boolean
|
||||
}
|
||||
|
||||
// Bridge media messages
|
||||
, "bridge:media/initialize": {
|
||||
sessionId: string
|
||||
, mediaSessionId: number
|
||||
, _internalSessionId: string
|
||||
, _id: string
|
||||
}
|
||||
, "bridge:media/sendMediaMessage": {
|
||||
message: any
|
||||
, messageId: string
|
||||
, _id: string
|
||||
}
|
||||
|
||||
// Bridge messages
|
||||
, "main:receiverSelector/selected": ReceiverSelectionCast
|
||||
, "main:receiverSelector/error": string
|
||||
, "main:receiverSelector/close": {}
|
||||
, "main:receiverSelector/stop": ReceiverSelectionStop
|
||||
|
||||
, "bridge:getInfo": string
|
||||
, "bridge:initialize": { shouldWatchStatus: boolean }
|
||||
|
||||
, "bridge:receiverSelector/open": any
|
||||
, "bridge:receiverSelector/close": {}
|
||||
|
||||
, "bridge:stopReceiverApp": { receiver: Receiver }
|
||||
|
||||
, "bridge:mediaServer/start": {
|
||||
filePath: string
|
||||
, port: number
|
||||
}
|
||||
, "bridge:mediaServer/stop": {}
|
||||
, "mediaCast:mediaServer/started": {
|
||||
mediaPath: string
|
||||
, subtitlePaths: string[]
|
||||
, localAddress: string
|
||||
}
|
||||
, "mediaCast:mediaServer/stopped": {}
|
||||
, "mediaCast:mediaServer/error": {}
|
||||
|
||||
, "main:serviceUp": Receiver
|
||||
, "main:serviceDown": { id: string }
|
||||
|
||||
, "main:receiverStatus": {
|
||||
id: string
|
||||
, status: ReceiverStatus
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
interface MessageBase<K extends keyof MessageDefinitions> {
|
||||
subject: K;
|
||||
data: MessageDefinitions[K];
|
||||
}
|
||||
|
||||
type Messages = {
|
||||
[K in keyof MessageDefinitions]: MessageBase<K>;
|
||||
}
|
||||
|
||||
/**
|
||||
* For better call semantics, make message data key optional if
|
||||
* specified as blank or with all-optional keys.
|
||||
*/
|
||||
type NarrowedMessage<L extends MessageBase<keyof MessageDefinitions>> =
|
||||
L extends any
|
||||
? {} extends L["data"]
|
||||
? Omit<L, "data"> & Partial<L>
|
||||
: L
|
||||
: never;
|
||||
|
||||
|
||||
export type Message = NarrowedMessage<Messages[keyof Messages]>;
|
||||
Reference in New Issue
Block a user