Add discoverable rooms to desktop lobby
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user