├── .gitignore ├── .travis.yml ├── LICENCE ├── README.md ├── examples └── simple │ ├── client.js │ └── server.js ├── index.js └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.log 3 | *.err -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 0.8 -------------------------------------------------------------------------------- /LICENCE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2012 Raynos. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # stream-router 2 | 3 | Easy router for routing streams 4 | 5 | ## Example Server 6 | 7 | ``` js 8 | var StreamRouter = require("stream-router") 9 | , streamRouter = StreamRouter() 10 | , MuxDemux = require("mux-demux") 11 | , net = require("net") 12 | 13 | streamRouter.addRoute("/foo/:name", handleFoo) 14 | 15 | net.createServer(handleTcp).listen(8642) 16 | 17 | function handleTcp(con) { 18 | var mdm = MuxDemux({ 19 | error: false 20 | }) 21 | 22 | mdm.on("connection", streamRouter) 23 | 24 | con.pipe(mdm).pipe(con) 25 | } 26 | 27 | function handleFoo(stream, params) { 28 | stream.write(params.name) 29 | 30 | stream.on("data", console.log.bind(console, "server")) 31 | } 32 | ``` 33 | 34 | ## Example client 35 | 36 | ``` js 37 | var MuxDemux = require("mux-demux") 38 | , net = require("net") 39 | , mdm = MuxDemux({ 40 | error: false 41 | }) 42 | , con = net.connect(8642) 43 | 44 | con.pipe(mdm).pipe(con) 45 | 46 | var foo = mdm.createStream("/foo/bar") 47 | 48 | foo.on("data", console.log.bind(console, "client")) 49 | 50 | foo.write("bar") 51 | ``` 52 | 53 | ## Installation 54 | 55 | `npm install stream-router` 56 | 57 | ## Contributors 58 | 59 | - Raynos 60 | 61 | ## MIT Licenced 62 | 63 | [1]: https://secure.travis-ci.org/Raynos/stream-router.png 64 | [2]: http://travis-ci.org/Raynos/stream-router -------------------------------------------------------------------------------- /examples/simple/client.js: -------------------------------------------------------------------------------- 1 | var MuxDemux = require("mux-demux-net") 2 | , net = require("net") 3 | , mdm = MuxDemux(8642) 4 | 5 | var foo = mdm.createStream("/foo/bar") 6 | 7 | foo.on("data", console.log.bind(console, "client")) 8 | 9 | foo.write("bar") -------------------------------------------------------------------------------- /examples/simple/server.js: -------------------------------------------------------------------------------- 1 | var StreamRouter = require("../..") 2 | , streamRouter = StreamRouter() 3 | , MuxDemux = require("mux-demux-net") 4 | 5 | streamRouter.addRoute("/foo/:name", handleFoo) 6 | 7 | var server = MuxDemux(streamRouter, 8642) 8 | 9 | function handleFoo(stream, params) { 10 | stream.write(params.name) 11 | 12 | stream.on("data", console.log.bind(console, "server")) 13 | } -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | var Router = require("routes").Router 2 | 3 | module.exports = StreamRouter 4 | 5 | function StreamRouter(errorHandler) { 6 | errorHandler = errorHandler || log 7 | var router = new Router() 8 | 9 | streamHandler.addRoute = router.addRoute.bind(router) 10 | streamHandler.match = router.match.bind(router) 11 | 12 | return streamHandler 13 | 14 | function streamHandler(stream) { 15 | var route = router.match(stream.meta) 16 | 17 | stream.on("error", errorHandler) 18 | 19 | if (!route) { 20 | stream.error("404: invalid route: " + stream.meta) 21 | return stream.end() 22 | } 23 | route.fn(stream, route.params) 24 | } 25 | } 26 | 27 | function log(error) { 28 | console.log("[ERROR IN STREAM-ROUTER]", error) 29 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "stream-router", 3 | "version": "0.1.0", 4 | "description": "Easy router for routing streams", 5 | "keywords": [], 6 | "author": "Raynos ", 7 | "repository": "git://github.com/Raynos/stream-router.git", 8 | "main": "index", 9 | "homepage": "https://github.com/Raynos/stream-router", 10 | "contributors": [ 11 | { 12 | "name": "Jake Verbaten" 13 | } 14 | ], 15 | "bugs": { 16 | "url": "https://github.com/Raynos/stream-router/issues", 17 | "email": "raynos2@gmail.com" 18 | }, 19 | "dependencies": { 20 | "routes": "~0.1.1" 21 | }, 22 | "devDependencies": { 23 | "mux-demux-net": "0.0.2" 24 | }, 25 | "licenses": [ 26 | { 27 | "type": "MIT", 28 | "url": "http://github.com/Raynos/stream-router/raw/master/LICENSE" 29 | } 30 | ], 31 | "scripts": {} 32 | } 33 | --------------------------------------------------------------------------------