initial commit
This commit is contained in:
59
server/utils/webrtcSignaling.js
Normal file
59
server/utils/webrtcSignaling.js
Normal file
@@ -0,0 +1,59 @@
|
||||
/**
|
||||
* WebRTC signaling message handlers.
|
||||
* Processes WebSocket messages for WebRTC operations.
|
||||
*/
|
||||
|
||||
import { getLiveSession, updateLiveSession } from './liveSessions.js'
|
||||
import { getRouter, createTransport, getTransport } from './mediasoup.js'
|
||||
|
||||
/**
|
||||
* Handle WebSocket message for WebRTC signaling.
|
||||
* @param {string} userId
|
||||
* @param {string} sessionId
|
||||
* @param {string} type
|
||||
* @param {object} data
|
||||
* @returns {Promise<object | null>} Response message or null
|
||||
*/
|
||||
export async function handleWebSocketMessage(userId, sessionId, type, data) {
|
||||
const session = getLiveSession(sessionId)
|
||||
if (!session) {
|
||||
return { error: 'Session not found' }
|
||||
}
|
||||
|
||||
if (['create-transport', 'connect-transport'].includes(type) && session.userId !== userId) {
|
||||
return { error: 'Forbidden' }
|
||||
}
|
||||
|
||||
try {
|
||||
switch (type) {
|
||||
case 'get-router-rtp-capabilities': {
|
||||
const router = await getRouter(sessionId)
|
||||
return { type: 'router-rtp-capabilities', data: router.rtpCapabilities }
|
||||
}
|
||||
case 'create-transport': {
|
||||
const router = await getRouter(sessionId)
|
||||
const { transport, params } = await createTransport(router, true)
|
||||
updateLiveSession(sessionId, { transportId: transport.id, routerId: router.id })
|
||||
return { type: 'transport-created', data: params }
|
||||
}
|
||||
case 'connect-transport': {
|
||||
const { transportId, dtlsParameters } = data
|
||||
if (!transportId || !dtlsParameters) {
|
||||
return { error: 'transportId and dtlsParameters required' }
|
||||
}
|
||||
const transport = getTransport(transportId)
|
||||
if (!transport) {
|
||||
return { error: 'Transport not found' }
|
||||
}
|
||||
await transport.connect({ dtlsParameters })
|
||||
return { type: 'transport-connected', data: { connected: true } }
|
||||
}
|
||||
default:
|
||||
return { error: `Unknown message type: ${type}` }
|
||||
}
|
||||
}
|
||||
catch (err) {
|
||||
console.error('[webrtc-signaling] Error:', err)
|
||||
return { error: err.message || 'Internal error' }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user