Skip to content

Instantly share code, notes, and snippets.

@MrTiggr
Created August 26, 2014 01:01
Show Gist options
  • Save MrTiggr/aaf84dbcbf993e19565d to your computer and use it in GitHub Desktop.
Save MrTiggr/aaf84dbcbf993e19565d to your computer and use it in GitHub Desktop.
Ninja Websockets
/**
* Main application
*/
var express = require('express');
var routes = require('./routes');
var http = require('http');
var path = require('path');
var fs = require('fs');
var net = require("net");
var request = require('request');
var WebSocketServer = require('websocket').server;
var WebSocketRouter = require('websocket').router;
var events = require("events");
var bodyParser = require('body-parser');
function GeoflowServer(){
var self=this;
self.port=3000;
self.app=express();
self.server= http.createServer(self.app);
self.app.use(bodyParser());
self.app.use(function(req, res, next) {
var oneof = false;
if(req.headers.origin) {
res.header('Access-Control-Allow-Origin', "*");
oneof = true;
}
if(req.headers['access-control-request-method']) {
res.header('Access-Control-Allow-Methods', req.headers['access-control-request-method']);
oneof = true;
}
if(req.headers['access-control-request-headers']) {
res.header('Access-Control-Allow-Headers', req.headers['access-control-request-headers']);
oneof = true;
}
if(oneof) {
res.header('Access-Control-Max-Age', 60 * 60 * 24 * 365);
}
// intercept OPTIONS method
if (oneof && req.method == 'OPTIONS') {
res.send(200);
}
else {
next();
}
});
self.app.use(express.static(__dirname + '/public'));
self.app.set('views', __dirname + '/views');
var options = {};
routes(self.app, options);
self.server.listen(self.port);
// ###########################################################################################################################
// ################################################ WebSockets Services ######################################
self.wsServer = new WebSocketServer({
httpServer: self.server,
// You should not use autoAcceptConnections for production
// applications, as it defeats all standard cross-origin protection
// facilities built into the protocol and the browser. You should
// *always* verify the connection's origin and decide whether or not
// to accept it..
autoAcceptConnections: true
});
self.connections = [];
self.wsServer.on('connect', function(connection) {
self.connections.push(connection);
connection.on('message', function(message) {
if (message.type === 'utf8') {
var report=JSON.parse(message.utf8Data);
}
});
connection.on('close', function(reasonCode, description) {
console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.');
});
});
// Super constructor
events.EventEmitter.call(this);
}
// inherit events.EventEmitter
GeoflowServer.super_ = events.EventEmitter;
GeoflowServer.prototype = Object.create(events.EventEmitter.prototype, {
constructor: {
value: GeoflowServer,
enumerable: false
}
});
var GEOFLOW_SERVER=new GeoflowServer();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment