Skip to content
Merged
Show file tree
Hide file tree
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
11 changes: 11 additions & 0 deletions python/Modulo-10-Nerve/100-topologia-red/reto.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Reto 100: El Observador de la Matriz
# Este archivo sirve para verificar que se comprendió el funcionamiento del dashboard y la topología en estrella.

from nerve import NexusClient

def main():
print("Reto 100: Visualización de la Topología Estrella de Nerve completada.")
print("Para verificar esto, puedes iniciar 'nerve start' y 'nerve dashboard' en tu navegador.")

if __name__ == "__main__":
main()
27 changes: 27 additions & 0 deletions python/Modulo-10-Nerve/91-local-first/mensajero.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import time
from nerve import NexusClient

print("Iniciando transmisor...")

# Connect client
cliente = NexusClient()
cliente.connect("agente_007")
print("Conectado como agente_007.")

# Secret report
informe_secreto = {
"mision": "Aterrizaje Lunar",
"objetivo": "Establecer base de comunicación",
"nivel_peligro": 5
}

print("Enviando informe secreto al cuartel_general...")
cliente.send("cuartel_general", informe_secreto)
print("Informe enviado.")

print("Avisando a la red local...")
cliente.broadcast({"aviso": "Misión cumplida. Agente fuera."})

# Wait for transmission
time.sleep(1)
print("Misión cumplida. Agente fuera.")
27 changes: 27 additions & 0 deletions python/Modulo-10-Nerve/91-local-first/reto.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import time
from nerve import NexusClient

print("Iniciando transmisor...")

# Connect client
cliente = NexusClient()
cliente.connect("agente_007")
print("Conectado como agente_007.")

# Secret report
informe_secreto = {
"mision": "Aterrizaje Lunar",
"objetivo": "Establecer base de comunicación",
"nivel_peligro": 5
}

print("Enviando informe secreto al cuartel_general...")
cliente.send("cuartel_general", informe_secreto)
print("Informe enviado.")

print("Avisando a la red local...")
cliente.broadcast({"aviso": "Misión cumplida. Agente fuera."})

# Wait for transmission
time.sleep(1)
print("Misión cumplida. Agente fuera.")
31 changes: 31 additions & 0 deletions python/Modulo-10-Nerve/92-arquitectura-nodos/alarma.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
from nerve import NexusClient

# Connect client
cliente = NexusClient()
cliente.connect("central_alarmas")

# Define callback
def vigilante(datos):
# Support both wrapped and unwrapped payload formats
payload = datos.get("payload") if isinstance(datos, dict) else None
if isinstance(payload, dict):
inner_datos = payload
else:
inner_datos = datos

if not isinstance(inner_datos, dict):
return

peligro = inner_datos.get("peligro")
if peligro == "fuego":
print("¡ALERTA ROJA! Activando aspersores de agua.")
elif peligro == "ladron":
print("¡ALERTA AZUL! Llamando a la policía local.")
else:
print("Situación normal. Seguimos vigilando.")

# Register listener
cliente.listen(vigilante)

# Wait for reports
input("Central de Alarmas activada. Esperando reportes...\n")
31 changes: 31 additions & 0 deletions python/Modulo-10-Nerve/92-arquitectura-nodos/reto.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
from nerve import NexusClient

# Connect client
cliente = NexusClient()
cliente.connect("central_alarmas")

# Define callback
def vigilante(datos):
# Support both wrapped and unwrapped payload formats
payload = datos.get("payload") if isinstance(datos, dict) else None
if isinstance(payload, dict):
inner_datos = payload
else:
inner_datos = datos

if not isinstance(inner_datos, dict):
return

peligro = inner_datos.get("peligro")
if peligro == "fuego":
print("¡ALERTA ROJA! Activando aspersores de agua.")
elif peligro == "ladron":
print("¡ALERTA AZUL! Llamando a la policía local.")
else:
print("Situación normal. Seguimos vigilando.")

