# PSP Chat – Servidor TCP con interfaz web tipo Telegram ## Arquitectura ``` [Navegador A] ──WebSocket──► [client_web.py] ──TCP──► [server.py :9000] [Navegador B] ──WebSocket──► [client_web.py] ──TCP──► ``` - **server.py** — Servidor TCP puro con threading. Gestiona usuarios, salas, mensajes. - **client_web.py** — Puente Flask + Socket.IO entre navegadores y el servidor TCP. ## Inicio rápido (todo en local) ### Paso 1 – Instalar dependencias ```bash pip install flask flask-socketio eventlet ``` ### Paso 2 – Arrancar el servidor TCP ```bash python server.py # Escucha en 0.0.0.0:9000 ``` ### Paso 3 – Arrancar el cliente web (otro terminal) ```bash python client_web.py # Interfaz web en http://localhost:5001 ``` ### Paso 4 – Abrir varios navegadores ``` http://localhost:5001 ``` Cada pestaña/dispositivo puede conectarse con un nick diferente. ## Uso en red local (varios equipos) **En el servidor** (IP ej: 192.168.1.10): ```bash python server.py python client_web.py --server 192.168.1.10 ``` **Desde otros equipos**: abrir `http://192.168.1.10:5001` ## Opciones del cliente web ``` python client_web.py --server # IP del servidor TCP (default: 127.0.0.1) --port <9000> # Puerto TCP (default: 9000) --web-port <5001> # Puerto web (default: 5001) ``` ## Protocolo TCP (JSON por líneas) El servidor habla JSON terminado en `\n`. Puedes conectarte con `netcat` o cualquier cliente TCP: ```bash nc localhost 9000 {"type":"join","nick":"Test"} {"type":"msg","room":"general","text":"Hola!"} {"type":"pm","to":"Alice","text":"mensaje privado"} {"type":"create","room":"mi_sala"} {"type":"join_room","room":"mi_sala"} {"type":"leave_room","room":"mi_sala"} {"type":"users"} {"type":"rooms"} ``` ## Características - 🌐 Sala **#general** siempre disponible - 📁 Crear salas personalizadas - 📩 Mensajes **privados** (PM) entre usuarios - 👥 Lista de usuarios en línea en tiempo real - 🚪 Unirse y salir de salas - 🌙 Tema oscuro estilo Telegram - 🔔 Notificaciones de mensajes no leídos - 📱 Responsive para móvil ## Estructura ``` chatapp/ ├── server.py # Servidor TCP puro ├── client_web.py # Puente Flask + Socket.IO ├── requirements.txt └── templates/ └── index.html # UI Telegram-like ```