feat: 后端改为deno

This commit is contained in:
ethan.chen
2025-11-05 11:43:47 +08:00
parent ba3435e1a0
commit f67a3835fa
27 changed files with 1449 additions and 1404 deletions

View File

@@ -0,0 +1,94 @@
/**
* 后台任务管理模块 (Deno 版本)
* 负责定期获取音乐状态和歌词更新
*/
import { ConnectionManager } from "./websocket_manager.ts";
import { getMusicStatus, MusicStatus } from "./apple_music.ts";
import { getLyricsData, LyricsData } from "./lyrics.ts";
let backgroundTaskId: number | null = null;
/**
* 启动后台任务
*/
export function startBackgroundTask(manager: ConnectionManager): void {
if (backgroundTaskId) {
console.log("后台任务已在运行");
return;
}
console.log("启动后台任务...");
backgroundTaskId = setInterval(async () => {
await updateMusicInfo(manager);
}, 1000); // 每秒更新一次
console.log("后台任务已启动");
}
/**
* 停止后台任务
*/
export function stopBackgroundTask(): void {
if (backgroundTaskId) {
clearInterval(backgroundTaskId);
backgroundTaskId = null;
console.log("后台任务已停止");
}
}
/**
* 更新音乐信息并发送给客户端
*/
export async function updateMusicInfo(
manager: ConnectionManager
): Promise<void> {
try {
// 获取音乐状态
const musicStatus = await getMusicStatus();
if (musicStatus.status === "error") {
console.warn(`获取音乐状态失败: ${musicStatus.error}`);
return;
}
// 获取歌词数据
const lyricsData = await getLyricsData(musicStatus);
// 合并数据
const updateData = {
type: "music_update",
timestamp: Date.now(),
music: musicStatus,
lyrics: lyricsData,
};
// 发送给所有连接的客户端
manager.broadcast(updateData);
} catch (error) {
console.error(`更新音乐信息时出错: ${error}`);
}
}
/**
* 获取歌词并发送更新
*/
export async function fetchAndUpdateLyrics(
status: MusicStatus,
manager: ConnectionManager
): Promise<void> {
try {
const lyricsData = await getLyricsData(status);
const updateData = {
type: "lyrics_update",
timestamp: Date.now(),
lyrics: lyricsData,
};
manager.broadcast(updateData);
} catch (error) {
console.error(`获取歌词并发送更新时出错: ${error}`);
}
}