51 lines
2.0 KiB
Python
51 lines
2.0 KiB
Python
import threading
|
|
from Modelo import ModeloCliente
|
|
from server import start_server
|
|
|
|
class ControladorChat:
|
|
def __init__(self, vista):
|
|
self.vista = vista
|
|
self.modelos = {}
|
|
|
|
def iniciar_servidor(self):
|
|
"""Inicia el servidor en un hilo separado."""
|
|
threading.Thread(target=start_server, daemon=True).start()
|
|
#vista.mostrar_mensaje("[SERVIDOR] Servidor iniciado en segundo plano...\n")
|
|
|
|
|
|
def enviar_mensaje(self, host):
|
|
"""Envía un mensaje al servidor y lo muestra en el chat."""
|
|
if host in self.modelos:
|
|
mensaje = self.vista.chats_frames[host]["entry"].get()
|
|
if mensaje:
|
|
self.vista.mostrar_mensaje(host, f"[TÚ] {mensaje}")
|
|
self.modelos[host].enviar_mensaje(mensaje)
|
|
self.vista.chats_frames[host]["entry"].delete(0, 'end')
|
|
|
|
|
|
def actualizar_host_port(self):
|
|
"""Obtiene valores de host y port desde la interfaz y los actualiza en el modelo."""
|
|
host = self.vista.host_entry.get()
|
|
port = int(self.vista.port_entry.get())
|
|
self.modelo.set_host_port(host, port)
|
|
self.vista.mostrar_mensaje(f"[CONFIG] Host y puerto actualizados: {host}:{port}")
|
|
|
|
def conectar_cliente(self):
|
|
"""Conecta un nuevo cliente y agrega su botón en el menú."""
|
|
host = self.vista.host_entry.get()
|
|
port = int(self.vista.port_entry.get())
|
|
|
|
if host not in self.modelos:
|
|
modelo = ModeloCliente()
|
|
modelo.set_host_port(host, port)
|
|
mensaje = modelo.conectar(
|
|
on_message_received=lambda msg: self.vista.mostrar_mensaje(host, msg),
|
|
on_error=lambda err: self.vista.mostrar_mensaje(host, err)
|
|
)
|
|
|
|
if modelo.connected:
|
|
self.modelos[host] = modelo
|
|
self.vista.agregar_boton_chat(host)
|
|
self.vista.habilitar_envio(host)
|
|
|
|
self.vista.mostrar_mensaje(host, mensaje) |