/** * 后台任务管理模块 (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 { 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 { try { const lyricsData = await getLyricsData(status); const updateData = { type: "lyrics_update", timestamp: Date.now(), lyrics: lyricsData, }; manager.broadcast(updateData); } catch (error) { console.error(`获取歌词并发送更新时出错: ${error}`); } }