🎯 Tòpics i comandes
Estructura de tòpics
scaperoom/[type]/[command]
scaperoom/[type]/[command]/response
1️⃣ Partides (Gestió de partides)
scaperoom/partida/nueva
Payload: {"nompartida": "Escape Room 1"}
Resposta: "OK: Partida 1 creada"
scaperoom/partida/actual
Payload: (buit)
Resposta: "Partida actual: ID=1, nom=Escape Room 1"
2️⃣ Usuaris (Gestió d'usuaris)
scaperoom/usuario/registrar
Payload:
{
"nom": "Joan",
"cognoms": "Santasusagna",
"edat": 25,
"correu": "joan@example.com",
"telefon": "555111111",
"instagram": "joan_s",
"password": "secret123"
}
Resposta: "OK: Usuari 1 registrat"
scaperoom/usuario/listar
Payload: (buit)
Resposta: JSON array amb tots els usuaris
[
{"id": 1, "nom": "Joan", "cognoms": "Santasusagna", "edat": 25, "correu": "joan@example.com"},
{"id": 2, "nom": "Maria", "cognoms": "Garcia", "edat": 23, "correu": "maria@example.com"}
]
scaperoom/usuario/partida/listar
Payload:
{
"idpartida": 1
}
Resposta: JSON array amb usuaris de la partida
[
{"id": 1, "nom": "Joan", "cognoms": "Santasusagna", "idusuari": 1, "idpolsera": "polsera_001"},
{"id": 2, "nom": "Maria", "cognoms": "Garcia", "idusuari": 2, "idpolsera": "polsera_002"}
]
scaperoom/usuario/partida
Payload:
{
"idpartida": 1,
"idusuario": 1,
"idpolsera": "polsera_001"
}
Resposta: "OK: Usuari afegit a partida"
3️⃣ Punts (Gestió de la puntuació)
scaperoom/puntos/asignar
Payload: {"id": 1, "userid": 1, "punts": 100}
scaperoom/puntos/sumar
Payload: {"id": 1, "userid": 1, "punts": 50}
scaperoom/puntos/restar
Payload: {"id": 1, "userid": 1, "punts": 10}
scaperoom/puntos/consultar
Payload: {"id": 1, "userid": 1}
Resposta: "Punts: 140"
4️⃣ Admin (Gestió de privilegis)
scaperoom/admin/set
Payload: {"idusuario": 2}
scaperoom/admin/unset
Payload: {"idusuario": 2}
🐛 Solució de problemes
❌ "Temps d'espera excedit (timeout)"
Causa: El port 5009 està bloquejat pel tallafocs
Solució: Obre el port o utilitza localhost en lloc de la IP pública
❌ "JSON invàlid a la comanda"
Causa: Format incorrecte al payload
Solució: Verifica els paràmetres del JSON
🎓 Exemples complets
Exemple 1: Crear una partida i registrar usuaris
from paho.mqtt.client import Client
import json
import time
client = Client()
client.connect("localhost", 5009)
client.loop_start()
time.sleep(1)
# Crear partida
payload = json.dumps({"nompartida": "Escape Room Nivell 1"})
client.publish("scaperoom/partida/nueva", payload, qos=1)
time.sleep(1)
# Registrar usuari
payload = json.dumps({
"nom": "Joan",
"cognoms": "Santasusagna",
"password": "secret123"
})
client.publish("scaperoom/usuario/registrar", payload, qos=1)
time.sleep(2)
client.loop_stop()
Exemple 2: Subscriure's a les respostes
def on_message(client, userdata, msg):
print(f"[{msg.topic}] {msg.payload.decode()}")
client = Client()
client.on_message = on_message
client.connect("localhost", 5009)
client.subscribe("scaperoom/#")
client.loop_forever()
Rendiment
| Mètrica |
Valor |
| Clients concurrents |
100+ |
| Missatges per segon |
1000+ |
| Latència |
<10ms (localhost) |
| Ús de memòria |
~50MB |