đŸŽ™ī¸ Colegu CB Radio

Channel 22
Users: 0
0 users online
🎤 Microphone Level
🔊 Speaker Level
đŸ“ģ Radio Station
Europa FM - Romania's #1 Hit Station
Hold to transmit
🔧 DEBUG
State: IDLE
PTT: Released
Chunks: 0
Latency: 0ms
// Update user list display function updateUsersList() { const usersList = document.getElementById('usersList'); const usersCount = document.querySelector('.users-count'); if (!usersList) return; usersList.innerHTML = ''; usersCount.textContent = channelUsers.length + ' users online'; channelUsers.forEach(user => { const userItem = document.createElement('div'); userItem.className = 'user-item'; userItem.id = 'user-' + user.id; // Check if this is the current user if (user.username === currentUsername || user.username === anonymousUsername) { userItem.classList.add('self'); } // Check if user is speaking if (currentSpeaker === user.username) { userItem.classList.add('speaking'); } userItem.innerHTML = `
${user.username} `; usersList.appendChild(userItem); }); console.log('Users list updated:', channelUsers.length, 'users'); } // Handle user joined event socket.on('user_joined', (data) => { console.log('User joined:', data); if (!channelUsers.find(u => u.id === data.id)) { channelUsers.push({ id: data.id || data.userId, username: data.username }); updateUsersList(); } }); // Handle user left event socket.on('user_left', (data) => { console.log('User left:', data); channelUsers = channelUsers.filter(u => u.id !== data.id && u.id !== data.userId); updateUsersList(); }); // Handle channel users list (sent on join) socket.on('channel_users', (users) => { console.log('Channel users received:', users); channelUsers = users.map(u => ({ id: u.id || u.userId, username: u.username })); updateUsersList(); }); // Update join_channel to include username const originalJoinChannel = socket.emit.bind(socket); socket.emit = function(event, ...args) { if (event === 'join_channel' && args[0]) { // Make sure we send the username with join_channel if (typeof anonymousUsername !== 'undefined' && anonymousUsername) { args[0].username = anonymousUsername; currentUsername = anonymousUsername; } } return originalJoinChannel(event, ...args); }; // Update speaking indicator socket.on('ptt_active', (data) => { currentSpeaker = data.username; updateUsersList(); updateDebugState('RECEIVING from ' + data.username); }); socket.on('ptt_released', (data) => { if (currentSpeaker === data.username) { currentSpeaker = null; updateUsersList(); } updateDebugState('IDLE'); }); // Request initial user list after connecting