diff --git a/lib/transport/message.js b/lib/transport/message.js index 8745ad7..dd2adba 100644 --- a/lib/transport/message.js +++ b/lib/transport/message.js @@ -25,7 +25,7 @@ module.exports.buildMessage = function(command, payload) { var Message = MESSAGES[command]; try { console.log('Message Class', Message); - return Message.fromBuffer(payload); + return new Message().fromBuffer(payload); } catch (err) { console.log('Error while parrsing message', command); console.log(err); @@ -40,7 +40,7 @@ function Version(subversion, nonce) { this.nonce = nonce || CONNECTION_NONCE; }; -Version.fromBuffer = function(payload) { +Version.prototype.fromBuffer = function(payload) { var message = new Version(); var parser = new BufferReader(payload); @@ -73,13 +73,13 @@ Version.prototype.serialize = function() { module.exports.Version = Version; -// ====== INV/GETDATA MESSAGE ====== +// ====== INV MESSAGE ====== function Inventory(inventory) { this.command = 'inv'; this.inventory = inventory || []; } -Inventory.fromBuffer = function(payload) { +Inventory.prototype.fromBuffer = function(payload) { var message = new Inventory(); var parser = new BufferReader(payload); @@ -106,21 +106,24 @@ Inventory.prototype.serialize = function() { return put.buffer(); }; +module.exports.Inventory = Inventory; + +// ====== GETDATA MESSAGE ====== function GetData(inventory) { this.command = 'getdata'; this.inventory = inventory || []; } -GetData.fromBuffer = Inventory.fromBuffer; -GetData.prototype.serialize = Inventory.prototype.serialize; +util.inherits(GetData, Inventory); +module.exports.GetData = GetData; -// ====== PING/PONG MESSAGE ====== +// ====== PING MESSAGE ====== function Ping(nonce) { this.command = 'ping'; this.nonce = nonce || CONNECTION_NONCE; } -Ping.fromBuffer = function(payload) { +Ping.prototype.fromBuffer = function(payload) { var nonce = new BufferReader(payload).read(8); return new Ping(nonce); }; @@ -129,14 +132,16 @@ Ping.prototype.serialize = function() { return this.nonce; }; +module.exports.Ping = Ping; + +// ====== PONG MESSAGE ====== function Pong(nonce) { this.command = 'pong'; this.nonce = nonce || CONNECTION_NONCE; } -Pong.fromBuffer = Ping.fromBuffer; -Pong.prototype.serialize = Ping.prototype.serialize; - +util.inherits(Pong, Ping); +module.exports.Pong = Pong; // ====== ADDR MESSAGE ====== function Addresses(nonce) { @@ -144,7 +149,7 @@ function Addresses(nonce) { this.addresses = []; } -Address.fromBuffer = function(payload) { +Address.prototype.fromBuffer = function(payload) { var message = new Address(); var parser = new BufferReader(payload); @@ -168,12 +173,14 @@ Address.prototype.serialize = function() { return BufferUtil.EMPTY_BUFFER; // TODO }; +module.exports.Address = Address; + // ====== GETADDR MESSAGE ====== function GetAddresses() { this.command = 'getaddr'; } -GetAddresses.fromBuffer = function() { +GetAddresses.prototype.fromBuffer = function() { return new GetAddresses(); }; @@ -181,13 +188,14 @@ GetAddresses.prototype.serialize = function() { return BufferUtil.EMPTY_BUFFER; }; +module.exports.GetAddresses = GetAddresses; // ====== VERACK MESSAGE ====== function VerAck() { this.command = 'verack'; } -VerAck.fromBuffer = function() { +VerAck.prototype.fromBuffer = function() { return new VerAck(); }; @@ -195,13 +203,15 @@ VerAck.prototype.serialize = function() { return BufferUtil.EMPTY_BUFFER; }; +module.exports.VerAck = VerAck; + // ====== REJECT MESSAGE ====== // TODO: Parse REJECT message function Reject() { this.command = 'reject'; } -Reject.fromBuffer = function() { +Reject.prototype.fromBuffer = function() { return new Reject(); }; @@ -209,12 +219,14 @@ Reject.prototype.serialize = function() { return BufferUtil.EMPTY_BUFFER; }; +module.exports.Reject = Reject; + // ====== ALERT MESSAGE ====== function Alert(payload) { this.command = 'reject'; } -Alert.fromBuffer = function() { +Alert.prototype.fromBuffer = function() { var message = new Alert(); var parser = new BufferReader(payload); @@ -227,13 +239,15 @@ Alert.prototype.serialize = function() { return BufferUtil.EMPTY_BUFFER; // TODO: Serialize }; +module.exports.Alert = Alert; + // ====== HEADERS MESSAGE ====== function Headers(blockheaders) { this.command = 'headers'; this.headers = blockheaders || []; } -Headers.fromBuffer = function() { +Headers.prototype.fromBuffer = function() { var message = new Headers(); var parser = new BufferReader(payload); @@ -252,13 +266,15 @@ Headers.prototype.serialize = function() { return BufferUtil.EMPTY_BUFFER; // TODO: Serialize }; +module.exports.Headers = Headers; + // ====== BLOCK MESSAGE ====== function Block(block) { this.command = 'block'; this.block = block; } -Block.fromBuffer = function() { +Block.prototype.fromBuffer = function() { var parser = new BufferReader(payload); var block = Block().fromBufferReader(parser); return new Block(block); @@ -268,13 +284,15 @@ Block.prototype.serialize = function() { return BufferUtil.EMPTY_BUFFER; // TODO: Serialize }; +module.exports.Block = Block; + // ====== TX MESSAGE ====== function Transaction(transaction) { this.command = 'tx'; this.transaction = transaction; } -Transaction.fromBuffer = function() { +Transaction.prototype.fromBuffer = function() { var parser = new BufferReader(payload); var transaction = Transaction().fromBufferReader(parser); return new Transaction(transaction); @@ -284,7 +302,9 @@ Transaction.prototype.serialize = function() { return BufferUtil.EMPTY_BUFFER; // TODO: Serialize }; -// ====== GETBLOCKS/GETHEADERS MESSAGE ====== +module.exports.Transaction = Transaction; + +// ====== GETBLOCKS MESSAGE ====== function GetBlocks(starts, stop) { this.command = 'getblocks'; this.version = PROTOCOL_VERSION; @@ -292,7 +312,7 @@ function GetBlocks(starts, stop) { this.stop = stop || BufferUtil.NULL_HASH; } -GetBlocks.fromBuffer = function() { +GetBlocks.prototype.fromBuffer = function() { var message = new GetBlocks(); var parser = new BufferReader(payload); @@ -326,6 +346,9 @@ GetBlocks.prototype.serialize = function() { return put.buffer(); }; +module.exports.GetBlocks = GetBlocks; + +// ====== GETHEADERS MESSAGE ====== function GetHeaders(starts, stop) { this.command = 'getheaders'; this.version = PROTOCOL_VERSION; @@ -333,7 +356,5 @@ function GetHeaders(starts, stop) { this.stop = stop || BufferUtil.NULL_HASH; } -GetHeaders.fromBuffer = GetBlocks.fromBuffer; -GetHeaders.prototype.serialize = GetBlocks.prototype.serialize; - - +util.inherits(GetHeaders, GetBlocks); +module.exports.GetHeaders = GetHeaders; diff --git a/lib/transport/peer2.js b/lib/transport/peer2.js index 511b66c..525e106 100644 --- a/lib/transport/peer2.js +++ b/lib/transport/peer2.js @@ -1,5 +1,6 @@ 'use strict'; +var util = require('util'); var Net = require('net'); var Put = require('bufferput'); var Buffers = require('buffers');