shivam413 commited on
Commit
595e328
·
verified ·
1 Parent(s): 8ef004b

Update lib/socket.ts

Browse files
Files changed (1) hide show
  1. lib/socket.ts +27 -12
lib/socket.ts CHANGED
@@ -8,9 +8,13 @@ import {
8
  } from "./types"
9
  import io, { Socket } from "socket.io-client"
10
 
 
11
  export interface ServerToClientEvents {
 
12
  playlistUpdate: (playlist: Playlist) => void
13
  userUpdates: (users: UserState[]) => void
 
 
14
  update: (room: RoomState) => void
15
 
16
  // Chat events
@@ -18,50 +22,52 @@ export interface ServerToClientEvents {
18
  chatHistory: (msgs: ChatMessage[]) => void
19
  }
20
 
 
21
  export interface ClientToServerEvents {
 
22
  playItemFromPlaylist: (index: number) => void
23
  updatePlaylist: (playlist: Playlist) => void
24
  updatePlayer: (player: PlayerState) => void
25
  updatePlaying: (playing: MediaElement) => void
26
  updateUser: (user: UserState) => void
27
 
 
28
  setPaused: (paused: boolean) => void
29
  setLoop: (loop: boolean) => void
30
  setProgress: (progress: number) => void
31
  setPlaybackRate: (playbackRate: number) => void
32
-
33
  seek: (progress: number) => void
 
 
34
  playUrl: (src: string) => void
 
35
  playAgain: () => void
36
  playEnded: () => void
37
  fetch: () => void
38
  error: () => void
39
 
40
- // Chat: client -> server
41
  chatMessage: (text: string) => void
42
  }
43
 
 
 
44
  export function playItemFromPlaylist(
45
- socket: Socket<ServerToClientEvents, ClientToServerEvents>,
46
  playlist: Playlist,
47
  index: number
48
  ) {
49
- if (
50
- typeof playlist.items[index] === "undefined" ||
51
- playlist.items[index] === null
52
- ) {
53
  console.error("Impossible to play", index, "from", playlist)
54
  return
55
  }
56
  socket.emit("playItemFromPlaylist", index)
57
  }
58
 
59
- export function createClientSocket(roomId: string) {
60
  console.log("Trying to join room", roomId)
61
- const socket = io({
62
- query: {
63
- roomId,
64
- },
65
  transports: ["websocket"],
66
  path: "/api/socketio",
67
  })
@@ -82,4 +88,13 @@ export function createClientSocket(roomId: string) {
82
  })
83
 
84
  return socket
 
 
 
 
 
 
 
 
 
85
  }
 
8
  } from "./types"
9
  import io, { Socket } from "socket.io-client"
10
 
11
+ // Events the server emits to the client
12
  export interface ServerToClientEvents {
13
+ // Optional legacy granular updates (your server mainly emits `update`)
14
  playlistUpdate: (playlist: Playlist) => void
15
  userUpdates: (users: UserState[]) => void
16
+
17
+ // Primary room update payload
18
  update: (room: RoomState) => void
19
 
20
  // Chat events
 
22
  chatHistory: (msgs: ChatMessage[]) => void
23
  }
24
 
25
+ // Events the client emits to the server
26
  export interface ClientToServerEvents {
27
+ // Playlist and user updates
28
  playItemFromPlaylist: (index: number) => void
29
  updatePlaylist: (playlist: Playlist) => void
30
  updatePlayer: (player: PlayerState) => void
31
  updatePlaying: (playing: MediaElement) => void
32
  updateUser: (user: UserState) => void
33
 
34
+ // Player controls
35
  setPaused: (paused: boolean) => void
36
  setLoop: (loop: boolean) => void
37
  setProgress: (progress: number) => void
38
  setPlaybackRate: (playbackRate: number) => void
 
39
  seek: (progress: number) => void
40
+
41
+ // Playback and fetching
42
  playUrl: (src: string) => void
43
+ addToPlaylist: (url: string) => void // NEW: add without playing
44
  playAgain: () => void
45
  playEnded: () => void
46
  fetch: () => void
47
  error: () => void
48
 
49
+ // Chat
50
  chatMessage: (text: string) => void
51
  }
52
 
53
+ export type TypedSocket = Socket<ServerToClientEvents, ClientToServerEvents>
54
+
55
  export function playItemFromPlaylist(
56
+ socket: TypedSocket,
57
  playlist: Playlist,
58
  index: number
59
  ) {
60
+ if (!playlist || !Array.isArray(playlist.items) || !playlist.items[index]) {
 
 
 
61
  console.error("Impossible to play", index, "from", playlist)
62
  return
63
  }
64
  socket.emit("playItemFromPlaylist", index)
65
  }
66
 
67
+ export function createClientSocket(roomId: string): TypedSocket {
68
  console.log("Trying to join room", roomId)
69
+ const socket: TypedSocket = io({
70
+ query: { roomId },
 
 
71
  transports: ["websocket"],
72
  path: "/api/socketio",
73
  })
 
88
  })
89
 
90
  return socket
91
+ }
92
+
93
+ // Convenience helpers
94
+ export function playNow(socket: TypedSocket, url: string) {
95
+ socket.emit("playUrl", url)
96
+ }
97
+
98
+ export function queueUrl(socket: TypedSocket, url: string) {
99
+ socket.emit("addToPlaylist", url)
100
  }