diff options
| author | Ben Beltran <ben@freshout.us> | 2013-03-25 16:36:57 -0600 |
|---|---|---|
| committer | Ben Beltran <ben@freshout.us> | 2013-03-25 16:36:57 -0600 |
| commit | f0c1d1ca24eaefc12e2e1092bd9dbc954b7f4d3c (patch) | |
| tree | 789f17466b3766a1ada8abc5e49967377bb07766 /vim/.backup/server.js~ | |
| parent | 30a7092fe25d693f33637a92d2abb5ba1c4aea58 (diff) | |
Update the stuff
Diffstat (limited to 'vim/.backup/server.js~')
| -rwxr-xr-x | vim/.backup/server.js~ | 258 |
1 files changed, 258 insertions, 0 deletions
diff --git a/vim/.backup/server.js~ b/vim/.backup/server.js~ new file mode 100755 index 0000000..dc39a5e --- /dev/null +++ b/vim/.backup/server.js~ @@ -0,0 +1,258 @@ +#!/usr/bin/env node + +require('colors'); +var Ne = require('neon'); + +Nitrogen = { + Manifest : require('./lib/manifest.js'), + Server : {} +}; + +Ne.Class(Nitrogen.Server, 'Editor')({ + prototype : { + fs : require('fs'), + express : require('express'), + httpProxy : require('http-proxy'), + io : require('socket.io'), + http : require('http'), + app : null, + server : null, + socket : null, + port : 4000, + occipitalOptions : {}, + + init : function init(config) { + Object.keys(config).forEach(function (property) { + this[property] = config[property]; + }, this); + + console.log('Nitrogen Session Server starting '); + this.app = this.express(); + this.proxy = new this.httpProxy.RoutingProxy(); + this.server = this.http.createServer(this.app); + this.initRack(); + this.initDb(); + this.initRoutes(); + this.server.listen(this.port); + this.socket = this.io.listen(this.server); + this.initSyncEvents(); + console.log('Nitrogen Session Server listening on port ' + this.port); + }, + + initRack : function initRack() { + var nitrogen = this; + this.app.use(this.express.logger()); + this.app.use(this.express.compress()); + this.app.use(function (request, response, next) { + response.header("Access-Control-Allow-Origin", "*"); + response.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'); + response.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With'); + if ('OPTIONS' == request.method) { + response.send(200); + } + else { + next(); + } + }); + // This has to be here in order for a proxied post to work. + // See https://github.com/nodejitsu/node-http-proxy/issues/180 + // for more information. + this.app.use(function (request, response, next) { + if (request.url.match(/\/attachments\/.*/) && request.method === "POST" ){ + var options = nitrogen.occipitalOptions; + nitrogen.proxy.proxyRequest( request, response, options ); + } else { + return next(); + } + }); + this.app.use(this.express.bodyParser()); + this.app.use('/', this.express.static('public')); + }, + + initDb : function initDb() { + var fileNames = this.fs.readdirSync(__dirname + '/../').filter(function(fn){ return fn.match(/.*\.json$/); }); + var i, filePath, collectionName; + data = Nitrogen.data = {}; + + for( i=0; i < fileNames.length; i+=1 ){ + filePath = __dirname + '/../' + fileNames[i]; + collectionName = fileNames[i].replace(/.json/, ''); + data[collectionName] = this.fs.readFileSync(filePath).toString().replace(/\n$/, "").split(/\n/).map(function(r){ + return JSON.parse(r); + }); + } + }, + + initRoutes : function initRoutes() { + var nitrogen = this, + path = require('path'); + + this.app.get('/', function (request, response) { + var file = path.resolve('./public/app.html'); + response.sendfile(file); + }); + + this.app.get('/api/all', function (req, res) { + res.set('Content-Type', 'application/json'); + res.send(JSON.stringify(data)); + }); + + this.app.get('/api/:model', function (req, res) { + var records = data[req.params.model] + res.set('Content-Type', 'application/json'); + res.send(JSON.stringify(records)); + }); + + this.app.get('/api/:model/:id', function (req, res){ + var model = req.params.model; + var record = data[model].filter(function (record) { + return record.id == req.params.id; + })[0]; + + if (record) { + res.set('Content-Type', 'application/json'); + res.send(JSON.stringify(record)); + } + else { + res.set('Content-Type', 'application/json'); + res.send(404, 'record not found'); + } + }); + + this.app.get('/api/:model/:id/delete', function (req, res){ + var model = req.params.model; + var record = data[model].filter(function (record) { + return record.id == req.params.id; + })[0]; + + data[model].splice(data[model].indexOf(record), 1); + + res.set('Content-Type', 'application/json'); + res.send('{}'); + }); + + this.app.post('/api/:model/create', function (req, res){ + var model = req.params.model; + var record = req.body; + record.id = util.generateUid(24); + + data[model].push(record); + + res.set('Content-Type', 'application/json'); + res.send(JSON.stringify(record)); + }); + + this.app.post('/api/:model/:id/update', function (req, res){ + var model = req.params.model; + + var record = data[model].filter(function (record) { + return record.id == req.params.id; + })[0]; + + var position = data[model].indexOf(record); + console.log(req); + data[model].splice(position, 1, req.body); + + var record = data[model].filter(function (record) { + return record.id == req.params.id; + })[0]; + res.set('Content-Type', 'application/json'); + res.send(JSON.stringify(record)); + }); + + this.app.get('/manifest_doc.js', function (req, res) { + res.set('Content-Type', 'application/json'); + + // Generate the package every time for development + Manifest.generatePackage(function () { + res.sendfile(path.resolve('./public/manifest_doc.js')); + }); + /* TODO: Uncomment when file detection is done + nitrogen.fs.exists('./public/manifest_doc.js', function (exists) { + if (exists) { + res.sendfile(path.resolve('./public/manifest_doc.js')); + } else { + // create package + Manifest.generatePackage(function () { + res.sendfile(path.resolve('./public/manifest_doc.js')); + }); + } + }); */ + }); + + this.app.get('/get_assets', function (req, res) { + res.set('Content-Type', 'text/plain'); + + // Generate the package everytime for development + Manifest.generatePackage(function () { + res.sendfile(path.resolve('../app_assets/package.dat')); + }); + /* TODO: Uncomment when file detection is ready + nitrogen.fs.exists('../app_assets/package.dat', function (exists) { + if (exists) { + res.sendfile(path.resolve('../app_assets/package.dat')); + } else { + // create package + Manifest.generatePackage(function () { + res.sendfile(path.resolve('../app_assets/package.dat')); + }); + } + }); */ + }); + + this.app.get('/attachments/*', function (req, res) { + var options = nitrogen.occipitalOptions; + + nitrogen.proxy.proxyRequest( req, res, options ); + }); + }, + + initSyncEvents : function () { + this.socket.sockets.on('connection', function (socket) { + socket.emit('connected', {message : "Connection established"}); + + socket.on('sync', function (sync_data) { + console.log(">> Incoming LSD DATA".blue); + + sync_data = JSON.parse(sync_data); + + // Let's handle each guy + switch(sync_data.action) { + case "create": + data["tasks"].push(sync_data.data); + break; + case "update": + var record = data["tasks"].filter(function (record) { + return record.id == sync_data.data.id; + })[0]; + var position = data["tasks"].indexOf(record); + data["tasks"].splice(position, 1, sync_data.data); + break; + case "remove": + var record = data["tasks"].filter(function (record) { + return record.id == sync_data.data.id; + })[0]; + var position = data["tasks"].indexOf(record); + data["tasks"].splice(position, 1); + break; + } + + socket.emit('sync_ok', {message : "Sync Received: OK"}); + }); + }); + + this.socket.sockets.on('disconnect', function (socket) { + socket.emit('disconnected', {message : "Connection lost"}); + }); + } + } +}); + +new Nitrogen.Server.Editor({ + port : process.argv[2] || 4000, + occipitalOptions : { + host : (process.argv[3]) ? process.argv[3].replace(/:.*/, '') : '127.0.0.1', + port : (process.argv[3]) ? process.argv[3].replace(/.*:/, '') : '3001' + } +}); + |