#!/usr/local/bin/python
#-*- coding: utf-8 -*-
import socket
import json
import base64
import signal
import sys
from typing import NoReturn

def signal_handler(sig, frame) -> NoReturn:
    print('¡Hasta luego!')
    sys.exit(0)

signal.signal(signal.SIGINT, signal_handler)

def servidor() -> None:
    """
        Servidor que envía un mensaje al cliente
    Details:
    --------
        message: dict[str,str] = {
            "mensaje": "Hola, cliente",
            "status": "200",
            "error": ""
        }
        conn.sendall(json.dumps(message).encode("utf-8"))
    args
    ----
    None

    return
    ------
    None

    example
    -------
        servidor()
    
    """

    # creamos el socket
    try:
        s: socket.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        print("Socket creado exitosamente")
        s.bind(("127.0.0.1", 1234))
        s.listen(5)
        print("Esperando conexión...")
        while True:
            conn, addr = s.accept()
            print(f"Conexión establecida con {addr}")
            message: dict[str,str] = {
                "mensaje": "Hola, cliente",
                "status": "200",
                "error": ""
            }
            conn.sendall(base64.b64encode(json.dumps(message).encode("utf-8")))
            conn.close()
    except socket.error as err:
        print(f"Error al crear el socket: {err}")
    finally:
        s.close()

if __name__ == "__main__":
    servidor()

#!/usr/local/bin/python
#-*- coding: utf-8 -*-
import socket
import json
import base64
import signal
import sys
from typing import NoReturn

def signal_handler(sig, frame) -> NoReturn:
    print('¡Hasta luego!')
    sys.exit(0)

def cliente() -> None:
    """
        Cliente que recibe un mensaje del servidor
    Details:
    --------
        s: socket.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect(("
        data = s.recv(1024)
        message: dict[str,str] = json.loads(
            base64.b64decode(data).decode("utf-8"))
        print("Mensaje recibido: \\n{}"
              .format(json.dumps(message, indent=4)))
    args
    ----
    None

    return
    ------
    None

    example
    -------
        cliente()
    
    """
    try:
        # deepcode ignore MissingAPI: Not a real API
        s: socket.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect(("127.0.0.1", 1234))
        data = s.recv(1024)
        message: dict[str,str] = json.loads(
            base64.b64decode(data).decode("utf-8"))
        print("Mensaje recibido: \\n{}"
              .format(json.dumps(message, indent=4)))
    except:
        print("Error de conexión")
    finally:
        print("¡Hasta luego!")
        s.close()

if __name__ == "__main__":
    cliente()