@signalwire/js
Version:
55 lines (48 loc) • 1.48 kB
text/typescript
import {
getLogger,
SagaIterator,
MapToPubSubShape,
RoomSessionPlayback,
Rooms,
VideoPlaybackEvent,
VideoPlaybackEventNames,
stripNamespacePrefix,
} from '@signalwire/core'
import { VideoWorkerParams } from './videoWorker'
export const videoPlaybackWorker = function* (
options: VideoWorkerParams<MapToPubSubShape<VideoPlaybackEvent>>
): SagaIterator {
getLogger().trace('videoPlaybackWorker started')
const {
instance: roomSession,
action: { type, payload },
instanceMap: { get, set, remove },
} = options
// For now, we are not storing the RoomSession object in the instance map
let playbackInstance = get<RoomSessionPlayback>(payload.playback.id)
if (!playbackInstance) {
playbackInstance = Rooms.createRoomSessionPlaybackObject({
store: roomSession.store,
payload,
})
} else {
playbackInstance.setPayload(payload)
}
set<RoomSessionPlayback>(payload.playback.id, playbackInstance)
const event = stripNamespacePrefix(type) as VideoPlaybackEventNames
switch (type) {
case 'video.playback.started':
case 'video.playback.updated': {
roomSession.emit(event, playbackInstance)
break
}
case 'video.playback.ended':
roomSession.emit(event, playbackInstance)
remove<RoomSessionPlayback>(payload.playback.id)
break
default:
getLogger().warn(`Unknown video.stream event: "${type}"`)
break
}
getLogger().trace('videoPlaybackWorker ended')
}