File size: 1,586 Bytes
d092f57 ae19567 d092f57 ae19567 d092f57 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
export interface Subtitle {
src: string
lang: string
}
export interface MediaOption {
src: string
resolution: string
}
export interface MediaElement {
title?: string
sub: Subtitle[]
src: MediaOption[]
}
export interface Playlist {
items: MediaElement[]
currentIndex: number
}
export interface TargetState {
playlist: Playlist
playing: MediaElement
paused: boolean
progress: number
playbackRate: number
loop: boolean
lastSync: number
}
export interface PlayerState extends TargetState {
currentSrc: MediaOption
currentSub: Subtitle
volume: number
muted: boolean
fullscreen: boolean
error: any
duration: number
}
export interface UserState {
socketIds: string[]
uid: string
name: string
avatar: string
player: PlayerState
}
export enum Command {
play = "play",
pause = "pause",
seek = "seek",
playbackRate = "playbackRate",
playSrc = "playSrc",
}
export interface CommandLog {
command: Command
userId: string
target?: MediaElement | Playlist | string | number
time: number
}
/**
* Chat message structure for in-room chat
*/
export interface ChatMessage {
id: string // unique id per message
userId: string // sender socket/user id
name: string // sender display name
text: string // message text
ts: number // timestamp (ms since epoch)
}
export interface RoomState {
serverTime: number
id: string
ownerId: string
users: UserState[]
targetState: TargetState
commandHistory: CommandLog[]
chatLog?: ChatMessage[] // optional to keep backward compatibility
}
|