# Register listener
cliente.listen(vigilante)

# Wait for reports
input("Central de Alarmas activada. Esperando reportes...\n")
32 changes: 32 additions & 0 deletions python/Modulo-10-Nerve/93-p2p/radio_lunar.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
from nerve import NexusClient

# Connect client
cliente = NexusClient()
cliente.connect("astronauta")

# Define callback
def auricular(datos):
payload = datos.get("payload") if isinstance(datos, dict) else None
if isinstance(payload, dict):
inner_datos = payload
else:
inner_datos = datos

if not isinstance(inner_datos, dict):
return

mensaje_recibido = inner_datos.get("mensaje")
if mensaje_recibido:
print("\n[Tierra]: " + str(mensaje_recibido))

# Register listener
cliente.listen(auricular)

# Interactive loop
while True:
try:
msg = input("Luna: ")
paquete = {"mensaje": msg}
cliente.send("tierra", paquete)
except (KeyboardInterrupt, EOFError):
break
32 changes: 32 additions & 0 deletions python/Modulo-10-Nerve/93-p2p/reto.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
from nerve import NexusClient

# Connect client
cliente = NexusClient()
cliente.connect("astronauta")

# Define callback
def auricular(datos):
payload = datos.get("payload") if isinstance(datos, dict) else None
if isinstance(payload, dict):
inner_datos = payload
else:
inner_datos = datos

if not isinstance(inner_datos, dict):
return

mensaje_recibido = inner_datos.get("mensaje")
if mensaje_recibido:
print("\n[Tierra]: " + str(mensaje_recibido))

# Register listener
cliente.listen(auricular)

# Interactive loop
while True:
try:
msg = input("Luna: ")
paquete = {"mensaje": msg}
cliente.send("tierra", paquete)
except (KeyboardInterrupt, EOFError):
break
26 changes: 26 additions & 0 deletions python/Modulo-10-Nerve/94-estado-global/banco.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
from nerve import NexusClient

saldo_boveda = 1000

def cajero(datos):
global saldo_boveda
payload = datos.get("payload") if isinstance(datos, dict) else None
if isinstance(payload, dict):
inner_datos = payload
else:
inner_datos = datos

if not isinstance(inner_datos, dict):
return

retiro = inner_datos.get("retiro", 0)
if retiro > 0:
saldo_boveda = saldo_boveda - retiro
print(f"Retiro procesado de: {retiro}. Saldo actual: {saldo_boveda}")

# Setup client
cliente = NexusClient()
cliente.connect("banco_central")
cliente.listen(cajero)

input("Banco abierto. Presiona ENTER para cerrar...\n")
26 changes: 26 additions & 0 deletions python/Modulo-10-Nerve/94-estado-global/reto.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
from nerve import NexusClient

saldo_boveda = 1000

def cajero(datos):
global saldo_boveda
payload = datos.get("payload") if isinstance(datos, dict) else None
if isinstance(payload, dict):
inner_datos = payload
else:
inner_datos = datos

if not isinstance(inner_datos, dict):
return

retiro = inner_datos.get("retiro", 0)
if retiro > 0:
saldo_boveda = saldo_boveda - retiro
print(f"Retiro procesado de: {retiro}. Saldo actual: {saldo_boveda}")

# Setup client
cliente = NexusClient()
cliente.connect("banco_central")
cliente.listen(cajero)

input("Banco abierto. Presiona ENTER para cerrar...\n")
Binary file added python/Modulo-10-Nerve/95-criptografia/boveda.nrv
Binary file not shown.
16 changes: 16 additions & 0 deletions python/Modulo-10-Nerve/95-criptografia/reto.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import os
from nerve import pack_nrv

print("Iniciando protocolo de seguridad...")

base_dir = os.path.dirname(os.path.abspath(__file__))
archivo_txt = os.path.join(base_dir, "codigos_nucleares.txt")
caja_fuerte = os.path.join(base_dir, "boveda.nrv")
password = "alenia_secreto"

