From 06f22e2bc60957da6f12f8cd026f645b3dc726a7 Mon Sep 17 00:00:00 2001 From: Friedel Ziegelmayer Date: Mon, 5 Sep 2016 11:50:41 +0200 Subject: [PATCH 1/2] refactor: use pull-streams --- package.json | 3 +- src/index.js | 114 +++++++++++++++++++++++++++------------------- test/ping.spec.js | 6 +++ 3 files changed, 76 insertions(+), 47 deletions(-) diff --git a/package.json b/package.json index 216f7a6..a7ea164 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,8 @@ "run-parallel": "^1.1.6" }, "dependencies": { - "async-buffered-reader": "^1.2.1" + "pull-reader": "^1.2.8", + "pull-stream": "^3.4.5" }, "contributors": [ "David Dias ", diff --git a/src/index.js b/src/index.js index 292aa6a..e5511e2 100644 --- a/src/index.js +++ b/src/index.js @@ -1,80 +1,102 @@ 'use strict' const EventEmitter = require('events').EventEmitter -const util = require('util') -const read = require('async-buffered-reader') +const pull = require('pull-stream') +const Reader = require('pull-reader') const debug = require('debug') -const log = {} +const log = debug('libp2p-ping') log.error = debug('libp2p-ping:error') -exports = module.exports = Ping -exports.attach = attach -exports.detach = detach - const PROTOCOL = '/ipfs/ping/1.0.0' +const PING_LENGTH = 32 -util.inherits(Ping, EventEmitter) +class Ping extends EventEmitter { + constructor (swarm, peer) { + super() + this.cont = true -function Ping (swarm, peer) { - this.cont = true + log('dialing %s to %s', PROTOCOL, peer.id.toB58String()) + swarm.dial(peer, PROTOCOL, (err, conn) => { + if (err === true) { + return + } - swarm.dial(peer, PROTOCOL, (err, conn) => { - if (err) { - return this.emit('error', err) - } + if (err) { + log.error(err) + this.emit('error', err) + return + } + + let start = new Date() + let buf = new Buffer(PING_LENGTH) // buffer creation doesn't memset the buffer to 0 + + const reader = Reader() - let start = new Date() - let buf = new Buffer(32) // buffer creation doesn't memset the buffer to 0 + pull(pull.values([buf]), conn, reader) - conn.write(buf) + const gotBack = (err, bufBack) => { + let end = new Date() - const gotBack = (bufBack) => { - let end = new Date() + if (err || !buf.equals(bufBack)) { + pull(pull.empty(), conn) + this.emit('error', err || new Error('Received wrong ping ack')) + return + } - if (buf.equals(bufBack)) { this.emit('ping', end - start) - } else { - conn.end() - return this.emit('error', new Error('Received wrong ping ack')) - } - if (!this.cont) { - return conn.end() - } + if (!this.cont) { + pull(pull.empty(), conn) + } - start = new Date() - buf = new Buffer(32) - conn.write(buf) - read(conn, 32, gotBack) - } + start = new Date() + buf = new Buffer(PING_LENGTH) - read(conn, 32, gotBack) - }) + pull( + pull.values([buf]), + reader, + conn + ) + + reader.read(PING_LENGTH, gotBack) + } - this.stop = () => { + reader.read(PING_LENGTH, gotBack) + }) + } + + stop () { this.cont = false } } function attach (swarm) { swarm.handle(PROTOCOL, (conn) => { - read(conn, 32, echo) + const reader = Reader() + pull(conn, reader) - function echo (buf) { - conn.write(buf) - read(conn, 32, echo) - } + reader.read(PING_LENGTH, echo) - conn.on('error', (err) => { - log.error(err) - }) + function echo (err, buf) { + if (err === true) { + return + } - conn.on('end', () => { - conn.end() - }) + if (err) { + log.error(err) + } + + pull(pull.values([buf]), conn) + reader.read(PING_LENGTH, echo) + } }) } function detach (swarm) { swarm.unhandle(PROTOCOL) } + +Ping.attach = attach +Ping.detach = detach + +module.exports = Ping diff --git a/test/ping.spec.js b/test/ping.spec.js index 50bfa22..7a5adde 100644 --- a/test/ping.spec.js +++ b/test/ping.spec.js @@ -1,6 +1,7 @@ /* eslint-env mocha */ 'use strict' +const expect = require('chai').expect const Peer = require('peer-info') const Swarm = require('libp2p-swarm') const TCP = require('libp2p-tcp') @@ -42,7 +43,12 @@ describe('ping', () => { var p = new Ping(swarmA, peerB) + p.on('error', (err) => { + throw err + }) + p.on('ping', (time) => { + expect(time).to.be.a('Number') p.stop() Ping.detach(swarmB) done() From 2913fd42257573c5dbb4b964980d49909c442764 Mon Sep 17 00:00:00 2001 From: David Dias Date: Tue, 6 Sep 2016 16:57:10 -0400 Subject: [PATCH 2/2] feat(deps): update deps --- README.md | 1 - package.json | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index e9e5d81..f866338 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,6 @@ libp2p-ping JavaScript Implementation ## Usage - ```javascript var Ping = require('libp2p-ping') diff --git a/package.json b/package.json index a7ea164..0952410 100644 --- a/package.json +++ b/package.json @@ -30,12 +30,12 @@ }, "homepage": "https://github.com/diasdavid/js-ipfs-ping", "devDependencies": { - "aegir": "^6.0.0", + "aegir": "^8.0.0", "chai": "^3.5.0", "debug": "^2.2.0", "gulp": "^3.9.1", - "libp2p-swarm": "^0.22.2", - "libp2p-tcp": "^0.7.4", + "libp2p-swarm": "^0.23.0", + "libp2p-tcp": "^0.8.1", "multiaddr": "^2.0.2", "peer-id": "^0.7.0", "peer-info": "^0.7.0",