Skip to content
This repository has been archived by the owner on Feb 26, 2021. It is now read-only.

Commit

Permalink
feat: add muxer code
Browse files Browse the repository at this point in the history
  • Loading branch information
mkg20001 committed Jan 6, 2019
1 parent f528e9d commit 5409881
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 3 deletions.
30 changes: 29 additions & 1 deletion src/micro-switch/index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
'use strict'

const multiaddr = require('multiaddr')
const multistream = require('multistream-select')

const WS = require('libp2p-websockets')
const MPLEX = require('libp2p-mplex')
Expand Down Expand Up @@ -31,14 +32,41 @@ class MicroSwitch {
this.muxers = muxers || [MPLEX]
this.addresses = addresses || [multiaddr('/ip6/::/tcp/5892/ws')]
this.handler = handler || console.log

this.msListener = new multistream.Listener()
this.muxers.forEach(muxer => {
this.msListener.addHandler(muxer.multicodec, (protocol, conn) => {
const muxed = muxer.listener(conn)
conn.info.info.msCallback(muxed)
})
})
}

/*
* Wraps a connection in a muxer
* @returns MuxedConn
*/
async wrapInMuxer (conn, isServer) {
wrapInMuxer (conn, isServer) {
return new Promise((resolve, reject) => {
if (isServer) {
conn.msCallback = resolve
this.msListener.handle(conn, (err) => {
if (err) { return reject(err) }
})
} else {
const msDialer = new multistream.Dialer()
msDialer.handle(conn, (err) => {
if (err) { return reject(err) }

const firstMuxer = this.muxers[0] // TODO: iterate or do ls first
msDialer.select(firstMuxer.multicodec, (err, conn) => {
if (err) { return reject(err) }
const muxed = firstMuxer.dialer(conn)
return resolve(muxed)
})
})
}
})
}

async dial (addr) {
Expand Down
4 changes: 2 additions & 2 deletions src/server/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,8 @@ class Server {
this.network = {}
}

handler (conn) {
const muxed = this.switch.wrapInMuxer(conn, true)
async handler (conn) {
const muxed = await this.switch.wrapInMuxer(conn, true)
muxed.newStream(async (err, conn) => {
if (err) {
return log(err)
Expand Down

0 comments on commit 5409881

Please sign in to comment.