优化一起听被控端

This commit is contained in:
mtvpls
2026-05-28 00:06:13 +08:00
parent 6b85c4464d
commit c942c8c9ea
7 changed files with 238 additions and 98 deletions
+15 -16
View File
@@ -11,7 +11,7 @@ export interface Room {
ownerName: string;
ownerToken: string; // 房主令牌,用于重连时验证身份
memberCount: number;
currentState: PlayState | LiveState | ScreenState | MusicState | null;
currentState: PlayState | LiveState | ScreenState | MusicSyncState | null;
createdAt: number;
lastOwnerHeartbeat: number;
}
@@ -65,11 +65,10 @@ export interface MusicQueueItem {
durationText?: string;
}
export interface MusicState {
export interface MusicSyncState {
type: 'music';
queue: MusicQueueItem[];
currentIndex: number;
song: MusicQueueItem;
nextSong: MusicQueueItem | null;
currentTime: number;
isPlaying: boolean;
quality: string;
@@ -114,12 +113,12 @@ export interface ServerToClientEvents {
'screen:offer': (data: { userId: string; offer: RTCSessionDescriptionInit }) => void;
'screen:answer': (data: { userId: string; answer: RTCSessionDescriptionInit }) => void;
'screen:ice': (data: { userId: string; candidate: RTCIceCandidateInit }) => void;
'music:change': (state: MusicState) => void;
'music:update': (state: MusicState) => void;
'music:play': (state: MusicState) => void;
'music:pause': (state: MusicState) => void;
'music:seek': (state: MusicState) => void;
'music:queue': (state: MusicState) => void;
'music:change': (state: MusicSyncState) => void;
'music:update': (state: MusicSyncState) => void;
'music:play': (state: MusicSyncState) => void;
'music:pause': (state: MusicSyncState) => void;
'music:seek': (state: MusicSyncState) => void;
'music:queue': (state: MusicSyncState) => void;
'chat:message': (message: ChatMessage) => void;
'voice:offer': (data: { userId: string; offer: RTCSessionDescriptionInit }) => void;
'voice:answer': (data: { userId: string; answer: RTCSessionDescriptionInit }) => void;
@@ -169,12 +168,12 @@ export interface ClientToServerEvents {
'screen:offer': (data: { targetUserId: string; offer: RTCSessionDescriptionInit }) => void;
'screen:answer': (data: { targetUserId: string; answer: RTCSessionDescriptionInit }) => void;
'screen:ice': (data: { targetUserId: string; candidate: RTCIceCandidateInit }) => void;
'music:change': (state: MusicState) => void;
'music:update': (state: MusicState) => void;
'music:play': (state: MusicState) => void;
'music:pause': (state: MusicState) => void;
'music:seek': (state: MusicState) => void;
'music:queue': (state: MusicState) => void;
'music:change': (state: MusicSyncState) => void;
'music:update': (state: MusicSyncState) => void;
'music:play': (state: MusicSyncState) => void;
'music:pause': (state: MusicSyncState) => void;
'music:seek': (state: MusicSyncState) => void;
'music:queue': (state: MusicSyncState) => void;
'chat:message': (data: { content: string; type: 'text' | 'emoji' }) => void;