42 lines
1.2 KiB
TypeScript
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: ""})
|
|
})
|