@dotrino/lobby 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/protocol.js +15 -8
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dotrino/lobby",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Lobby + matchmaking reciclable para juegos del ecosistema Dotrino: salas, asientos, espectadores, motor de turnos autoritativo, reputación y contactos sobre el proxy/identity/reputation compartidos",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
package/src/protocol.js CHANGED
@@ -50,21 +50,28 @@ export const K = {
50
50
  * NODO DUEÑO DE LOS CANALES.
51
51
  *
52
52
  * Un canal del proxio puede llevar delante el prefijo del nodo que lo hospeda
53
- * (`P1/loquesea`). Ese nodo guarda la membresía y los demás le pasan las
53
+ * (`<id de 12>/loquesea`). Ese nodo guarda la membresía y los demás le pasan las
54
54
  * operaciones. Sin prefijo, cada proxio tiene su propia copia del canal — que es
55
55
  * lo que hacía que dos personas en proxios distintos NO se vieran en la misma
56
56
  * lista de salas, aunque los mensajes entre ellas sí cruzaran.
57
57
  *
58
58
  * El **canal de descubrimiento** es uno solo para todo el ecosistema, así que
59
59
  * tiene que vivir en un nodo fijo: si cada quien lo publicara en el suyo,
60
- * habría tantas listas de salas como proxios. Se puede cambiar con
61
- * `setLobbyHomeNode()` para una malla propia.
60
+ * habría tantas listas de salas como proxios. Se fija con `setLobbyHomeNode()`
61
+ * pasándole el id del proxio elegido (se lee de `client.node`). Mientras no se
62
+ * fije, el descubrimiento es local a cada proxio.
62
63
  */
63
- let LOBBY_HOME_NODE = 'P1'
64
+ const NODE_ID_LEN = 12
65
+ const isNodeId = (s) => new RegExp(`^[1-9A-Z]{${NODE_ID_LEN}}$`).test(String(s || ''))
66
+
67
+ // Sin valor por defecto: el id de un proxio se DERIVA de su llave, así que no
68
+ // hay ninguno que se pueda escribir aquí de antemano. Mientras no se fije, el
69
+ // canal de descubrimiento es local a cada proxio (comportamiento de siempre).
70
+ let LOBBY_HOME_NODE = null
64
71
 
65
72
  /** Fija en qué proxio vive el canal de descubrimiento de salas. */
66
- export function setLobbyHomeNode (prefix) {
67
- LOBBY_HOME_NODE = /^[1-9A-Z]{2}$/.test(String(prefix || '')) ? prefix : null
73
+ export function setLobbyHomeNode (nodeId) {
74
+ LOBBY_HOME_NODE = isNodeId(nodeId) ? nodeId : null
68
75
  }
69
76
 
70
77
  const withNode = (prefix, name) => (prefix ? `${prefix}/${name}` : name)
@@ -81,8 +88,8 @@ export const discoveryChannel = (gameId) => withNode(LOBBY_HOME_NODE, `cclobby/$
81
88
  * declararlo ni acordarlo.
82
89
  */
83
90
  export const roomChannel = (gameId, roomId) => {
84
- const prefix = /^[1-9A-Z]{2}/.test(String(roomId || '')) ? String(roomId).slice(0, 2) : null
85
- return withNode(prefix, `ccroom/${gameId}/${roomId}`)
91
+ const id = String(roomId || '').slice(0, NODE_ID_LEN)
92
+ return withNode(isNodeId(id) ? id : null, `ccroom/${gameId}/${roomId}`)
86
93
  }
87
94
 
88
95
  /**