Merge pull request #392 from embark-framework/bug_fix/whisper-demo

Fix Whisper demo
This commit is contained in:
Iuri Matias 2018-05-02 16:12:33 -04:00 committed by GitHub
commit be7723e077
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 112 additions and 96 deletions

View File

@ -263,11 +263,11 @@ EmbarkJS.Messages.sendMessage = function(options) {
return this.currentMessages.sendMessage(options); return this.currentMessages.sendMessage(options);
}; };
EmbarkJS.Messages.listenTo = function(options) { EmbarkJS.Messages.listenTo = function(options, callback) {
if (!this.currentMessages) { if (!this.currentMessages) {
throw new Error('Messages provider not set; e.g EmbarkJS.Messages.setProvider("whisper")'); throw new Error('Messages provider not set; e.g EmbarkJS.Messages.setProvider("whisper")');
} }
return this.currentMessages.listenTo(options); return this.currentMessages.listenTo(options, callback);
}; };
EmbarkJS.Utils = { EmbarkJS.Utils = {

View File

@ -64,7 +64,7 @@ __embarkWhisperNewWeb3.sendMessage = function (options) {
}); });
}; };
__embarkWhisperNewWeb3.listenTo = function (options) { __embarkWhisperNewWeb3.listenTo = function (options, callback) {
var topics = options.topic || options.topics; var topics = options.topic || options.topics;
let promise = new __MessageEvents(); let promise = new __MessageEvents();
@ -82,12 +82,15 @@ __embarkWhisperNewWeb3.listenTo = function (options) {
var payload = JSON.parse(EmbarkJS.Utils.toAscii(result.payload)); var payload = JSON.parse(EmbarkJS.Utils.toAscii(result.payload));
var data; var data;
data = { data = {
topic: result.topic, topic: EmbarkJS.Utils.toAscii(result.topic),
data: payload, data: payload,
//from: result.from, //from: result.from,
time: result.timestamp time: result.timestamp
}; };
if (callback) {
return callback(null, data);
}
promise.cb(payload, data, result); promise.cb(payload, data, result);
}); });

View File

