mirror of https://github.com/waku-org/js-waku.git
Use useEffect for async start of waku
This commit is contained in:
parent
df5a4f8326
commit
3285d498c7
|
@ -1,7 +1,7 @@
|
||||||
import { Paper } from '@material-ui/core';
|
import { Paper } from '@material-ui/core';
|
||||||
import { multiaddr } from 'multiaddr';
|
import { multiaddr } from 'multiaddr';
|
||||||
import PeerId from 'peer-id';
|
import PeerId from 'peer-id';
|
||||||
import React from 'react';
|
import React, { useEffect, useState } from 'react';
|
||||||
import './App.css';
|
import './App.css';
|
||||||
import { ChatMessage } from 'waku-chat/chat_message';
|
import { ChatMessage } from 'waku-chat/chat_message';
|
||||||
import { WakuMessage } from 'waku/waku_message';
|
import { WakuMessage } from 'waku/waku_message';
|
||||||
|
@ -20,66 +20,63 @@ interface State {
|
||||||
waku?: Waku
|
waku?: Waku
|
||||||
}
|
}
|
||||||
|
|
||||||
class App extends React.Component<Props, State> {
|
export default function App () {
|
||||||
waku?: Waku;
|
let [state, setState] = useState<State>({ messages: [] });
|
||||||
|
|
||||||
constructor(props: Props) {
|
|
||||||
super(props);
|
|
||||||
|
|
||||||
this.state = {
|
useEffect(() => {
|
||||||
messages: []
|
async function initWaku() {
|
||||||
};
|
try {
|
||||||
|
const waku = await Waku.create({});
|
||||||
|
setState(({ messages }) => (
|
||||||
|
{ waku, messages }
|
||||||
|
));
|
||||||
|
|
||||||
Waku.create({}).then((waku) => {
|
waku.libp2p.pubsub.on(RelayDefaultTopic, (event) => {
|
||||||
this.state = { waku: waku, messages: this.state.messages };
|
const wakuMsg = WakuMessage.decode(event.data);
|
||||||
|
if (wakuMsg.payload) {
|
||||||
|
const chatMsg = ChatMessage.decode(wakuMsg.payload);
|
||||||
|
const msgStr = printMessage(chatMsg);
|
||||||
|
|
||||||
waku.libp2p.peerStore.addressBook
|
const messages = state.messages.slice();
|
||||||
.add(PeerId.createFromB58String('QmUJKveCpfwA4cY1zRybMEt5z64FRtMHLFFQwndWrSfMmf'),
|
messages.push(msgStr);
|
||||||
[multiaddr('/ip4/127.0.0.1/tcp/7777/ws')]);
|
setState({ messages, waku });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
waku.libp2p.pubsub.on(RelayDefaultTopic, (event) => {
|
try {
|
||||||
const wakuMsg = WakuMessage.decode(event.data);
|
await waku.dial('/ip4/127.0.0.1/tcp/7777/ws/p2p/QmUJKveCpfwA4cY1zRybMEt5z64FRtMHLFFQwndWrSfMmf');
|
||||||
if (wakuMsg.payload) {
|
console.log('Remote node dialed');
|
||||||
const chatMsg = ChatMessage.decode(wakuMsg.payload);
|
} catch (e) {
|
||||||
const msgStr = printMessage(chatMsg);
|
console.log('Error when dialing peer ', e);
|
||||||
|
|
||||||
const messages = this.state.messages.slice();
|
|
||||||
messages.push(msgStr);
|
|
||||||
this.setState({ messages });
|
|
||||||
}
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.log('Issue starting waku ', e);
|
||||||
|
}
|
||||||
|
|
||||||
});
|
}
|
||||||
|
|
||||||
// Fire and forget
|
if (!state.waku) {
|
||||||
// waku.dial('/ip4/127.0.0.1/tcp/7777/ws/p2p/QmUJKveCpfwA4cY1zRybMEt5z64FRtMHLFFQwndWrSfMmf').then(() => {
|
initWaku()
|
||||||
// console.log('Remote node dialed');
|
.then(() => console.log('Waku init done'))
|
||||||
// }).catch((e) => {
|
.catch((e) => console.log('Waku init failed ', e));
|
||||||
// console.log('Error when dialing peer ', e);
|
}
|
||||||
// });
|
}, [state.waku]);
|
||||||
}).catch((e) => {
|
|
||||||
console.log('Error starting waku ', e);
|
|
||||||
}).then(()=> {
|
|
||||||
console.log("Waku is started");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
|
||||||
return (
|
return (
|
||||||
<div className='App'>
|
<div className='App'>
|
||||||
<div className='chat-room'>
|
<div className='chat-room'>
|
||||||
<WakuContext.Provider value={{ waku: this.state.waku }}>
|
<WakuContext.Provider value={{ waku: state.waku }}>
|
||||||
<Paper>
|
<Paper>
|
||||||
<Room lines={this.state.messages} />
|
<Room lines={state.messages} />
|
||||||
</Paper>
|
</Paper>
|
||||||
</WakuContext.Provider>
|
</WakuContext.Provider>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
);
|
</div>
|
||||||
}
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default App;
|
|
||||||
|
|
||||||
// TODO: Make it a proper component
|
// TODO: Make it a proper component
|
||||||
function printMessage(chatMsg: ChatMessage) {
|
function printMessage(chatMsg: ChatMessage) {
|
||||||
const timestamp = chatMsg.timestamp.toLocaleString([], {
|
const timestamp = chatMsg.timestamp.toLocaleString([], {
|
||||||
|
|
Loading…
Reference in New Issue