Add discoverable rooms to desktop lobby

This commit is contained in:
Peter Stockings
2026-10-05 16:13:17 +11:00
parent 836034533e
commit 21a35d81f0
7 changed files with 190 additions and 11 deletions
+17 -5
View File
@@ -8,8 +8,9 @@ interface FileInfo {
duration: number;
}
interface RoomState {
code: string;
interface RoomState {
code: string;
listed: boolean;
fileInfo: FileInfo;
playing: boolean;
position: number;
@@ -133,7 +134,17 @@ const server = Bun.serve<WSData>({
port: Number(process.env.PORT) || 3000,
fetch(req, server) {
const url = new URL(req.url);
const url = new URL(req.url);
if (url.pathname === "/api/rooms" && req.method === "GET") {
const activeRooms = Array.from(rooms.values()).flatMap(room => {
const users = Array.from(room.users).filter(([, ws]) => ws.readyState === 1)
.map(([name]) => name);
return room.listed && users.length ? [{ code: room.code, fileInfo: room.fileInfo,
users, playing: room.playing, position: getCurrentPosition(room) }] : [];
});
return Response.json({ rooms: activeRooms }, { headers: { "Cache-Control": "no-store" } });
}
// WebSocket upgrade
if (url.pathname === "/ws") {
@@ -179,8 +190,9 @@ const server = Bun.serve<WSData>({
}
const code = generateRoomCode();
const room: RoomState = {
code,
const room: RoomState = {
code,
listed: msg.listed !== false,
fileInfo: {
name: msg.fileInfo.name,
size: msg.fileInfo.size,