Fix: Use ondatachannel instead of createDataChannel for answerer

CRITICAL BUG FIX: As the answerer, we should NOT create our own data channel.
The host (offerer) creates the channel, and we receive it via ondatachannel event.

This was causing messages to be sent on a different channel than the one
the host was listening to, so no messages were being received.

Changes:
- Remove pc.createDataChannel() call
- Add pc.ondatachannel event handler
- Wrap data channel setup in setupDataChannel() function
- Called when channel is received from host
This commit is contained in:
2025-12-12 21:35:34 +01:00
parent d7caa81042
commit 7747f59060

View File

@@ -82,13 +82,15 @@ async function main() {
console.log('\n3. Creating WebRTC peer connection...')
const pc = new RTCPeerConnection(RTC_CONFIG)
// 4. Create data channel
console.log('4. Creating data channel...')
const dc = pc.createDataChannel('chat')
// Set up data channel handlers
// 4. Wait for data channel (we're the answerer, host creates the channel)
console.log('4. Waiting for data channel from host...')
let dc = null
let identified = false
// Function to setup data channel handlers
const setupDataChannel = (channel) => {
dc = channel
dc.onopen = () => {
console.log(' ✓ Data channel opened!')
console.log(` Data channel state: ${dc.readyState}`)
@@ -117,11 +119,6 @@ async function main() {
console.log(' ❌ Data channel closed!')
}
dc.onerror = (error) => {
console.error('❌ Data channel error:', error)
process.exit(1)
}
dc.onmessage = (event) => {
console.log(`📥 RAW DATA:`, event.data)
try {
@@ -161,6 +158,13 @@ async function main() {
console.error('❌ Data channel error:', error)
process.exit(1)
}
}
// Receive data channel from host (we're the answerer)
pc.ondatachannel = (event) => {
console.log(' ✓ Data channel received from host!')
setupDataChannel(event.channel)
}
// 5. Set up ICE candidate exchange FIRST
console.log('5. Setting up ICE candidate exchange...')