@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.
- package/package.json +1 -1
- package/src/protocol.js +15 -8
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dotrino/lobby",
|
|
3
|
-
"version": "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
|
-
* (
|
|
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
|
|
61
|
-
* `
|
|
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
|
-
|
|
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 (
|
|
67
|
-
LOBBY_HOME_NODE =
|
|
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
|
|
85
|
-
return withNode(
|
|
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
|
/**
|