add communicationFunctions that has listenTo and send

This commit is contained in:
Jonathan Rainville 2018-08-06 13:30:56 -04:00 committed by Pascal Precht
parent 99492c3884
commit 1a787021d5
No known key found for this signature in database
GPG Key ID: 0EE28D8D6FD85D7D
3 changed files with 138 additions and 94 deletions

View File

@ -85,6 +85,7 @@ class Whisper {
code += "\n" + fs.readFileSync(utils.joinPath(__dirname, 'js', 'embarkjs_old_web3.js')).toString();
code += "\nEmbarkJS.Messages.registerProvider('whisper', __embarkWhisperOld);";
} else {
code += "\n" + fs.readFileSync(utils.joinPath(__dirname, 'js', 'communicationFunctions.js')).toString();
code += "\n" + fs.readFileSync(utils.joinPath(__dirname, 'js', 'embarkjs.js')).toString();
code += "\nEmbarkJS.Messages.registerProvider('whisper', __embarkWhisperNewWeb3);";
}

View File

@ -0,0 +1,112 @@
function sendMessage(options, callback) {
let topics, ttl, payload;
topics = options.topic;
const data = options.data;
ttl = options.ttl || 100;
const powTime = options.powTime || 3;
const powTarget = options.powTarget || 0.5;
const sig = options.sig;
const fromAscii = options.fromAscii;
const toHex = options.toHex;
const symKeyID = options.symKeyID;
const post = options.post;
if (topics) {
topics = toHex(topics).slice(0, 10);
}
payload = JSON.stringify(data);
let message = {
sig: sig, // signs the message using the keyPair ID
ttl: ttl,
payload: fromAscii(payload),
powTime: powTime,
powTarget: powTarget
};
if (topics) {
message.topic = topics;
}
if (options.pubKey) {
message.pubKey = options.pubKey; // encrypt using a given pubKey
} else if(options.symKeyID) {
message.symKeyID = options.symKeyID; // encrypts using given sym key ID
} else {
message.symKeyID = symKeyID; // encrypts using the sym key ID
}
if (topics === undefined && message.symKeyID && !message.pubKey) {
return callback("missing option: topic");
}
post(message, callback);
}
function listenTo(options, callback) {
let topics = options.topic;
const messageEvents = options.messageEvents;
const toHex = options.toHex;
const toAscii = options.toAscii;
const sig = options.sig;
const symKeyID = options.symKeyID;
const subscribe = options.subscribe;
let promise = new messageEvents();
let subOptions = {};
if(topics){
if (typeof topics === 'string') {
topics = [toHex(topics).slice(0, 10)];
} else {
topics = topics.map((t) => toHex(t).slice(0, 10));
}
subOptions.topics = topics;
}
if (options.minPow) {
subOptions.minPow = options.minPow;
}
if (options.usePrivateKey === true) {
if (options.privateKeyID) {
subOptions.privateKeyID = options.privateKeyID;
} else {
subOptions.privateKeyID = sig;
}
} else {
if (options.symKeyID) {
subOptions.symKeyID = options.symKeyID;
} else {
subOptions.symKeyID = symKeyID;
}
}
promise.filter = subscribe("messages", subOptions)
.on('data', function (result) {
var payload = JSON.parse(toAscii(result.payload));
var data;
data = {
topic: toAscii(result.topic),
data: payload,
//from: result.from,
time: result.timestamp
};
if (callback) {
return callback(null, data);
}
promise.cb(payload, data, result);
});
return promise;
}
if (typeof module !== 'undefined' && module.exports) {
module.exports = {
sendMessage,
listenTo
};
}

View File

@ -1,4 +1,4 @@
/*global EmbarkJS, Web3, __MessageEvents */
/*global EmbarkJS, Web3, __MessageEvents, sendMessage, listenTo*/
// for the whisper v5 and web3.js 1.0
let __embarkWhisperNewWeb3 = {};
@ -36,105 +36,36 @@ __embarkWhisperNewWeb3.setProvider = function(options) {
};
__embarkWhisperNewWeb3.sendMessage = function(options) {
var topics, data, ttl, payload;
topics = options.topic;
data = options.data || options.payload;
ttl = options.ttl || 100;
var powTime = options.powTime || 3;
var powTarget = options.powTarget || 0.5;
if (data === undefined) {
const data = options.data || options.payload;
if (!data) {
throw new Error("missing option: data");
}
Object.assign(options, {
sig: this.sig,
fromAscii: EmbarkJS.Utils.fromAscii,
toHex: this.web3.utils.toHex,
symKeyID: options.symKeyID || this.symKeyID,
post: this.web3.shh.post,
data
});
if (topics) {
topics = this.web3.utils.toHex(topics).slice(0, 10);
}
payload = JSON.stringify(data);
let message = {
sig: this.sig, // signs the message using the keyPair ID
ttl: ttl,
payload: EmbarkJS.Utils.fromAscii(payload),
powTime: powTime,
powTarget: powTarget
};
if (topics) {
message.topic = topics;
}
if (options.pubKey) {
message.pubKey = options.pubKey; // encrypt using a given pubKey
} else if (options.symKeyID) {
message.symKeyID = options.symKeyID; // encrypts using given sym key ID
} else {
message.symKeyID = this.symKeyID; // encrypts using the sym key ID
}
if (topics === undefined && message.symKeyID && !message.pubKey) {
throw new Error("missing option: topic");
}
this.web3.shh.post(message, function() {
sendMessage(options, (err) => {
if (err) {
throw new Error(err);
}
});
};
__embarkWhisperNewWeb3.listenTo = function(options, callback) {
var topics = options.topic;
let promise = new __MessageEvents();
let subOptions = {};
if (topics) {
if (typeof topics === 'string') {
topics = [this.web3.utils.toHex(topics).slice(0, 10)];
} else {
topics = topics.map((t) => this.web3.utils.toHex(t).slice(0, 10));
}
subOptions.topics = topics;
}
if (options.minPow) {
subOptions.minPow = options.minPow;
}
if (options.usePrivateKey === true) {
if (options.privateKeyID) {
subOptions.privateKeyID = options.privateKeyID;
} else {
subOptions.privateKeyID = this.sig;
}
} else {
if (options.symKeyID) {
subOptions.symKeyID = options.symKeyID;
} else {
subOptions.symKeyID = this.symKeyID;
}
}
let filter = this.web3.shh.subscribe("messages", subOptions)
.on('data', function(result) {
var payload = JSON.parse(EmbarkJS.Utils.toAscii(result.payload));
var data;
data = {
topic: EmbarkJS.Utils.toAscii(result.topic),
data: payload,
//from: result.from,
time: result.timestamp
};
if (callback) {
return callback(null, data);
}
promise.cb(payload, data, result);
});
promise.filter = filter;
return promise;
__embarkWhisperNewWeb3.listenTo = function (options, callback) {
Object.assign(options, {
sig: this.sig,
toAscii: EmbarkJS.Utils.toAscii,
toHex: this.web3.utils.toHex,
symKeyID: options.symKeyID || this.symKeyID,
messageEvents: __MessageEvents,
subscribe: this.web3.shh.subscribe
});
listenTo(options, callback);
};
__embarkWhisperNewWeb3.getWhisperVersion = function(cb) {