diff --git a/app.js b/app.js index eef5d48..fd4f82b 100644 --- a/app.js +++ b/app.js @@ -173,6 +173,7 @@ function handleIncomingMessage(messageObj) { function handleConnection(connection, info) { console.log('New connection', info); + connection.on('data', (data) => { const messageObj = JSON.parse(data.toString()); eventEmitter.emit('onMessage', messageObj); @@ -183,9 +184,28 @@ function handleConnection(connection, info) { updatePeerCount(); }); + connection.on('error', (error) => { + console.error('Connection error', error); + if (error.code === 'ETIMEDOUT') { + retryConnection(info.topicBuffer); + } + }); + updatePeerCount(); } +function retryConnection(topicBuffer) { + const topic = b4a.toString(topicBuffer, 'hex'); + const room = activeRooms.find(room => room.topic === topic); + if (room) { + console.log('Retrying connection to room:', topic); + room.swarm.leave(topicBuffer); + joinSwarm(topicBuffer).catch((error) => { + console.error('Failed to rejoin room after timeout:', error); + }); + } +} + function setupTalkButton() { const talkButton = document.getElementById('talk-btn'); if (!talkButton) return; @@ -763,4 +783,4 @@ async function connectToAllRooms() { // Call this function when loading the rooms initially renderRoomList(); -initialize(); +initialize(); \ No newline at end of file