v1 feature: added playlists
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import type { Dump, OnlineUser } from "../model/interfaces.ts";
|
||||
import type { Dump, OnlineUser, Playlist } from "../model/interfaces.ts";
|
||||
|
||||
export interface WsClient {
|
||||
socket: WebSocket;
|
||||
@@ -82,9 +82,50 @@ export function broadcastVoteUpdate(
|
||||
}
|
||||
}
|
||||
|
||||
function sendToPlaylistAudience(
|
||||
playlist: Pick<Playlist, "isPublic" | "userId">,
|
||||
data: unknown,
|
||||
): void {
|
||||
for (const client of clients) {
|
||||
if (playlist.isPublic || client.userId === playlist.userId) {
|
||||
send(client.socket, data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function broadcastPlaylistCreated(playlist: Playlist): void {
|
||||
sendToPlaylistAudience(playlist, { type: "playlist_created", playlist });
|
||||
}
|
||||
|
||||
export function broadcastPlaylistUpdated(playlist: Playlist): void {
|
||||
sendToPlaylistAudience(playlist, { type: "playlist_updated", playlist });
|
||||
}
|
||||
|
||||
export function broadcastPlaylistDeleted(
|
||||
playlistId: string,
|
||||
userId: string,
|
||||
isPublic: boolean,
|
||||
): void {
|
||||
sendToPlaylistAudience({ isPublic, userId }, {
|
||||
type: "playlist_deleted",
|
||||
playlistId,
|
||||
userId,
|
||||
});
|
||||
}
|
||||
|
||||
export function broadcastPlaylistDumpsUpdated(
|
||||
playlist: Playlist,
|
||||
dumpIds: string[],
|
||||
): void {
|
||||
sendToPlaylistAudience(playlist, {
|
||||
type: "playlist_dumps_updated",
|
||||
playlistId: playlist.id,
|
||||
dumpIds,
|
||||
});
|
||||
}
|
||||
|
||||
// Keepalive: ping all clients every 30s, remove non-responsive ones
|
||||
const PING_INTERVAL = 30_000;
|
||||
const _PONG_TIMEOUT = 5_000;
|
||||
|
||||
setInterval(() => {
|
||||
for (const client of clients) {
|
||||
|
||||
Reference in New Issue
Block a user