Files
alex_app1/app.js
2013-01-08 17:45:17 -05:00

343 lines
13 KiB
JavaScript

/**
* Module dependencies.
*/
var fs = require('fs');
var path = require('path');
//var mongo = require('mongodb');
var async = require('async');
var mongo = require('mongoskin');
var BSON = mongo.BSONPure;
var db = mongo.db('localhost:27017/test');
var testcollection = db.collection('testcollection');
var exercisecollection = db.collection('exercisecollection');
var util = require('util');
//var parser = new xml2js.Parser();
var waiting = 0;
var waitingj = 0;
var app = require('http').createServer(function handler(request, response) {
var extname;
console.log('request starting...;' + request.url);
switch(request.url) {
case '/admin':
//var filePath = '.' + request.url;
//if (filePath == './')
filePath = './admin.html';
extname = path.extname(filePath);
contentType = 'text/html';
switch (extname) {
case '.js':
contentType = 'text/javascript';
break;
case '.css':
contentType = 'text/css';
break;
}
path.exists(filePath, function(exists) {
if (exists) {
fs.readFile(filePath, function(error, content) {
if (error) {
response.writeHead(500);
response.end();
}
else {
response.writeHead(200, { 'Content-Type': contentType });
response.end(content, 'utf-8');
}
});
}
else {
response.writeHead(404);
response.end();
}
});
break;
case '/placeholder':
break;
// default case
default:
var filePath = '.' + request.url;
if (filePath == './')
filePath = './index.html';
extname = path.extname(filePath);
contentType = 'text/html';
switch (extname) {
case '.js':
contentType = 'text/javascript';
break;
case '.css':
contentType = 'text/css';
break;
}
path.exists(filePath, function(exists) {
if (exists) {
fs.readFile(filePath, function(error, content) {
if (error) {
response.writeHead(500);
response.end();
}
else {
response.writeHead(200, { 'Content-Type': contentType });
response.end(content, 'utf-8');
}
});
}
else {
response.writeHead(404);
response.end();
}
});
}
}).listen(3000);
var io = require('socket.io');
io = io.listen(app);
io.configure('development', function(){
io.set("transports", ["websocket"]);
});
io.sockets.on('connection', function(socket) {
// console.log('Client connected');
// socket.on('getactivites', function(data) {
// // console.log('getactivites');
// testcollection.find().toArray(function(err, result) {
// if (err) throw err;
// socket.emit('populateactivities', result);
// });
// });
///////////////////////////////////////////
socket.on('getactivites', function(data) {
console.log('getactivities');
waiting = 0;
waitingj = 0;
testcollection.find().toArray(function(err, result) {
if (err) throw err;
for (var j in result) {
console.log('getactivities' + JSON.stringify(result));
var eresult = result;
var i;
waitingj ++;
async.forEach(j, function(item,callback) {
console.log('iteration ' + item);
console.log('in async' + JSON.stringify(result[item]));
result[item]._IDcopy = result[item]._id;
}, function(err){
// if any of the saves produced an error, err would equal that error
});
for(i in result[j].Activities.Activity.Lap) {
//////////////
waiting ++;
getbyidall(eresult,result[j].Activities.Activity.Lap[i].selection,i,j);
////////////////////
console.log('below_i = ' + i);
//console.log('DATA = ' + JSON.stringify(callback));
}
}
});
});
////////////////////////////////////////
function deiteratej() {
if (!waiting) {
waitingj --;
}
}
function completeall(result) {
if (!waiting) {
console.log('done');
socket.emit('populateactivities', result);
}
}
function complete(result) {
if (!waiting) {
console.log('done');
socket.emit('populateactivitybyid', result);
}
}
function getbyidall (result,docid,iteration,iterationtop){
exercisecollection.findById(docid, function(err, exresult) {
if (err) throw err;
waiting --;
console.log('waiting = ' + waiting);
console.log('inside_j = ' + iterationtop);
console.log('inside_i = ' + iteration);
result[iterationtop].Activities.Activity.Lap[iteration].exercisename = exresult.exercise.name;
result[iterationtop].Activities.Activity.Lap[iteration].exercisemuscledata = exresult.exercise.muscledata;
result[iterationtop].Activities.Activity.Lap[iteration].exerciseclass = exresult.exercise.type;
deiteratej();
completeall(result);
});
}
function getbyid (result,docid,iteration){
exercisecollection.findById(docid, function(err, exresult) {
if (err) throw err;
waiting --;
console.log('waiting = ' + waiting);
console.log('inside_i = ' + iteration);
result.Activities.Activity.Lap[iteration].exercisename = exresult.exercise.name;
result.Activities.Activity.Lap[iteration].exercisemuscledata = exresult.exercise.muscledata;
result.Activities.Activity.Lap[iteration].exerciseclass = exresult.exercise.type;
complete(result);
});
}
///////////////////////////////////////
socket.on('getactivitybyid', function(id) {
waiting = 0;
testcollection.findById(id, function(err, result) {
if (err) throw err;
//console.log('Activity result = ' + JSON.stringify(result));
//var unpackedresult = JSON.parse(result);
var eresult = result;
var i;
for(i in result.Activities.Activity.Lap) {
//console.log('Activity parse result = ' + JSON.stringify(item.val1));
console.log('above_i = ' + i);
///////////////
waiting ++;
getbyid(eresult,result.Activities.Activity.Lap[i].selection,i);
////////////////////
console.log('below_i = ' + i);
//console.log('DATA = ' + JSON.stringify(callback));
}
});
});
////////////////////////
socket.on('addactivity', function(data, docid) {
var document_id;
// console.log('addactivity' + docid);
// console.log('add_activity_data' + JSON.stringify(data));
if (docid === null) {
document_id = new BSON.ObjectID();
}
else {
document_id = new BSON.ObjectID(docid);
}
//var document_id = new BSON.ObjectID(docid);
// console.log('inserted BSONID' + document_id);
testcollection.update({_id:document_id}, data,{upsert:true} , function(err, result) {
if (err) throw err;
exercisecollection.find().toArray(function(err, result) {
if (err) throw err;
socket.emit('populateexercises', result);
});
});
});
/////////////////////
socket.on('delactivity', function(id) {
testcollection.removeById(id,function(err, reply){
if (err) throw err;
waiting = 0;
waitingj = 0;
testcollection.find().toArray(function(err, result) {
if (err) throw err;
for (var j in result) {
console.log('getactivities' + JSON.stringify(result));
var eresult = result;
var i;
waitingj ++;
for(i in result[j].Activities.Activity.Lap) {
//////////////
waiting ++;
getbyidall(eresult,result[j].Activities.Activity.Lap[i].selection,i,j);
////////////////////
console.log('below_i = ' + i);
//console.log('DATA = ' + JSON.stringify(callback));
}
}
});
});
});
///////////////////
socket.on('getexercises', function(data) {
// console.log('emit exercises');
exercisecollection.find().toArray(function(err, result) {
if (err) throw err;
socket.emit('populateexercises', result);
});
});
/////////////////////
socket.on('updateexercises', function(data, docid) {
// console.log('updateexecises' + JSON.stringify(data));
if (docid == 'undefined') {
//console.log('edited updateexecises' + JSON.stringify(data));
exercisecollection.insert(data, function(err, result) {
if (err) throw err;
exercisecollection.find().toArray(function(err, result) {
if (err) throw err;
socket.emit('populateexercises', result);
});
});
}
else {
var document_id = new BSON.ObjectID(docid);
exercisecollection.update({_id:document_id}, data,{upsert:true} , function(err, result) {
if (err) throw err;
exercisecollection.find().toArray(function(err, result) {
if (err) throw err;
//console.log('populateexercises');
socket.emit('populateexercises', result);
});
});
}
});
////////////////////
socket.on('getexercisebyid', function(id) {
// console.log('getexercisebyid');
exercisecollection.findById(id, function(err, result) {
if (err) throw err;
socket.emit('populateexercisebyid', result);
});
});
////////////////
socket.on('delexercise', function(id) {
exercisecollection.removeById(id,function(err, reply){
if (err) throw err;
exercisecollection.find().toArray(function(err, result) {
if (err) throw err;
socket.emit('populateexercises', result);
});
});
});
//////////////////
///////////////////
socket.on('getexerciselist', function(data) {
// console.log('emit exercises = ' + data);
exercisecollection.find({'exercise.type': data }).toArray(function(err, result) {
if (err) throw err;
console.log('emited exercises = ' + JSON.stringify(result));
socket.emit('populateexerciselist', data , result);
});
});
/////////////////////
});