Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closes #15 - Codigo formateado correctamente #16

Merged
merged 1 commit into from
Mar 4, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 36 additions & 47 deletions echo-server.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,62 +6,53 @@
TIEMPO_ESPERA = 100 # segundos

# Inicializar la variable para almacenar el mensaje del cliente
input_client = ""
channels = {}
input_client = ""
channels = {}


#Lista de strings con las opciones que se pueden usar como comandos

# Lista de strings con las opciones que se pueden usar como comandos
command_list = ["LIST", "CREATE", "CONNECT", "JOIN", "MSG"]
#estado del comando para métodos Create y Join. Si no tiene un estado lo recibe como un mensaje en lugar de un
# estado del comando para métodos Create y Join. Si no tiene un estado lo recibe como un mensaje en lugar de un
estado_comando = {"comando_actual": None, "datos": None}

# Diccionario de usuarios
users = {}
lock = threading.Lock()


def manejarConexion(conn, addr):
with conn:
# Establecer un tiempo de espera para el servidor
conn.settimeout(TIEMPO_ESPERA)

print(f"Conectado por {addr}")

# Decodificar y guardar el mensaje del cliente
input_client = data.decode()
username = registroUsuario(input_client, addr, conn)
while True:

data = conn.recv(1024)

# Decodificar y guardar el mensaje del cliente
input_client = data.decode()
registroUsuario(input_client, addr, conn)

# Modificar el mensaje a enviar de vuelta al cliente
#response_to_client = f"Mensaje desde el servidor: {input_client}"
# codifica el mensaje con encode y lo envia al cliente.
#conn.sendall(response_to_client.encode())
username = registroUsuario(input_client, addr, conn)
while True:
# Decodificar y guardar el mensaje del cliente
input_client = data.decode()
registroUsuario(input_client, addr, conn)

# Modificar el mensaje a enviar de vuelta al cliente
response_to_client = f"Mensaje desde el servidor: {input_client}"
# codifica el mensaje con encode y lo envía al cliente.
conn.sendall(response_to_client.encode())

# Modificar el mensaje a enviar de vuelta al cliente
response_to_client = f"Mensaje desde el servidor: {input_client}"
# codifica el mensaje con encode y lo envía al cliente.
conn.sendall(response_to_client.encode())
try:
manejar_comando(conn, input_client, channels, addr, username)
except socket.timeout:
print("Tiempo de espera alcanzado. Cerrando conexión.")
break

manejar_comando(conn, input_client, channels, addr, username)

except socket.timeout:
print("Tiempo de espera alcanzado. Cerrando conexión.")
break



def manejar_comando(conn, input_client, channels, addr, username):


if input_client.startswith("/"):
comando = input_client.split()[0][1:] # Extraer el comando sin el '/'

if comando == "JOIN":
if estado_comando["comando_actual"] == "JOIN":
# Manejar la elección del canal después de listar los canales
Expand All @@ -70,16 +61,16 @@ def manejar_comando(conn, input_client, channels, addr, username):
# Listar canales y establecer el estado a JOIN
list_channels(conn, channels, username)
estado_comando["comando_actual"] = "JOIN"

elif comando == "CREATE":
create_channel(conn, input_client, channels)

elif comando == "LIST":
list_channels(conn, channels, username)

elif comando == "MSG":
send_message(conn, input_client, channels, username)

else:
conn.sendall("Comando no reconocido".encode())
elif estado_comando["comando_actual"] == "JOIN":
Expand All @@ -89,10 +80,9 @@ def manejar_comando(conn, input_client, channels, addr, username):
else:
# Manejar mensajes normales si no es un comando
broadcast_message(conn, input_client, username)



#CREAR CANAL
# CREAR CANAL
def create_channel(conn, input_client, channels):
partes = input_client.split(" ", 1)
if len(partes) < 2:
Expand All @@ -108,7 +98,7 @@ def create_channel(conn, input_client, channels):
conn.sendall(f"Canal '{nombre_canal}' creado con éxito.".encode())


#LISTAR LOS CANALES
# LISTAR LOS CANALES
def list_channels(conn, channels, username):
if channels:
print(channels)
Expand All @@ -123,9 +113,9 @@ def list_channels(conn, channels, username):
mensaje_lista = "No hay canales disponibles en este momento."

conn.sendall(mensaje_lista.encode())


#UNIR USUARIO A UN CANAL

# UNIR USUARIO A UN CANAL
def join_channel(conn, input_client, channels, username, addr):
nombre_canal = input_client.strip()

Expand All @@ -140,7 +130,7 @@ def join_channel(conn, input_client, channels, username, addr):
conn.sendall(f"El canal '{nombre_canal}' no existe.".encode())


#ENVIAR MENSAJE AL CANAL
# ENVIAR MENSAJE AL CANAL
def send_message(conn, input_client, channels, username):
partes = input_client.split(" ", 2)
if len(partes) < 3:
Expand All @@ -156,18 +146,17 @@ def send_message(conn, input_client, channels, username):
conn.sendall("No estás en ese canal o el canal no existe.".encode())


#ENVIA MENSAJE A TODOS LOS USUARIOS DE LOS CANALES. HABRÁ QUE RECORRER LA LISTA DE CANALES Y MANDAR EL MENSAJE
# ENVIA MENSAJE A TODOS LOS USUARIOS DE LOS CANALES. HABRÁ QUE RECORRER LA LISTA DE CANALES Y MANDAR EL MENSAJE
def broadcast_message(conn, input_client, username):
# Como solo hay un usuario, simplemente envía el mensaje de vuelta. Habrá que cambiar esto para que llegue a todos
conn.sendall(f"{username}: {input_client}".encode())




"""Metodo registroUsuario,
Separa el mensaje del cliente en dos partes, verifica si el mensaje tiene el formato esperado
Almacena el usuario y su dirección IP en el diccionario, envia un mensaje personalizado de confirmación al cliente"""


def registroUsuario(input_client, addr, conn):
partes_mensaje = input_client.split(':')
if len(partes_mensaje) == 2 and partes_mensaje[0] == "USERNAME":
Expand All @@ -187,7 +176,7 @@ def registroUsuario(input_client, addr, conn):
else:
print("Mensaje no reconocido")
return username

#Llamada al metodo establecerConexion
establecerConexion()


#Llamada al metodo establecerConexion
establecerConexion()