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
}