diff --git a/src/App.vue b/src/App.vue index f88682b..e65c650 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,8 +1,9 @@ diff --git a/src/api/websocket/index.ts b/src/api/websocket/index.ts index 5653f29..23c890a 100644 --- a/src/api/websocket/index.ts +++ b/src/api/websocket/index.ts @@ -48,20 +48,46 @@ class WebSocketManager { this.ws.onmessage = (event) => { try { - const payload: WebSocketMessage = JSON.parse(event.data) + // 处理可能的多行JSON或消息分割 + const data = event.data.toString().trim() - // 接收clientId - if (payload.clientId) { - this.clientId = payload.clientId - console.log('Received clientId:', this.clientId) - } + // 尝试按行分割处理多个JSON对象 + const lines = data.split('\n').filter(line => line.trim()) - // 处理接收消息 - if (payload.request_type === 'receive_message' && payload.data) { - this.handleMessage(payload.data) + for (const line of lines) { + try { + const payload: WebSocketMessage = JSON.parse(line) + + // 接收clientId + if (payload.clientId) { + this.clientId = payload.clientId + console.log('Received clientId:', this.clientId) + } + + // 处理接收消息 + if (payload.request_type === 'receive_message' && payload.data) { + this.handleMessage(payload.data) + } + } catch (lineError) { + // 如果单行解析失败,尝试解析整个数据 + if (lines.length === 1) { + const payload: WebSocketMessage = JSON.parse(data) + + if (payload.clientId) { + this.clientId = payload.clientId + console.log('Received clientId:', this.clientId) + } + + if (payload.request_type === 'receive_message' && payload.data) { + this.handleMessage(payload.data) + } + } else { + console.warn('Failed to parse WebSocket message line:', line, lineError) + } + } } } catch (error) { - console.error('WebSocket message parse error:', error) + console.error('WebSocket message parse error:', error, 'Data:', event.data) } } @@ -140,13 +166,15 @@ class WebSocketManager { * 处理接收到的消息 */ private handleMessage(message: ChatMessage) { - // 信令消息(message_type = 6) + // 信令消息(message_type = 6)- 路由到signalHandlers,不路由到messageHandlers if (message.message_type === 6) { + console.log('[WebSocket] Routing signaling message:', message.call_status, message.call_id) this.signalHandlers.forEach(handler => handler(message)) - } else { - // 普通消息 - this.messageHandlers.forEach(handler => handler(message)) + return // 重要:信令消息不进入普通消息处理流程 } + + // 普通消息 - 路由到messageHandlers + this.messageHandlers.forEach(handler => handler(message)) } /** diff --git a/src/components/call/CallWindow.vue b/src/components/call/CallWindow.vue index 19be607..1858f77 100644 --- a/src/components/call/CallWindow.vue +++ b/src/components/call/CallWindow.vue @@ -1,8 +1,8 @@