音视频通话功能完成(P2P)

已知问题:
文件无法发送
This commit is contained in:
2025-12-03 15:33:48 +08:00
parent be7bd1279a
commit 9db9b65ea3
15 changed files with 1544 additions and 704 deletions

View File

@@ -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))
}
/**