add go events subscription
This commit is contained in:
parent
2c948dbdac
commit
1380f9c78f
|
@ -0,0 +1,35 @@
|
||||||
|
export default class Events {
|
||||||
|
constructor() {
|
||||||
|
this.ws = new WebSocket('wss://draw.status.im/queryws')
|
||||||
|
|
||||||
|
this.ws.onopen = () => {
|
||||||
|
|
||||||
|
// subscribe to events
|
||||||
|
this.ws.send(JSON.stringify({
|
||||||
|
method: 'subevents',
|
||||||
|
jsonrpc: '2.0',
|
||||||
|
params: {},
|
||||||
|
id: 'events'
|
||||||
|
}))
|
||||||
|
|
||||||
|
// on new event
|
||||||
|
this.ws.onmessage = event => this.onMessage(event)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onMessage(event) {
|
||||||
|
const data = JSON.parse(event.data)
|
||||||
|
const encodedData = data.result.encoded_body
|
||||||
|
|
||||||
|
// there's an useful encoded that
|
||||||
|
if (encodedData) {
|
||||||
|
const dAppEvent = JSON.parse(atob(encodedData))
|
||||||
|
|
||||||
|
// tile map state updated
|
||||||
|
if (this.onEvent && dAppEvent.Method == 'onTileMapStateUpdate') {
|
||||||
|
const parsedData = JSON.parse(dAppEvent.Data)
|
||||||
|
this.onEvent(parsedData)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,7 +6,8 @@ import SNT from 'Embark/contracts/SNT';
|
||||||
import Web3Render from './components/standard/Web3Render';
|
import Web3Render from './components/standard/Web3Render';
|
||||||
import DrawField from './components/draw/DrawField';
|
import DrawField from './components/draw/DrawField';
|
||||||
//import ContractClient, { createContract } from './contract_client'
|
//import ContractClient, { createContract } from './contract_client'
|
||||||
import ContractClient from './client_contractgo'
|
import ContractClient from './client_contractgo';
|
||||||
|
import Events from './chain_client/events';
|
||||||
window['SNT'] = SNT;
|
window['SNT'] = SNT;
|
||||||
|
|
||||||
import './dapp.css';
|
import './dapp.css';
|
||||||
|
@ -36,20 +37,20 @@ class App extends React.Component {
|
||||||
async createContract() {
|
async createContract() {
|
||||||
const { tileStateUpdateHandler } = this;
|
const { tileStateUpdateHandler } = this;
|
||||||
this.contractClient = await new ContractClient();
|
this.contractClient = await new ContractClient();
|
||||||
|
this.events = new Events();
|
||||||
await this.contractClient.createContract();
|
await this.contractClient.createContract();
|
||||||
|
this.events.onEvent = tileData => this.tileStateUpdateHandler(tileData)
|
||||||
this.requestUpdateTilesOnCanvas();
|
this.requestUpdateTilesOnCanvas();
|
||||||
}
|
}
|
||||||
|
|
||||||
tileStateUpdateHandler = tileData => {
|
tileStateUpdateHandler = tileData => {
|
||||||
const { returnValues: { state } } = tileData;
|
|
||||||
console.log('tile state update event received');
|
console.log('tile state update event received');
|
||||||
this.setState({ canvasState: state });
|
this.setState({ canvasState: tileData });
|
||||||
}
|
}
|
||||||
|
|
||||||
async requestUpdateTilesOnCanvas() {
|
async requestUpdateTilesOnCanvas() {
|
||||||
const tileMapState = await this.contractClient.getTileMapState()
|
const tileMapState = await this.contractClient.getTileMapState()
|
||||||
const tileData = tileMapState.getData()
|
const tileData = tileMapState.getData()
|
||||||
debugger
|
|
||||||
if (tileData) {
|
if (tileData) {
|
||||||
const canvasState = JSON.parse(tileData);
|
const canvasState = JSON.parse(tileData);
|
||||||
this.setState({ canvasState });
|
this.setState({ canvasState });
|
||||||
|
|
Loading…
Reference in New Issue