import { SpotifyWS } from "./spotify.ts" import { HeartbeatWS } from "./heartbeat.ts"; import { PlayerManager } from "./playerManager.ts"; import { serveDir } from "@std/http/file-server"; import { UserWS } from "./user.ts"; const USER_PATTERN = new URLPattern({pathname: "/ws/user"}) const SPOTIFY_PATTERN = new URLPattern({pathname: "/ws/spotify"}) function commonWs(req: Request) { const { socket, response } = Deno.upgradeWebSocket(req); return { socket, response }; } declare global { var spotify: SpotifyWS | undefined; var playerManager: PlayerManager } globalThis.spotify = undefined; globalThis.playerManager = new PlayerManager() Deno.serve((req) => { if (USER_PATTERN.exec(req.url)) { const { socket, response } = commonWs(req); new HeartbeatWS(socket); new UserWS(socket) return response } else if (SPOTIFY_PATTERN.exec(req.url)) { const { socket, response } = commonWs(req); const spState = spotify?.ws.readyState; if (spState !== undefined && spState !== WebSocket.CLOSED) spotify?.ws.close(); new SpotifyWS(socket); new HeartbeatWS(socket); return response } return serveDir(req, {fsRoot: "./static", urlRoot: ""}) })