Process incoming messages

This commit is contained in:
Franck Royer 2021-07-28 13:07:41 +10:00
parent 7c5382dfff
commit 8a7f2401ea
No known key found for this signature in database
GPG Key ID: A82ED75A8DFC50A4
3 changed files with 56 additions and 13 deletions

View File

@ -23,6 +23,21 @@ function App() {
}); });
}, [waku, wakuStatus]); }, [waku, wakuStatus]);
// Need to keep the same reference around to add and delete from relay observer
const processIncomingMessage = React.useCallback((wakuMessage) => {
console.log('Message Received', wakuMessage);
}, []);
React.useEffect(() => {
if (!waku) return;
waku.relay.addObserver(processIncomingMessage, [ContentTopic]);
return function cleanUp() {
waku.relay.deleteObserver(processIncomingMessage, [ContentTopic]);
};
}, [waku, wakuStatus, processIncomingMessage]);
const sendMessageOnClick = () => { const sendMessageOnClick = () => {
if (wakuStatus !== 'Ready') return; if (wakuStatus !== 'Ready') return;

4
guides/menu.md Normal file
View File

@ -0,0 +1,4 @@
# Guides
- [Receive and Send messages using Waku Relay](relay-receive-send-messages.md)
- [Choose a content topic for your dApp](choose-content-topic.md)

View File

@ -1,6 +1,10 @@
# Received and Send messages using Waku Relay # Receive and Send messages using Waku Relay
Waku Relay is a gossip protocol that enables you to send and receive messages. Waku
Relay
is
a
gossip protocol that enables you to send and receive messages.
You can find Waku Relay's specifications on [Vac RFC](https://rfc.vac.dev/spec/11/). You can find Waku Relay's specifications on [Vac RFC](https://rfc.vac.dev/spec/11/).
Before starting, you need to choose a _Content Topic_ for your dApp. Before starting, you need to choose a _Content Topic_ for your dApp.
@ -40,13 +44,25 @@ const nodes = await getStatusFleetNodes();
await Promise.all(nodes.map((addr) => waku.dial(addr))); await Promise.all(nodes.map((addr) => waku.dial(addr)));
``` ```
# Receive messages
To monitor messages for your app, you need to register an observer on relay for your app's content topic:
```js
const processIncomingMessage = (wakuMessage) => {
console.log("Message Received", wakuMessage);
};
waku.relay.addObserver(processIncomingMessage, ["/relay-guide/1/chat/proto"]);
```
# Send messages # Send messages
We are now ready to send message. You are now ready to send messages.
Let's start by sending simple strings as messages. Let's start by sending simple strings as messages.
To send a message, we need to wrap the message in a `WakuMessage`. To send a message, you need to wrap the message in a `WakuMessage`.
When using a basic string payload, we can just use the `WakuMessage.fromUtf8String` helper: When using a basic string payload, you can use the `WakuMessage.fromUtf8String` helper:
```js ```js
import { WakuMessage } from 'js-waku'; import { WakuMessage } from 'js-waku';
@ -54,7 +70,7 @@ import { WakuMessage } from 'js-waku';
const wakuMessage = await WakuMessage.fromUtf8String(message, `/relay-guide/1/chat/proto`); const wakuMessage = await WakuMessage.fromUtf8String(message, `/relay-guide/1/chat/proto`);
``` ```
Then, we use the `relay` module to send the message to our peers, Then, use the `relay` module to send the message to our peers,
the message will then be relayed to the rest of the network thanks to Waku Relay: the message will then be relayed to the rest of the network thanks to Waku Relay:
```js ```js
@ -62,23 +78,31 @@ import { WakuMessage } from 'js-waku';
const wakuMessage = await WakuMessage.fromUtf8String(message, `/relay-guide/1/chat/proto`); const wakuMessage = await WakuMessage.fromUtf8String(message, `/relay-guide/1/chat/proto`);
await waku.relay.send(wakuMessage) await waku.relay.send(wakuMessage);
``` ```
So far, we have: # Conclusion
That is it! Now, you know how to send and receive messages over Waku using the Waku Relay protocol.
Feel free to check out other [guides](menu.md) or [examples](../examples).
Here is the final code:
```js ```js
import { getStatusFleetNodes, Waku, WakuMessage } from 'js-waku'; import { getStatusFleetNodes, Waku, WakuMessage } from 'js-waku';
const wakuNode = await Waku.create(); const wakuNode = await Waku.create();
import { getStatusFleetNodes } from 'js-waku';
const nodes = await getStatusFleetNodes(); const nodes = await getStatusFleetNodes();
await Promise.all(nodes.map((addr) => waku.dial(addr))); await Promise.all(nodes.map((addr) => waku.dial(addr)));
const processIncomingMessage = (wakuMessage) => {
console.log('Message Received', wakuMessage);
};
waku.relay.addObserver(processIncomingMessage, ['/relay-guide/1/chat/proto']);
const wakuMessage = await WakuMessage.fromUtf8String(message, `/relay-guide/1/chat/proto`); const wakuMessage = await WakuMessage.fromUtf8String(message, `/relay-guide/1/chat/proto`);
await waku.relay.send(wakuMessage);
await waku.relay.send(wakuMessage)
``` ```