From 616fac9d213ad74ff3bf1648c98e7143056edc6d Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Tue, 2 Apr 2019 10:05:45 +0100 Subject: [PATCH] refactor: async dial that resolves on connection open License: MIT Signed-off-by: Alan Shaw --- package.json | 2 +- src/adapter.js | 20 ++++++++++++++------ src/index.js | 3 ++- src/listener.js | 1 - 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 8badf4b..64e8ea7 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "interface-transport": "~0.3.6", "multiaddr": "^6.0.3", "pull-goodbye": "0.0.2", - "pull-stream": "^3.6.7" + "pull-stream": "^3.6.9" }, "contributors": [ "Chris Campbell ", diff --git a/src/adapter.js b/src/adapter.js index 15015b9..76453bf 100644 --- a/src/adapter.js +++ b/src/adapter.js @@ -3,6 +3,8 @@ const { Connection } = require('interface-connection') const withIs = require('class-is') const toPull = require('async-iterator-to-pull-stream') +const error = require('pull-stream/sources/error') +const drain = require('pull-stream/sinks/drain') const WebSockets = require('./') const noop = () => {} @@ -33,13 +35,19 @@ class WebSocketsAdapter extends WebSockets { callback = callback || noop - const socket = super.dial(ma, options) - const conn = new Connection(toPull.duplex(socket)) + const conn = new Connection() - conn.getObservedAddrs = callbackify(socket.getObservedAddrs.bind(socket)) - conn.close = callbackify(socket.close.bind(socket)) - - socket.connected().then(callback).catch(callback) + super.dial(ma, options) + .then(socket => { + conn.setInnerConn(toPull.duplex(socket)) + conn.getObservedAddrs = callbackify(socket.getObservedAddrs.bind(socket)) + conn.close = callbackify(socket.close.bind(socket)) + callback(null, conn) + }) + .catch(err => { + conn.setInnerConn({ sink: drain(), source: error(err) }) + callback(err) + }) return conn } diff --git a/src/index.js b/src/index.js index 0237dc6..c1f620d 100644 --- a/src/index.js +++ b/src/index.js @@ -9,9 +9,10 @@ const log = require('debug')('libp2p:websockets:transport') const createListener = require('./listener') class WebSockets { - dial (ma, options) { + async dial (ma, options) { log('dialing %s', ma) const socket = connect(toUri(ma), { binary: true }) + await socket.connected() socket.getObservedAddrs = () => [ma] log('connected %s', ma) return socket diff --git a/src/listener.js b/src/listener.js index 3c30365..8e23760 100644 --- a/src/listener.js +++ b/src/listener.js @@ -2,7 +2,6 @@ const multiaddr = require('multiaddr') const os = require('os') - const createServer = require('it-ws/server') module.exports = (options, handler) => {