From 0e8f4712e36815689d189a44a1583d3ccb4b529d Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Wed, 5 Oct 2016 14:37:29 -0700 Subject: [PATCH] workers: refactor framer and parser. --- lib/workers/framer.js | 88 +++++++++++++++++++----------------------- lib/workers/parser.js | 20 ++++------ lib/workers/workers.js | 17 +++++--- 3 files changed, 58 insertions(+), 67 deletions(-) diff --git a/lib/workers/framer.js b/lib/workers/framer.js index 523108b2..601caea6 100644 --- a/lib/workers/framer.js +++ b/lib/workers/framer.js @@ -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; diff --git a/lib/workers/parser.js b/lib/workers/parser.js index cdea2eed..d8515d94 100644 --- a/lib/workers/parser.js +++ b/lib/workers/parser.js @@ -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.'); } diff --git a/lib/workers/workers.js b/lib/workers/workers.js index 05c1974a..3c51bab2 100644 --- a/lib/workers/workers.js +++ b/lib/workers/workers.js @@ -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)