workers: refactor framer and parser.

This commit is contained in:
Christopher Jeffrey 2016-10-05 14:37:29 -07:00
parent 02ccde4f8a
commit 0e8f4712e3
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD
3 changed files with 58 additions and 67 deletions

View File

@ -15,11 +15,9 @@ var BufferWriter = require('../utils/writer');
var Block = require('../primitives/block');
var MTX = require('../primitives/mtx');
var TX = require('../primitives/tx');
var Coin = require('../primitives/coin');
var KeyRing = require('../primitives/keyring');
var Script = require('../script/script');
var Witness = require('../script/witness');
var HD = require('../hd/hd');
var MinerBlock = require('../miner/minerblock');
/**
@ -79,53 +77,47 @@ Framer.item = function _item(item, writer) {
case 'undefined':
if (item == null) {
p.writeU8(0);
break;
}
if (item instanceof Script) {
p.writeU8(40);
p.writeVarBytes(item.toRaw());
} else if (item instanceof Witness) {
p.writeU8(41);
item.toRaw(p);
} else if (item instanceof MTX) {
p.writeU8(42);
item.toExtended(true, p);
} else if (item instanceof TX) {
p.writeU8(43);
item.toExtended(true, p);
} else if (item instanceof Block) {
p.writeU8(44);
item.toRaw(p);
} else if (item instanceof MinerBlock) {
p.writeU8(45);
item.toRaw(p);
} else if (item instanceof KeyRing) {
p.writeU8(46);
item.toRaw(p);
} else if (bn.isBN(item)) {
p.writeU8(10);
p.writeVarBytes(item.toArrayLike(Buffer));
} else if (Buffer.isBuffer(item)) {
p.writeU8(4);
p.writeVarBytes(item);
} else if (Array.isArray(item)) {
p.writeU8(5);
p.writeVarint(item.length);
for (i = 0; i < item.length; i++)
Framer.item(item[i], p);
} else {
if (item instanceof Block) {
p.writeU8(40);
item.toRaw(p);
} else if (item instanceof MTX) {
p.writeU8(46);
item.toExtended(true, p);
} else if (item instanceof TX) {
p.writeU8(41);
item.toExtended(true, p);
} else if (item instanceof Coin) {
p.writeU8(42);
item.toExtended(p);
} else if (item instanceof MinerBlock) {
p.writeU8(45);
item.toRaw(p);
} else if (item instanceof KeyRing) {
p.writeU8(47);
item.toRaw(p);
} else if (HD.isHD(item)) {
p.writeU8(48);
p.writeBytes(item.toRaw());
} else if (item instanceof Script) {
p.writeU8(49);
p.writeVarBytes(item.toRaw());
} else if (item instanceof Witness) {
p.writeU8(50);
item.toRaw(p);
} else if (bn.isBN(item)) {
p.writeU8(10);
p.writeVarBytes(item.toArrayLike(Buffer));
} else if (Buffer.isBuffer(item)) {
p.writeU8(4);
p.writeVarBytes(item);
} else if (Array.isArray(item)) {
p.writeU8(5);
p.writeVarint(item.length);
for (i = 0; i < item.length; i++)
Framer.item(item[i], p);
} else {
keys = Object.keys(item);
p.writeU8(6);
p.writeVarint(keys.length);
for (i = 0; i < keys.length; i++) {
p.writeVarString(keys[i], 'utf8');
Framer.item(item[keys[i]], p);
}
keys = Object.keys(item);
p.writeU8(6);
p.writeVarint(keys.length);
for (i = 0; i < keys.length; i++) {
p.writeVarString(keys[i], 'utf8');
Framer.item(item[keys[i]], p);
}
}
break;

View File

@ -15,11 +15,9 @@ var BufferReader = require('../utils/reader');
var Block = require('../primitives/block');
var MTX = require('../primitives/mtx');
var TX = require('../primitives/tx');
var Coin = require('../primitives/coin');
var KeyRing = require('../primitives/keyring');
var Script = require('../script/script');
var Witness = require('../script/witness');
var HD = require('../hd/hd');
var MinerBlock = require('../miner/minerblock');
/**
@ -184,23 +182,19 @@ Parser.parseItem = function parseItem(data) {
case 10:
return new bn(p.readVarBytes());
case 40:
return Block.fromRaw(p);
return Script.fromRaw(p.readVarBytes());
case 41:
return TX.fromExtended(p, true);
return Witness.fromRaw(p);
case 42:
return Coin.fromExtended(p);
return MTX.fromExtended(p, true);
case 43:
return TX.fromExtended(p, true);
case 44:
return Block.fromRaw(p);
case 45:
return MinerBlock.fromRaw(p);
case 46:
return MTX.fromExtended(p, true);
case 47:
return KeyRing.fromRaw(p);
case 48:
return HD.fromRaw(p.readBytes(82));
case 49:
return Script.fromRaw(p.readVarBytes());
case 50:
return Witness.fromRaw(p);
default:
throw new Error('Bad type.');
}

View File

@ -221,12 +221,17 @@ Workers.prototype.execute = function execute(method, args, timeout) {
var result, child;
if (!Workers.enabled) {
try {
result = jobs[method].apply(jobs, args);
} catch (e) {
return Promise.reject(e);
}
return Promise.resolve(result);
return new Promise(function(resolve, reject) {
utils.nextTick(function() {
try {
result = jobs[method].apply(jobs, args);
} catch (e) {
reject(e);
return;
}
resolve(result);
});
});
}
if (!timeout)