mirror of
https://github.com/fluencelabs/js-libp2p-websockets
synced 2025-06-20 12:06:40 +00:00
dial and listen done
This commit is contained in:
88
src/index.js
88
src/index.js
@ -1,14 +1,80 @@
|
||||
var SWS = require('simple-websocket')
|
||||
// const debug = require('debug')
|
||||
// const log = debug('libp2p:tcp')
|
||||
// const multiaddr = require('multiaddr')
|
||||
const SWS = require('simple-websocket')
|
||||
|
||||
exports = module.exports
|
||||
exports = module.exports = WebSockets
|
||||
|
||||
exports.dial = function (multiaddr, options) {
|
||||
options.ready = options.ready || function noop () {}
|
||||
var opts = multiaddr.toOptions()
|
||||
var url = 'ws://' + opts.host + ':' + opts.port
|
||||
var socket = new SWS(url)
|
||||
socket.on('connect', options.ready)
|
||||
return socket
|
||||
function WebSockets () {
|
||||
if (!(this instanceof WebSockets)) {
|
||||
return new WebSockets()
|
||||
}
|
||||
|
||||
const listeners = []
|
||||
|
||||
this.dial = function (multiaddr, options) {
|
||||
if (!options) {
|
||||
options = {}
|
||||
}
|
||||
|
||||
options.ready = options.ready || function noop () {}
|
||||
const maOpts = multiaddr.toOptions()
|
||||
const conn = new SWS('ws://' + maOpts.host + ':' + maOpts.port)
|
||||
conn.on('ready', options.ready)
|
||||
conn.getObservedAddrs = () => {
|
||||
return [multiaddr]
|
||||
}
|
||||
return conn
|
||||
}
|
||||
|
||||
this.createListener = (multiaddrs, options, handler, callback) => {
|
||||
if (typeof options === 'function') {
|
||||
callback = handler
|
||||
handler = options
|
||||
options = {}
|
||||
}
|
||||
|
||||
if (!Array.isArray(multiaddrs)) {
|
||||
multiaddrs = [multiaddrs]
|
||||
}
|
||||
|
||||
var count = 0
|
||||
|
||||
multiaddrs.forEach((m) => {
|
||||
const listener = SWS.createServer((conn) => {
|
||||
conn.getObservedAddrs = () => {
|
||||
return [] // TODO think if it makes sense for WebSockets
|
||||
}
|
||||
handler(conn)
|
||||
})
|
||||
|
||||
listener.listen(m.toOptions().port, () => {
|
||||
if (++count === multiaddrs.length) {
|
||||
callback()
|
||||
}
|
||||
})
|
||||
listeners.push(listener)
|
||||
})
|
||||
}
|
||||
|
||||
this.close = (callback) => {
|
||||
if (listeners.length === 0) {
|
||||
throw new Error('there are no listeners')
|
||||
}
|
||||
var count = 0
|
||||
listeners.forEach((listener) => {
|
||||
listener.close(() => {
|
||||
if (++count === listeners.length) {
|
||||
callback()
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
this.filter = (multiaddrs) => {
|
||||
return multiaddrs.filter((ma) => {
|
||||
// TODO
|
||||
// https://github.com/whyrusleeping/js-mafmt/pull/2
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
exports.createListener = SWS.createServer
|
||||
|
Reference in New Issue
Block a user