spotiqueue/src/main.ts

42 lines
1.2 KiB
TypeScript

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: ""})
})