import { ListaUsuarios } from "./listausuarios.js"; import { ListaPartidas } from "./listapartidas.js"; const usersConnectUlEl = document.querySelector('#users_connect'); const usersDisconnectUlEl = document.querySelector('#users_disconnect'); const partidasAbiertasEl = document.querySelector('#partidas_abiertas'); const partidasProcesoEl = document.querySelector('#tus_partidas'); const chat = document.getElementById('logchat'); const userId = localStorage.getItem('userId'); const socket = io('/salachat', { closeOnBeforeunload: true, auth: { userId } }); let listaUsuarios; let listaPartidas; function unirse(data) { console.log(data); } // Funciones que modifican el DOM // Añadir lista de usuarios al DOM function agregarUsuarioToLista(usuario, listaElemento, claseCSS) { const liUsuario = document.createElement('li'); liUsuario.innerHTML = usuario.nickname; liUsuario.classList.add(claseCSS); listaElemento.appendChild(liUsuario); } function listarUsuarios() { usersConnectUlEl.innerHTML = ''; usersDisconnectUlEl.innerHTML = ''; const miUsuario = listaUsuarios.usuario; agregarUsuarioToLista(miUsuario, usersConnectUlEl, 'spanNickPropio'); const usuariosConectados = listaUsuarios.usuariosConectados; usuariosConectados.forEach((usuario) => { agregarUsuarioToLista(usuario, usersConnectUlEl, 'spanNick'); }); const usuariosDesconectados = listaUsuarios.usuariosDesconectados; usuariosDesconectados.forEach((usuario) => { agregarUsuarioToLista(usuario, usersDisconnectUlEl, 'spanNickOffline'); }); } function listarPartidasAbiertas() { listaPartidas.partidasAbiertas.forEach((partida) => { cardGameHTML(partida.nickJugadorA, partida.uuid); }); } // Añadir msg al chat function agregaMsg({ uuid, msg }) { const spanUser = document.createElement('span'); const spanMsg = document.createElement('span'); if (userId === uuid) { spanUser.classList.add('spanNickPropio'); spanUser.textContent = `Tú: `; spanMsg.textContent = msg; } else { spanUser.classList.add('spanNick'); spanUser.textContent = `${listaUsuarios.obtenerUsuarioPorUuid(uuid).nickname}: `; spanMsg.textContent = msg; } const linea = document.createElement('p'); linea.appendChild(spanUser); linea.appendChild(spanMsg); chat.appendChild(linea); logchat.scrollTop = logchat.scrollHeight; } //Añadir mensaje del servidor function agregaMsgBroadcast(msg) { const spanMsg = document.createElement('span'); spanMsg.textContent = msg; spanMsg.classList.add('broadcastMsg'); const linea = document.createElement('p'); linea.appendChild(spanMsg); chat.appendChild(linea); logchat.scrollTop = logchat.scrollHeight; } const cardGameHTML = (nickname, game_id) => { var cardGameDiv = document.createElement('div'); cardGameDiv.classList.add('cardGame'); cardGameDiv.innerHTML = nickname === listaUsuarios.usuario.nickname ? `${nickname} Esperando rival... ` : `${nickname} VS `; partidasAbiertasEl.appendChild(cardGameDiv); }; // Logica de negocio de la aplicacion //Entra a la sala const entraSala = ({ usuarios, partidas }) => { listaUsuarios = new ListaUsuarios(userId, usuarios); listarUsuarios(); listaPartidas = new ListaPartidas(partidas); listarPartidasAbiertas(); }; // Actualiza info Usuarios const actualizaUsuarios = (usuario) => { listaUsuarios.actualizaUsuario(usuario); listarUsuarios(); usuario.conectado ? agregaMsgBroadcast(`${usuario.nickname} se ha conectado`) : agregaMsgBroadcast(`${usuario.nickname} se ha desconectado`); }; const agregaPartida = (partida) => { partidasAbiertasEl.innerHTML = ''; listaPartidas.agregarPartida(partida); listarPartidasAbiertas(); }; const onCloseClick = () => { localStorage.removeItem('userId'); window.location.replace('/'); }; // Cerrar sesión const cerrarSesion = (reason) => { if (reason === 'io server disconnect') { localStorage.removeItem('userId'); window.location.replace('/'); } }; // Enviar mensaje function enviarMensaje(event) { if (event.key === 'Enter') { const mensaje = event.target.value.trim(); if (mensaje != '') { socket.emit('chatMsg', mensaje); } event.target.value = ''; } } // Crear partida const crearPartida = () => { socket.emit('creaPartida'); }; // Manejadores de eventos del socket socket.on('onConnectRoom', entraSala); socket.on('onUserConnectRoom', actualizaUsuarios); socket.on('chatMsg', agregaMsg); socket.on('onUserDisconnectRoom', actualizaUsuarios); socket.on('disconnect', cerrarSesion); socket.on('on_create_partida', agregaPartida); // const url = '/batalla.html?game_id=' + encodeURIComponent(partida.uuid); // window.open(url, '_blank');