@ -1,105 +1,118 @@
import EmbarkJS from 'Embark/EmbarkJS'; import EmbarkJS from 'Embark/EmbarkJS';
import React from 'react'; import React from 'react';
import { Alert, Form, FormGroup, FormControl, HelpBlock, Button } from 'react-bootstrap'; import {Alert, Form, FormGroup, FormControl, Button} from 'react-bootstrap';
class Whisper extends React.Component { class Whisper extends React.Component {
constructor(props) { constructor (props) {
super(props); super(props);
this.state = { this.state = {
listenTo: '', listenTo: '',
channel: '', channel: '',
message: '', message: '',
subscribedChannels: [], subscribedChannels: [],
messageList: [], messageList: [],
logs: [] logs: []
};
}
handleChange (e, name) {
this.state[name] = e.target.value;
this.setState(this.state);
}
sendMessage (e) {
e.preventDefault();
EmbarkJS.Messages.sendMessage({topic: this.state.channel, data: this.state.message});
this.addToLog("EmbarkJS.Messages.sendMessage({topic: '" + this.state.channel + "', data: '" + this.state.message + "'})");
}
listenToChannel (e) {
e.preventDefault();
const subscribedChannels = this.state.subscribedChannels;
subscribedChannels.push(<span>Subscribed to <b>{this.state.listenTo}</b>. Now try sending a message</span>);
this.setState({
subscribedChannels
});
EmbarkJS.Messages.listenTo({topic: [this.state.listenTo]}, (error, message) => {
const messageList = this.state.messageList;
if (error) {
messageList.push(<span className="alert-danger">Error: {error}</span>);
} else {
messageList.push(<span>Channel: <b>{message.topic}</b> | Message: <b>{message.data}</b></span>);
} }
} this.setState({
messageList
});
});
handleChange(e, name){ this.addToLog("EmbarkJS.Messages.listenTo({topic: ['" + this.state.listenTo + "']}).then(function(message) {})");
this.state[name] = e.target.value; }
this.setState(this.state);
}
sendMessage(e){ addToLog (txt) {
e.preventDefault(); this.state.logs.push(txt);
EmbarkJS.Messages.sendMessage({topic: this.state.channel, data: this.state.message}); this.setState({logs: this.state.logs});
this.addToLog("EmbarkJS.Messages.sendMessage({topic: '" + this.state.channel + "', data: '" + this.state.message + "'})"); }
}
listenToChannel(e){ render () {
e.preventDefault(); return (
<React.Fragment>
this.state.subscribedChannels.push(`subscribed to ${this.state.listenTo} now try sending a message`); {
!this.props.enabled ?
EmbarkJS.Messages.listenTo({topic: [this.state.listenTo]}) <React.Fragment>
.then(message => this.state.messageList.push(`channel: ${this.state.listenTo} message: ${message}`)) <Alert bsStyle="warning">The node you are using does not support Whisper</Alert>
<Alert bsStyle="warning">The node uses an unsupported version of Whisper</Alert>
this.addToLog("EmbarkJS.Messages.listenTo({topic: ['" + this.state.listenTo + "']}).then(function(message) {})"); </React.Fragment> : ''
} }
<h3>Listen To channel</h3>
addToLog(txt){ <Form inline>
this.state.logs.push(txt); <FormGroup>
this.setState({logs: this.state.logs}); <FormControl
} type="text"
defaultValue={this.state.listenTo}
render(){ placeholder="channel"
return ( onChange={e => this.handleChange(e, 'listenTo')}/>
<React.Fragment> <Button bsStyle="primary" onClick={(e) => this.listenToChannel(e)}>Start Listening</Button>
{ <div id="subscribeList">
!this.props.enabled ? {this.state.subscribedChannels.map((item, i) => <p key={i}>{item}</p>)}
<React.Fragment>
<Alert bsStyle="warning">The node you are using does not support Whisper</Alert>
<Alert bsStyle="warning">The node uses an unsupported version of Whisper</Alert>
</React.Fragment> : ''
}
<h3>Listen To channel</h3>
<Form inline>
<FormGroup>
<FormControl
type="text"
defaultValue={this.state.listenTo}
placeholder="channel"
onChange={e => this.handleChange(e, 'listenTo')} />
<Button bsStyle="primary" onClick={(e) => this.listenToChannel(e)}>Start Listening</Button>
<div id="subscribeList">
{ this.state.subscribedChannels.map((item, i) => <p key={i}>{item}</p>) }
</div>
<p>messages received:</p>
<div id="messagesList">
{ this.state.messageList.map((item, i) => <p key={i}>{item}</p>) }
</div>
</FormGroup>
</Form>
<h3>Send Message</h3>
<Form inline>
<FormGroup>
<FormControl
type="text"
defaultValue={this.state.channel}
placeholder="channel"
onChange={e => this.handleChange(e, 'channel')} />
<FormControl
type="text"
defaultValue={this.state.message}
placeholder="message"
onChange={e => this.handleChange(e, 'message')} />
<Button bsStyle="primary" onClick={(e) => this.sendMessage(e)}>Send Message</Button>
</FormGroup>
</Form>
<p>Javascript calls being made: </p>
<div className="logs">
<p>EmbarkJS.Messages.setProvider('whisper')</p>
{
this.state.logs.map((item, i) => <p key={i}>{item}</p>)
}
</div> </div>
</React.Fragment> <p>messages received:</p>
); <div id="messagesList">
} {this.state.messageList.map((item, i) => <p key={i}>{item}</p>)}
</div>
</FormGroup>
</Form>
<h3>Send Message</h3>
<Form inline>
<FormGroup>
<FormControl
type="text"
defaultValue={this.state.channel}
placeholder="channel"
onChange={e => this.handleChange(e, 'channel')}/>
<FormControl
type="text"
defaultValue={this.state.message}
placeholder="message"
onChange={e => this.handleChange(e, 'message')}/>
<Button bsStyle="primary" onClick={(e) => this.sendMessage(e)}>Send Message</Button>
</FormGroup>
</Form>
<p>Javascript calls being made: </p>
<div className="logs">
<p>EmbarkJS.Messages.setProvider('whisper')</p>
{
this.state.logs.map((item, i) => <p key={i}>{item}</p>)
}
</div>
</React.Fragment>
);
}
} }
export default Whisper; export default Whisper;