Ok 🆒, ya hemos conseguido escribir mensajes usando nuestra API Saga
. En algún momento estos mensajes se replicarán y llegarán
a cada peer conectado.
...Pero también deberíamos poder leer los mensajes de nuestra db. Y no solo eso, deberíamos poder leer los mensajes en real-time.
Queremos que Saga
detecte cuando un usuario envía/escribe un mensaje en el chat.
El siguiente ejercicio consiste en lograr ese objetivo: leer mensajes en real-time.
Saga
ahora cuenta con un métodoinitialize
, necesitamos que una vez que esteready
nuestra db haga un update de los mensajes. Esto quiere decir, leer de hyperdb cuales fueron los últimos mensajes y agregarlos a nuestroMap
de mensajes.- Una vez que tenemos el listado, deberíamos llamar una función que se encargue de escuchar por nuevos cambios en nuestra db y ante un cambio llame nuevamente al update de mensajes. De esta forma resolveríamos el problema de real-time.
- Cada mensaje nuevo que
Saga
encuentre debería emitir un eventomessage
junto al mensaje y la key como argumentos. - Deberás encontrar una forma de ser eficiente en el update de mensajes, finalizar el update cuando sea necesario, no queremos recorrer el stream entero cada vez que hay un cambio.
- Para leer de hyperdb te recomendamos utilizar
createHistoryStream
e iterar sobre los mensajes de forma reversa. - Ahora
Saga
extiende de EventEmitter, eso quiere decir que tienen a su disposición toda la funcionalidad para emitir eventos. - Cuando queremos finalizar un stream podemos llamar a:
.destroy()
. Si el stream forma parte de una cadena de streams conectados conpump
, llamar a undestroy
provocaría finalizar cada stream conectado. - Recuerda que
pump
acepta como último parámetro una función que se ejecuta cuando finalizan los streams. - No olvides de tener a mano la doc de hyperdb
- Podes preguntarnos lo que necesites! 🌈
$ npm test ./07