From d73a73b35f56460914121614b07412563de76717 Mon Sep 17 00:00:00 2001 From: Chris Brody Date: Wed, 26 Aug 2015 13:55:31 +0200 Subject: [PATCH 1/5] Get collate fields before dropping CTLFIELDS IP --- components/collate.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/collate.js b/components/collate.js index 40054d1..87b78d6 100644 --- a/components/collate.js +++ b/components/collate.js @@ -6,9 +6,9 @@ module.exports = function collate() { var outport = this.openOutputPort('OUT'); var ctlfieldsP = ctlfields.receive(); + var fields = ctlfieldsP.contents.split(',').map(function(str) { return parseInt(str); }); this.dropIP(ctlfieldsP); - var fields = ctlfieldsP.contents.split(',').map(function(str) { return parseInt(str); }); var totalFieldLength = fields.reduce(function(acc, n) { return acc + n; }, 0); var portCount = inportArray.length; @@ -40,4 +40,4 @@ module.exports = function collate() { portCount--; } } -} \ No newline at end of file +} From c4bdb26a9b03ce48b43147e27d73698c39a09b62 Mon Sep 17 00:00:00 2001 From: Chris Brody Date: Wed, 26 Aug 2015 15:07:46 +0200 Subject: [PATCH 2/5] Missed dropIP in examples/websocketchat/wsbroadcast.js --- examples/websocketchat/wsbroadcast.js | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/websocketchat/wsbroadcast.js b/examples/websocketchat/wsbroadcast.js index ca27388..b9da57f 100644 --- a/examples/websocketchat/wsbroadcast.js +++ b/examples/websocketchat/wsbroadcast.js @@ -9,6 +9,7 @@ module.exports = function wsbroadcast() { ip = wssin.receive(); // shd be wss var wss = ip.contents; + this.dropIP(ip); while (true) { ip = inport.receive(); // shd be open bracket From e2959da3c3ca5a51f4ee11c9c8a3443709f7bfcc Mon Sep 17 00:00:00 2001 From: Chris Brody Date: Wed, 26 Aug 2015 19:09:49 +0200 Subject: [PATCH 3/5] Add sample HTTP server, with custom components based on the websocketchat components, following the example in: http://blog.modulus.io/build-your-first-http-server-in-nodejs --- README.md | 6 +++ examples/httpserver/fbphttpserver.js | 16 +++++++ examples/httpserver/httprecv.js | 67 ++++++++++++++++++++++++++++ examples/httpserver/httpresp.js | 25 +++++++++++ examples/httpserver/myproc.js | 22 +++++++++ 5 files changed, 136 insertions(+) create mode 100644 examples/httpserver/fbphttpserver.js create mode 100644 examples/httpserver/httprecv.js create mode 100644 examples/httpserver/httpresp.js create mode 100644 examples/httpserver/myproc.js diff --git a/README.md b/README.md index 3b26232..db6b890 100644 --- a/README.md +++ b/README.md @@ -164,6 +164,12 @@ The folder called `test` contains a number of Mocha tests. 1. Run `npm test` to execute a series of tests (all the `fbptestxx.js` tests in sequence). 2. Alternatively, you can directly execute `node.exe node_modules/mocha/bin/mocha --recursive --require test/test_helper.js` in case you need to adjust the path to Node's binary or pass further parameters to Mocha. +# Testing Sample HTTP Server + +Run `node examples/httpserver/fbphttpserver.js`, which is a simple HTTP server which is similar to the one in the sample at: http://blog.modulus.io/build-your-first-http-server-in-nodejs + +NOTE: The HTTP server components are currently all custom components, based on the components used in the simple web socket chat server described below. + # Testing Simple Web Socket Chat Server Run `node examples/websocketchat/fbptestwschat.js`, which is a simple web socket chat server which responds to any request by broadcasting it to all connected clients. It is similar to the chat sample at: http://socket.io/get-started/chat/ except for serving the client HTML. diff --git a/examples/httpserver/fbphttpserver.js b/examples/httpserver/fbphttpserver.js new file mode 100644 index 0000000..8047f8e --- /dev/null +++ b/examples/httpserver/fbphttpserver.js @@ -0,0 +1,16 @@ +var fbp = require('../..'); + +// --- define network --- +var network = new fbp.Network(); + +var receiver = network.defProc(require('./httprecv')); +var myproc = network.defProc(require('./myproc')); +var send = network.defProc(require('./httpresp')); + +network.initialize(receiver, 'PORTNO', '8080'); +network.connect(receiver, 'OUT', myproc, 'IN', 6); +network.connect(myproc, 'OUT', send, 'IN', 6); + +// --- run --- +var fiberRuntime = new fbp.FiberRuntime(); +network.run(fiberRuntime, { trace: true }); diff --git a/examples/httpserver/httprecv.js b/examples/httpserver/httprecv.js new file mode 100644 index 0000000..f6ed096 --- /dev/null +++ b/examples/httpserver/httprecv.js @@ -0,0 +1,67 @@ +'use strict'; + +var IP = require('../../core/IP') + //, WebSocketServer = require('ws').Server + , http = require('http'); + +module.exports = function httprecv(runtime) { + var inport = this.openInputPort('PORTNO'); + var outport = this.openOutputPort('OUT'); + + var ip = inport.receive(); + var portno = ip.contents; + var server = http.createServer(handleWebRequest); + + runtime.runAsyncCallback(genListenFun(runtime, server, portno, this)); + + while (true) { + var result = runtime.runAsyncCallback(genWsReceiveFun(runtime, server, portno, this)); + //console.log('wsrecv callback complete: ' + this.name); + + for (var i=0; i Date: Wed, 26 Aug 2015 19:15:27 +0200 Subject: [PATCH 4/5] Move examples/httpserver/httprecv.js to components/httpserver.js; rename httpresp.js to myresponse.js --- examples/httpserver/httprecv.js => components/httpserver.js | 6 ++---- examples/httpserver/fbphttpserver.js | 4 ++-- examples/httpserver/{httpresp.js => myresponse.js} | 2 +- 3 files changed, 5 insertions(+), 7 deletions(-) rename examples/httpserver/httprecv.js => components/httpserver.js (88%) rename examples/httpserver/{httpresp.js => myresponse.js} (93%) diff --git a/examples/httpserver/httprecv.js b/components/httpserver.js similarity index 88% rename from examples/httpserver/httprecv.js rename to components/httpserver.js index f6ed096..ed69a23 100644 --- a/examples/httpserver/httprecv.js +++ b/components/httpserver.js @@ -1,10 +1,9 @@ 'use strict'; -var IP = require('../../core/IP') - //, WebSocketServer = require('ws').Server +var IP = require('../core/IP') , http = require('http'); -module.exports = function httprecv(runtime) { +module.exports = function httpserver(runtime) { var inport = this.openInputPort('PORTNO'); var outport = this.openOutputPort('OUT'); @@ -16,7 +15,6 @@ module.exports = function httprecv(runtime) { while (true) { var result = runtime.runAsyncCallback(genWsReceiveFun(runtime, server, portno, this)); - //console.log('wsrecv callback complete: ' + this.name); for (var i=0; i Date: Wed, 26 Aug 2015 19:22:12 +0200 Subject: [PATCH 5/5] Cleanup internal httpserver function names & queue elements --- components/httpserver.js | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/components/httpserver.js b/components/httpserver.js index ed69a23..1007d10 100644 --- a/components/httpserver.js +++ b/components/httpserver.js @@ -9,18 +9,18 @@ module.exports = function httpserver(runtime) { var ip = inport.receive(); var portno = ip.contents; - var server = http.createServer(handleWebRequest); + var server = http.createServer(handleServerRequest); runtime.runAsyncCallback(genListenFun(runtime, server, portno, this)); while (true) { - var result = runtime.runAsyncCallback(genWsReceiveFun(runtime, server, portno, this)); + var result = runtime.runAsyncCallback(genReceiveFun(runtime, server, portno, this)); for (var i=0; i