diff --git a/modules/sockets/client.js b/modules/sockets/client.js new file mode 100644 index 0000000..99f3ff9 --- /dev/null +++ b/modules/sockets/client.js @@ -0,0 +1,35 @@ +var WebSocketClient = require('websocket').client; + +var client = new WebSocketClient(); + +client.on('connectFailed', function(error) { + console.log('Connect Error: ' + error.toString()); +}); + +client.on('connect', function(connection) { + console.log('WebSocket Client Connected'); + connection.on('error', function(error) { + console.log("Connection Error: " + error.toString()); + }); + connection.on('close', function() { + console.log('echo-protocol Connection Closed'); + }); + connection.on('message', function(message) { + if (message.type === 'utf8') { + console.log("Received: '" + message.utf8Data + "'"); + } + }); + + function sendEvent() { + if (connection.connected) { + + var sampleEvent = require('../events_store/index.js')[0]; + + connection.sendUTF(sampleEvent.title); + setTimeout(sendEvent, 1000); + } + } + sendEvent(); +}); + +client.connect('ws://localhost:8080/', 'echo-protocol'); \ No newline at end of file diff --git a/modules/sockets/server.js b/modules/sockets/server.js new file mode 100644 index 0000000..f28dc8e --- /dev/null +++ b/modules/sockets/server.js @@ -0,0 +1,50 @@ +var WebSocketServer = require('websocket').server; +var http = require('http'); + +var server = http.createServer(function(request, response) { + console.log((new Date()) + ' Received request for ' + request.url); + response.writeHead(404); + response.end(); +}); +server.listen(8080, function() { + console.log((new Date()) + ' Server is listening on port 8080'); +}); + + +wsServer = new WebSocketServer({ + httpServer: server, + autoAcceptConnections: false +}); + +function originIsAllowed(origin) { + // put logic here to detect whether the specified origin is allowed. + return true; +} + +wsServer.on('request', function(request) { + if (!originIsAllowed(request.origin)) { + // Make sure we only accept requests from an allowed origin + request.reject(); + console.log((new Date()) + ' Connection from origin ' + request.origin + ' rejected.'); + return; + } + + var connection = request.accept('echo-protocol', request.origin); + console.log((new Date()) + ' Connection accepted.'); + connection.on('message', function(message) { + if (message.type === 'utf8') { + console.log('Received Message: ' + message.utf8Data); + connection.sendUTF(message.utf8Data); + } + else if (message.type === 'binary') { + console.log('Received Binary Message of ' + message.binaryData.length + ' bytes'); + connection.sendBytes(message.binaryData); + } + }); + connection.on('close', function(reasonCode, description) { + console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.'); + }); +}); + + + diff --git a/package.json b/package.json index 2b172ba..444016d 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,8 @@ "morgan": "~1.6.1", "request": "~2.67.0", "rsvp": "^3.1.0", - "serve-favicon": "~2.3.0" + "serve-favicon": "~2.3.0", + "websocket": "^1.0.22" }, "devDependencies": { "grunt-contrib-jshint": "^0.12.0",