juegos

Juegos de terminal de Pancho: Catan (TUI, GUI, web, servidor, PicoCalc), ajedrez, calculadora y minijuegos
git clone https://git.lu3dhn.xyz/juegos.git
Log | Files | Refs

chess-server.sh (4206B)


      1 #!/usr/bin/env bash
      2 # ^ Esta primera linea se llama "shebang". Le dice al sistema operativo con que
      3 #   programa tiene que ejecutar este archivo. En este caso, con "bash" (el
      4 #   interprete de comandos). Asi podemos correr el archivo directamente con
      5 #   ./bin/chess-server.sh en vez de tener que escribir "bash bin/chess-server.sh".
      6 #
      7 # ============================================================================
      8 #  bin/chess-server.sh  --  Servidor "relay" (repetidor) para jugar en red.
      9 # ============================================================================
     10 #
     11 # QUE ES ESTE ARCHIVO (para alguien que recien arranca):
     12 #   El ajedrez se puede jugar entre dos computadoras conectadas a la misma red
     13 #   local (por ejemplo, dos notebooks en la misma casa con el mismo WiFi).
     14 #   Hay dos formas de conectarlas:
     15 #     1) "peer to peer": una computadora hace de servidor y la otra se conecta
     16 #        directo a ella.
     17 #     2) con un "relay" (repetidor): una tercera computadora (o la misma) corre
     18 #        ESTE programa, y las dos jugadoras se conectan al relay. El relay no
     19 #        sabe nada de ajedrez: lo unico que hace es copiar cada mensaje que le
     20 #        manda una jugadora y reenviarselo a la otra. Como un cartero.
     21 #
     22 #   Toda la logica del ajedrez vive en las jugadoras (en ches.sh y lib/). El relay
     23 #   es "tonto" a proposito: solo mueve textos de un lado al otro.
     24 #
     25 # COMO SE USA:
     26 #   ./bin/chess-server.sh [puerto]      (si no pasas puerto, usa el 9000)
     27 #   y despues cada jugadora corre:  ./ches.sh server <ip-de-esta-maquina> <puerto>
     28 
     29 # --- Que puerto vamos a usar ------------------------------------------------
     30 # Un "puerto" es como el numero de un departamento dentro de un edificio (la
     31 # computadora es el edificio, identificado por su IP). Los programas de red
     32 # escuchan en un puerto para que otros sepan a donde golpear la puerta.
     33 #
     34 # "$1" es el PRIMER argumento que le pasamos al script en la linea de comandos.
     35 # La sintaxis "${1:-9000}" significa: "usa $1; pero si $1 esta vacio o no
     36 # existe, usa 9000 en su lugar". O sea, 9000 es el valor por defecto.
     37 PORT="${1:-9000}"
     38 
     39 # --- Chequear que tengamos la herramienta que necesitamos -------------------
     40 # "ncat" es un programita (viene en el paquete "nmap") que sabe abrir conexiones
     41 # de red. Lo usamos para el relay. Antes de seguir, verificamos que este
     42 # instalado.
     43 #
     44 # "command -v ncat" busca el programa ncat y, si lo encuentra, devuelve exito.
     45 # ">/dev/null" tira a la basura lo que imprima ese comando (no nos interesa ver
     46 # la ruta, solo queremos saber si existe). "/dev/null" es un "agujero negro":
     47 # todo lo que mandas ahi desaparece.
     48 #
     49 # El "||" quiere decir "O si lo anterior FALLO, entonces...". En bash, cada
     50 # comando devuelve un numero: 0 = salio todo bien, distinto de 0 = hubo error.
     51 # Entonces "comandoA || comandoB" ejecuta comandoB SOLO si comandoA fallo.
     52 #
     53 # Las llaves { ... } agrupan varios comandos para que se ejecuten juntos.
     54 # "echo ... >&2" imprime un mensaje de error: ">&2" lo manda a la "salida de
     55 # errores" (que es la forma correcta de mostrar errores, separados de la salida
     56 # normal). "exit 1" termina el programa devolviendo 1 (codigo de error).
     57 command -v ncat >/dev/null || { echo "ncat is required (install nmap)." >&2; exit 1; }
     58 
     59 # --- Avisarle a la persona que arranco bien ---------------------------------
     60 # "echo" simplemente imprime texto en la pantalla. Ojo: los mensajes que ve la
     61 # persona quedan en ingles a proposito (es la interfaz del juego).
     62 echo "Chess relay server listening on port ${PORT} (broker mode)."
     63 echo "Players connect with:  ./ches.sh server <server-ip> ${PORT}"
     64 echo "Press Ctrl-C to stop."
     65 
     66 # --- Arrancar el relay de verdad --------------------------------------------
     67 # "exec" reemplaza este script por el programa que le pasamos (ncat). Es decir,
     68 # a partir de aca el proceso DEJA de ser nuestro script y PASA a ser ncat. Lo
     69 # usamos porque no necesitamos hacer nada mas despues: que ncat se quede
     70 # corriendo para siempre haciendo de repetidor.
     71 #
     72 # Banderas de ncat:
     73 #   -l "$PORT"   "listen": quedate escuchando conexiones en este puerto.
     74 #   --broker     modo repetidor: reenvia a cada cliente lo que mandan los demas.
     75 exec ncat -l "$PORT" --broker