Felicitaciones 🎉🎆!!
Si llegaste hasta aquí significa que ya sos una hypercore padawan. Es tiempo de ampliar tu conocimiento peer-to-peer y convertirte en una gran Jedi.
Vimos que hypercore nos ofrece un log distribuido pero existen situaciones en donde eso no nos alcanza, por suerte, nada nos limita a crear estructuras mucho mas complejas arriba de hypercore. Una de ellas es nuestra ⭐ del workshop: hyperdb
Hyperdb nos ofrece una base de datos key-value distribuida sobre un conjunto de feeds de hypercore.
Una de la features mas importantes es, que agrega la posibilidad de tener multiple-writters
lo cual
llevaría a Dat al siguiente nivel, en donde múltiples usuarios previamente autorizados podrían
modificar el contenido de un recurso Dat. Ya no existiría un solo owner.
En este workshop estamos aprendiendo cómo usar Dat para escrbir una aplicación web P2P. Nuestro objetivo será construir juntos un chat P2P. El codename del chat será: Olaf 😺.
Para construir nuestro chat vamos a usar lo que venimos aprendiendo. En este modulo vamos a introducir una parte fundamental que iremos desarrollando. Les presentamos a saga 😻
Hyperdb es lo que necesitamos para poder avanzar en nuestro chat peer-to-peer.
Vamos a definir una API que permita a múltiples usuarios escribir sobre un hyperdb distribuido.
En este caso enfoquemonos en los requerimientos que tiene un chat para considerarse como tal:
- Podemos escribir mensajes en el chat.
- Podemos leer los mensajes en real-time.
- Podemos conectar y desconectar usuarios al canal (room).
Entonces, comencemos el desarrollo de nuestra API, aka: Saga 😻
- En la clase
Saga
agregar un constructor que reciba unstorage
, unakey
y unusername
. - Con el
storage
y lakey
, crear una instancia de hyperdb con un valueEncoding json. - Una instancia de Saga debe permitirnos acceder a:
- la instancia de hyperdb, bajo la prop:
db
- el username, bajo la prop:
username
- un Map
de usuarios (inicialmente vació):
users
- un
Map
de mensajes (inicialmente vació):messages
- un timestamp con la fecha actual de creación:
timestamp
- Vas a encontrar que hyperdb posee una API muy similar a hypercore. 😉
- Sobre
Map
, partes importantes:
- un map puede contener objetos como claves. 🆒
- constructor:
new Map([iterable])
- métodos:
size()
, para obtener el tamaño.set(clave, valor)
, para agregar un clave nueva con valor.has(clave)
, para saber si nuestro map contiene determinada clave.keys()
, para obtener todas las claves del map.
- Hint: es 🆒 usar
for...of
para iterar sobre los elementos del map.
$ npm test ./05