pack_nrv(archivo_txt, caja_fuerte, password)

print("Archivos encriptados con éxito en boveda.nrv")

if os.path.exists(archivo_txt):
os.remove(archivo_txt)
55 changes: 55 additions & 0 deletions python/Modulo-10-Nerve/96-sincronizacion/reto.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import time
from nerve import NexusClient

lista_tareas = []

def al_recibir_mensaje(remitente, mensaje=None):
global lista_tareas
if mensaje is None:
payload = remitente
sender = payload.get("from")
msg = payload.get("payload")
else:
sender = remitente
msg = mensaje

if not isinstance(msg, dict):
return

accion = msg.get("accion")
if accion == "pedir_tareas":
if len(lista_tareas) > 0:
respuesta = {
"accion": "enviar_tareas",
"datos": lista_tareas
}
cliente.broadcast(respuesta)
elif accion == "enviar_tareas":
lista_tareas = msg.get("datos", [])
print(f"\n[!] ¡Sincronizado! Tareas actuales: {lista_tareas}")
elif accion == "nueva_tarea":
tarea = msg.get("datos")
if tarea and tarea not in lista_tareas:
lista_tareas.append(tarea)
print(f"\n[*] Nueva tarea recibida: {tarea}")

# Setup client
cliente = NexusClient()
cliente.connect("todo_client")
cliente.listen(al_recibir_mensaje)

print("[*] Pidiendo sincronización a la red...")
cliente.broadcast({"accion": "pedir_tareas"})
time.sleep(1)

while True:
try:
print("\n--- Lista de Tareas ---")
for i, t in enumerate(lista_tareas, 1):
print(f"{i}. {t}")
nueva = input("Ingresa una nueva tarea: ")
if nueva:
lista_tareas.append(nueva)
cliente.broadcast({"accion": "nueva_tarea", "datos": nueva})
except (KeyboardInterrupt, EOFError):
break
39 changes: 39 additions & 0 deletions python/Modulo-10-Nerve/97-microservicios/reto.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import time
from nerve import NexusClient

# Connect client
cliente = NexusClient()
cliente.connect("cerebro_matematico")

# Define callback
def al_recibir_mensaje(remitente, mensaje=None):
if mensaje is None:
payload = remitente
sender = payload.get("from")
msg = payload.get("payload")
else:
sender = remitente
msg = mensaje

if not isinstance(msg, dict):
return

accion = msg.get("accion")
if accion == "sumar":
a = msg.get("a", 0)
b = msg.get("b", 0)
total = a + b
print(f"\n[!] Petición de '{sender}' recibida: sumar {a} y {b}.")
# Send result back
cliente.send(sender, {"accion": "resultado", "total": total})
print("[✓] Resultado calculado y enviado.")

# Register listener
cliente.listen(al_recibir_mensaje)

print("--- MODO CALCULADORA ---")
print("[*] Cerebro encendido.")

# Keep alive
while True:
time.sleep(1)
8 changes: 8 additions & 0 deletions python/Modulo-10-Nerve/98-despliegue/cliente_legal.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import time
from nerve import NexusClient

cliente = NexusClient()
cliente.connect("infiltrado")

while True:
time.sleep(1)
4 changes: 4 additions & 0 deletions python/Modulo-10-Nerve/98-despliegue/hub_fortaleza.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
from nerve import NexusHub

hub = NexusHub()
hub.start()
1 change: 1 addition & 0 deletions python/Modulo-10-Nerve/98-despliegue/nerve.config
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
auth_token=patito_de_goma
4 changes: 4 additions & 0 deletions python/Modulo-10-Nerve/99-optimizacion/hub_estricto.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
from nerve import NexusHub

hub = NexusHub()
hub.start()
1 change: 1 addition & 0 deletions python/Modulo-10-Nerve/99-optimizacion/nerve.config
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
rate_limit_messages_per_sec=2
Loading
Loading