wallet: refactor client.

This commit is contained in:
Christopher Jeffrey 2016-12-01 00:13:59 -08:00
parent 6939ba2cd3
commit 8e49d87e53
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD

View File

@ -73,16 +73,16 @@ WalletClient.prototype._open = co(function* _open() {
}); });
this.socket.on('block connect', function(entry, txs) { this.socket.on('block connect', function(entry, txs) {
var data; var block;
try { try {
data = parseBlock(entry, txs); block = parseBlock(entry, txs);
} catch (e) { } catch (e) {
self.emit('error', e); self.emit('error', e);
return; return;
} }
self.emit('block connect', data.entry, data.txs); self.emit('block connect', block.entry, block.txs);
}); });
this.socket.on('block disconnect', function(entry) { this.socket.on('block disconnect', function(entry) {
@ -99,16 +99,16 @@ WalletClient.prototype._open = co(function* _open() {
}); });
this.socket.on('block rescan', function(entry, txs, cb) { this.socket.on('block rescan', function(entry, txs, cb) {
var data; var block;
try { try {
data = parseBlock(entry, txs); block = parseBlock(entry, txs);
} catch (e) { } catch (e) {
self.emit('error', e); self.emit('error', e);
return cb(); return cb();
} }
self.emit('block rescan', data.entry, data.txs, cb); self.emit('block rescan', block.entry, block.txs, cb);
}); });
this.socket.on('chain reset', function(tip) { this.socket.on('chain reset', function(tip) {
@ -125,7 +125,12 @@ WalletClient.prototype._open = co(function* _open() {
}); });
this.socket.on('tx', function(tx) { this.socket.on('tx', function(tx) {
tx = parseTX(tx); try {
tx = parseTX(tx);
} catch (e) {
self.emit('error', e);
return;
}
self.emit('tx', tx); self.emit('tx', tx);
}); });
@ -173,11 +178,7 @@ WalletClient.prototype.onConnect = function onConnect() {
WalletClient.prototype.sendAuth = function sendAuth() { WalletClient.prototype.sendAuth = function sendAuth() {
var self = this; var self = this;
return new Promise(function(resolve, reject) { return new Promise(function(resolve, reject) {
self.socket.emit('auth', self.apiKey, function(err) { self.socket.emit('auth', self.apiKey, wrap(resolve, reject));
if (err)
return reject(new Error(err.error));
resolve();
});
}); });
}; };
@ -190,11 +191,7 @@ WalletClient.prototype.sendAuth = function sendAuth() {
WalletClient.prototype.sendOptions = function sendOptions(options) { WalletClient.prototype.sendOptions = function sendOptions(options) {
var self = this; var self = this;
return new Promise(function(resolve, reject) { return new Promise(function(resolve, reject) {
self.socket.emit('options', options, function(err) { self.socket.emit('options', options, wrap(resolve, reject));
if (err)
return reject(new Error(err.error));
resolve();
});
}); });
}; };
@ -207,11 +204,7 @@ WalletClient.prototype.sendOptions = function sendOptions(options) {
WalletClient.prototype.watchChain = function watchChain() { WalletClient.prototype.watchChain = function watchChain() {
var self = this; var self = this;
return new Promise(function(resolve, reject) { return new Promise(function(resolve, reject) {
self.socket.emit('watch chain', function(err) { self.socket.emit('watch chain', wrap(resolve, reject));
if (err)
return reject(new Error(err.error));
resolve();
});
}); });
}; };
@ -223,11 +216,7 @@ WalletClient.prototype.watchChain = function watchChain() {
WalletClient.prototype.getTip = function getTip() { WalletClient.prototype.getTip = function getTip() {
var self = this; var self = this;
return new Promise(function(resolve, reject) { return new Promise(function(resolve, reject) {
self.socket.emit('get tip', function(err, tip) { self.socket.emit('get tip', wrap(resolve, reject, parseEntry));
if (err)
return reject(new Error(err.error));
resolve(parseEntry(tip));
});
}); });
}; };
@ -243,15 +232,7 @@ WalletClient.prototype.getEntry = function getEntry(block) {
if (typeof block === 'string') if (typeof block === 'string')
block = util.revHex(block); block = util.revHex(block);
self.socket.emit('get entry', block, function(err, entry) { self.socket.emit('get entry', block, wrap(resolve, reject, parseEntry));
if (err)
return reject(new Error(err.error));
if (!entry)
return resolve(null);
resolve(parseEntry(entry));
});
}); });
}; };
@ -265,11 +246,7 @@ WalletClient.prototype.send = function send(tx) {
var self = this; var self = this;
return new Promise(function(resolve, reject) { return new Promise(function(resolve, reject) {
var raw = tx.toRaw(); var raw = tx.toRaw();
self.socket.emit('send', raw, function(err) { self.socket.emit('send', raw, wrap(resolve, reject));
if (err)
return reject(new Error(err.error));
resolve();
});
}); });
}; };
@ -283,11 +260,7 @@ WalletClient.prototype.setFilter = function setFilter(filter) {
var self = this; var self = this;
return new Promise(function(resolve, reject) { return new Promise(function(resolve, reject) {
var raw = filter.toRaw(); var raw = filter.toRaw();
self.socket.emit('set filter', raw, function(err) { self.socket.emit('set filter', raw, wrap(resolve, reject));
if (err)
return reject(new Error(err.error));
resolve();
});
}); });
}; };
@ -309,11 +282,7 @@ WalletClient.prototype.addFilter = function addFilter(chunks) {
out.push(chunks[i]); out.push(chunks[i]);
return new Promise(function(resolve, reject) { return new Promise(function(resolve, reject) {
self.socket.emit('add filter', out, function(err) { self.socket.emit('add filter', out, wrap(resolve, reject));
if (err)
return reject(new Error(err.error));
resolve();
});
}); });
}; };
@ -325,11 +294,7 @@ WalletClient.prototype.addFilter = function addFilter(chunks) {
WalletClient.prototype.resetFilter = function resetFilter() { WalletClient.prototype.resetFilter = function resetFilter() {
var self = this; var self = this;
return new Promise(function(resolve, reject) { return new Promise(function(resolve, reject) {
self.socket.emit('reset filter', function(err) { self.socket.emit('reset filter', wrap(resolve, reject));
if (err)
return reject(new Error(err.error));
resolve();
});
}); });
}; };
@ -342,11 +307,8 @@ WalletClient.prototype.resetFilter = function resetFilter() {
WalletClient.prototype.estimateFee = function estimateFee(blocks) { WalletClient.prototype.estimateFee = function estimateFee(blocks) {
var self = this; var self = this;
return new Promise(function(resolve, reject) { return new Promise(function(resolve, reject) {
self.socket.emit('estimate fee', blocks, function(err, rate) { self.socket.emit('estimate fee', blocks,
if (err) wrap(resolve, reject, Amount.value));
return reject(new Error(err.error));
resolve(Amount.value(rate));
});
}); });
}; };
@ -364,11 +326,7 @@ WalletClient.prototype.rescan = function rescan(start) {
if (typeof start === 'string') if (typeof start === 'string')
start = util.revHex(start); start = util.revHex(start);
self.socket.emit('rescan', start, function(err) { self.socket.emit('rescan', start, wrap(resolve, reject));
if (err)
return reject(new Error(err.error));
resolve();
});
}); });
}; };
@ -419,6 +377,34 @@ function BlockResult(entry, txs) {
this.txs = txs; this.txs = txs;
} }
function wrap(resolve, reject, parse) {
return function(err, result) {
if (err) {
reject(new Error(err.error));
return;
}
if (!result) {
resolve(null);
return;
}
if (!parse) {
resolve(result);
return;
}
try {
result = parse(result);
} catch (e) {
reject(e);
return;
}
resolve(result);
};
}
/* /*
* Expose * Expose
*/ */