feat: 后端改为deno
This commit is contained in:
94
backend-deno/modules/background_tasks.ts
Normal file
94
backend-deno/modules/background_tasks.ts
Normal 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}`);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user