refactor: async dial that resolves on connection open

License: MIT
Signed-off-by: Alan Shaw <alan.shaw@protocol.ai>
This commit is contained in:
Alan Shaw 2019-04-02 10:05:45 +01:00
parent 4321b7e89a
commit 616fac9d21
No known key found for this signature in database
GPG Key ID: AFC4442246B75B6F
4 changed files with 17 additions and 9 deletions

View File

@ -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 <christopher.d.campbell@gmail.com>",

View File

@ -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
}

View File

@ -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

View File

@ -2,7 +2,6 @@
const multiaddr = require('multiaddr')
const os = require('os')
const createServer = require('it-ws/server')
module.exports = (options, handler) => {