Bidirectional rpc and streams for WebSockets and WebRTC.
basic
const methodman = require('methodman')
const fs = require('fs')
const meth = methodman(duplexStream)
meth.commands({echo: (txt, cb) => cb(null, txt), ping: cb => cb(null)})
meth.on('commands', remote => {
if (remote.ping) {
let start = Date.now()
remote.ping(() => {
console.log(`pingtime ${Date.now() - start}`)
})
}
})
fs.createReadStream('test.file').pipe(meth.stream('test.file'))
meth.on('stream', (stream, id) {
stream.pipe(fs.createWriteStream(`${__dirname}/${id}`))
})
client.js
const websocket = require('websocket-stream')
const methodman = require('methodman')
const ws = websocket('ws://localhost:8080')
const meth = methodman(ws)
meth.commands({echo: (txt, cb) => cb(null, txt), ping: cb => cb(null)})
meth.on('commands', remote => {
// call remote commands
})
let substream = meth.stream()
// now i can take someStream and .pipe(substream)
meth.on('stream', (stream, id) => {
// I'm being sent a stream.
})
server.js
const websocket = require('websocket-stream')
const methodman = require('methodman')
function onWebsocketStream (stream) {
var meth = methodman(stream)
meth.commands({echo: (txt, cb) => cb(null, txt), ping: cb => cb(null)})
meth.on('commands', remote => {
// call remote commands
})
let substream = meth.stream()
// now i can take someStream and .pipe(substream)
meth.on('stream', (stream, id) => {
// I'm being sent a stream.
})
}
const wss = websocket.createServer({server: app}, onWebsocketStream)
const SimplePeer = require('simple-peer')
Takes a duplex stream to sit on top of.
Returns a MethodMan instance.
Returns a new writable substream.
Expose a set of commands defined in the rpc object.
Uses dnode
under the hood.
A set of commands you can call that have been exposed by the other end.
A set of commands you can call that have been exposed by the other end.
A readable stream being sent from the remote end.
A readable stream being sent from the remote end.