ChatPersonas/Modelo.py

54 lines
2.0 KiB
Python

import socket
import threading
SERVER_HOST = '127.0.0.1'
SERVER_PORT = 3333
class ModeloCliente:
def __init__(self):
self.client_socket = None
self.connected = False
def conectar(self, on_message_received, on_error):
"""Conecta el cliente al servidor."""
if self.connected:
on_error("[CLIENTE] Ya estás conectado al servidor.\n")
return
self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
self.client_socket.connect((SERVER_HOST, SERVER_PORT))
self.connected = True
threading.Thread(target=self.recibir_mensajes, args=(on_message_received, on_error), daemon=True).start()
return f"[CONECTADO] Conectado al servidor {SERVER_HOST}:{SERVER_PORT}\n"
except ConnectionRefusedError:
self.client_socket = None
return "[ERROR] El servidor no está disponible. Inícialo primero.\n"
except Exception as e:
self.client_socket = None
return f"[ERROR] No se pudo conectar al servidor: {e}\n"
def recibir_mensajes(self, on_message_received, on_error):
"""Recibe mensajes del servidor y los muestra en la vista."""
while True:
try:
mensaje = self.client_socket.recv(1024)
if not mensaje:
break
on_message_received(mensaje.decode('utf-8'))
except:
on_error("[ERROR] Conexión perdida con el servidor.\n")
self.client_socket.close()
self.client_socket = None
self.connected = False
break
def enviar_mensaje(self, mensaje):
"""Envía un mensaje al servidor."""
if mensaje and self.client_socket:
try:
self.client_socket.send(mensaje.encode('utf-8'))
except:
return "[ERROR] No se pudo enviar el mensaje.\n"
return None