@@ -12,6 +12,7 @@ export default function Home() {
|
|||||||
const [username, setUsername] = useState('');
|
const [username, setUsername] = useState('');
|
||||||
const [socket, setSocket] = useState(null);
|
const [socket, setSocket] = useState(null);
|
||||||
const [peers, setPeers] = useState([]);
|
const [peers, setPeers] = useState([]);
|
||||||
|
const [connectedUsers, setConnectedUsers] = useState([]);
|
||||||
const [videoUrl, setVideoUrl] = useState('');
|
const [videoUrl, setVideoUrl] = useState('');
|
||||||
const [customUrl, setCustomUrl] = useState('');
|
const [customUrl, setCustomUrl] = useState('');
|
||||||
const [localStream, setLocalStream] = useState(null);
|
const [localStream, setLocalStream] = useState(null);
|
||||||
@@ -162,6 +163,11 @@ export default function Home() {
|
|||||||
setSocket(socketInstance);
|
setSocket(socketInstance);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
const handleUsersUpdate = useCallback((users) => {
|
||||||
|
console.log('👥 Usuarios conectados actualizados:', users);
|
||||||
|
setConnectedUsers(users);
|
||||||
|
}, []);
|
||||||
|
|
||||||
const handlePeersUpdate = useCallback((peersList) => {
|
const handlePeersUpdate = useCallback((peersList) => {
|
||||||
setPeers(peersList);
|
setPeers(peersList);
|
||||||
// Si no hay peers, resetear las estadísticas de velocidad
|
// Si no hay peers, resetear las estadísticas de velocidad
|
||||||
@@ -270,19 +276,26 @@ export default function Home() {
|
|||||||
// Auto-conectar cuando el usuario ingresa al chat (después de registrarse)
|
// Auto-conectar cuando el usuario ingresa al chat (después de registrarse)
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (autoConnectUser && username && socket && socket.connected) {
|
if (autoConnectUser && username && socket && socket.connected) {
|
||||||
console.log('🚀 Iniciando auto-conexión con:', autoConnectUser);
|
console.log('🚀 Validando auto-conexión con:', autoConnectUser);
|
||||||
setShowAutoConnectBanner(true);
|
setShowAutoConnectBanner(true);
|
||||||
|
|
||||||
// Esperar 1.5 segundos para que el usuario vea el banner y el socket esté completamente listo
|
// Esperar 1.5 segundos para dar tiempo a recibir la lista de usuarios
|
||||||
const timer = setTimeout(() => {
|
const timer = setTimeout(() => {
|
||||||
handleWatchUser(autoConnectUser);
|
// Verificar si el usuario objetivo está conectado
|
||||||
|
if (connectedUsers.includes(autoConnectUser)) {
|
||||||
|
console.log('✅ Usuario encontrado, conectando...');
|
||||||
|
handleWatchUser(autoConnectUser);
|
||||||
|
} else {
|
||||||
|
console.log('❌ Usuario no conectado:', autoConnectUser);
|
||||||
|
alert(`⚠️ El usuario "${autoConnectUser}" no está conectado en este momento.\n\nPor favor, pídele que se conecte o intenta más tarde.`);
|
||||||
|
}
|
||||||
setShowAutoConnectBanner(false);
|
setShowAutoConnectBanner(false);
|
||||||
setAutoConnectUser(null); // Limpiar para no reconectar
|
setAutoConnectUser(null); // Limpiar para no reconectar
|
||||||
}, 1500);
|
}, 1500);
|
||||||
|
|
||||||
return () => clearTimeout(timer);
|
return () => clearTimeout(timer);
|
||||||
}
|
}
|
||||||
}, [autoConnectUser, username, socket, handleWatchUser]);
|
}, [autoConnectUser, username, socket, connectedUsers, handleWatchUser]);
|
||||||
|
|
||||||
const handleStopWatching = useCallback(() => {
|
const handleStopWatching = useCallback(() => {
|
||||||
console.log('🛑 Dejando de ver stream remoto');
|
console.log('🛑 Dejando de ver stream remoto');
|
||||||
@@ -582,6 +595,7 @@ export default function Home() {
|
|||||||
onUsernameChange={setUsername}
|
onUsernameChange={setUsername}
|
||||||
onSocketReady={handleSocketReady}
|
onSocketReady={handleSocketReady}
|
||||||
onWatchUser={handleWatchUser}
|
onWatchUser={handleWatchUser}
|
||||||
|
onUsersUpdate={handleUsersUpdate}
|
||||||
peers={peers}
|
peers={peers}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import { io } from 'socket.io-client';
|
|||||||
/**
|
/**
|
||||||
* Componente de Chat en tiempo real con Socket.IO y thumbnails de video
|
* Componente de Chat en tiempo real con Socket.IO y thumbnails de video
|
||||||
*/
|
*/
|
||||||
export default function Chat({ username, onUsernameChange, onSocketReady, onWatchUser, peers = [] }) {
|
export default function Chat({ username, onUsernameChange, onSocketReady, onWatchUser, onUsersUpdate, peers = [] }) {
|
||||||
const [socket, setSocket] = useState(null);
|
const [socket, setSocket] = useState(null);
|
||||||
const [messages, setMessages] = useState([]);
|
const [messages, setMessages] = useState([]);
|
||||||
const [users, setUsers] = useState([]);
|
const [users, setUsers] = useState([]);
|
||||||
@@ -51,11 +51,21 @@ export default function Chat({ username, onUsernameChange, onSocketReady, onWatc
|
|||||||
});
|
});
|
||||||
|
|
||||||
newSocket.on('users', (data) => {
|
newSocket.on('users', (data) => {
|
||||||
setUsers(data.users || []);
|
const userList = data.users || [];
|
||||||
|
setUsers(userList);
|
||||||
|
if (onUsersUpdate) {
|
||||||
|
onUsersUpdate(userList);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
newSocket.on('adduser', (data) => {
|
newSocket.on('adduser', (data) => {
|
||||||
setUsers(prevUsers => [...prevUsers, data.user]);
|
setUsers(prevUsers => {
|
||||||
|
const newUsers = [...prevUsers, data.user];
|
||||||
|
if (onUsersUpdate) {
|
||||||
|
onUsersUpdate(newUsers);
|
||||||
|
}
|
||||||
|
return newUsers;
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
newSocket.on('user-thumbnail', (data) => {
|
newSocket.on('user-thumbnail', (data) => {
|
||||||
|
|||||||
Referencia en una nueva incidencia
Block a user