Created
April 8, 2014 05:35
-
-
Save anonymous/10094515 to your computer and use it in GitHub Desktop.
index-all.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
console.log("Application initializing..."); | |
// REQUIRE ALL MODULES | |
var mysql = require('mysql'); | |
var express = require('express'); | |
var moment = require('moment'); | |
var q = require('q'); | |
var Promise = require('bluebird'); | |
var socket = require("socket.io").listen(1223, "http://localhost"); | |
//MODULE SETTINGS | |
socket.set('log level', 1); // reduce logging | |
//DECLARE ALL GENERAL GLOBAL VARIABLES | |
var username; | |
var password; | |
var app = express(); | |
//var socket = io.listen(1223, "http://localhost"); | |
//HANDLE SOCKET STREAMING | |
socket.on("connection", function (client) { | |
console.log("Client connected to socket!"); | |
client.on("sale", function(data){ | |
//client.emit("update", "You have connected to the server."); | |
socket.sockets.emit("saleUpdate", data); | |
console.log("Socket.io streaming sales data to client: " + data); | |
}); | |
}); | |
//DECLARE ALL FEATURE-SPECIFIC GLOBAL VARIABLES | |
var Auto = { | |
name: 'Auto', | |
items: ['new_auto', 'add_auto'] | |
}; | |
var Fire = { | |
name: 'Fire', | |
items: ['new_fire', 'add_fire'] | |
}; | |
var Health = { | |
name: 'Health', | |
items: ['health'] | |
}; | |
var Life = { | |
name: 'Life', | |
items: ['life'] | |
}; | |
var Bank = { | |
name: 'Bank', | |
items: ['bank_dep', 'bank_loan'] | |
}; | |
var categories = [Auto, Fire, Health, Life, Bank]; | |
//DEFINE ALL FUNCTIONS | |
function createConnection() { | |
var connection = mysql.createConnection({ | |
dateStrings: true, | |
host: 'localhost', | |
user: 'root', | |
password: '', | |
database: 'officeball' | |
}); | |
connection = Promise.promisifyAll(connection); | |
return connection; | |
} | |
function sendGame(req, res, sales, settings, categories, players) { | |
var game = new Object(); | |
game.sales = sales; | |
game.players = players; | |
game.settings = settings; | |
game.categories = categories; | |
JSONgame = JSON.stringify(game); | |
res.writeHead(200, { | |
'Access-Control-Allow-Origin': 'http://localhost', | |
'Content-Length': JSONgame.length, | |
'Content-Type': 'application/json' | |
}); | |
res.write(JSONgame); | |
res.end(); | |
//console.log('Game: ' + JSON.stringify(game, null, 4)); | |
console.log('--------------------------------------'); | |
console.log('User ' + req.body.username + ' successfully retrieved game!'); | |
} | |
var retrieveSales = Promise.method(function (username, connection, timeFrame) { | |
console.log('User ' + username + ' retrieving sales...'); | |
var q = 'select * from sales_entries where date BETWEEN ? AND ?'; | |
return connection.queryAsync(q, timeFrame).then(function (results) { | |
return results[0]; | |
}); | |
}); | |
var retrieveSettings = Promise.method(function (username, connection) { | |
console.log('User ' + username + ' retrieving settings...'); | |
var q = 'select * from sales_settings'; | |
return connection.queryAsync(q).then(function (results) { | |
return results[0]; | |
}); | |
}); | |
var retrieveCategories = Promise.method(function (username, connection) { | |
console.log('User ' + username + ' retrieving categories...'); | |
var q = 'select * from sales_categories'; | |
return connection.queryAsync(q).then(function (results) { | |
return results[0]; | |
}); | |
}); | |
var retrievePlayers = Promise.method(function (username, connection) { | |
console.log('User ' + username + ' retrieving players...'); | |
var q = 'select * from users'; | |
return connection.queryAsync(q).then(function (results) { | |
return results[0]; | |
}); | |
}); | |
var gameSucceed = Promise.method(function gameSucceed(req, res) { | |
var username = req.body.username; | |
console.log('User ' + req.body.username + ' retrieving game...'); | |
var timeFrame = [moment().days(0).hour(0).minute(0).second(0).format("YYYY-MM-DD HH:mm:ss"), moment().days(6).hour(0).minute(0).second(0).format("YYYY-MM-DD HH:mm:ss")]; | |
var connection = Promise.promisifyAll(createConnection()); | |
return connection.connectAsync().then(function () { | |
console.log('Connection with the Officeball MySQL database openned for game retrieval...'); | |
//sending req, but should really be what they use. | |
return Promise.all([ | |
retrieveSales(username, connection, timeFrame), | |
retrieveSettings(username, connection), | |
retrieveCategories(username, connection), | |
retrievePlayers(username, connection) | |
]); | |
}); | |
}); | |
function gameFail(req, res, err) { | |
if (err) { | |
var body = 'Oops! There was an error while processing your request.'; | |
res.writeHead(200, { | |
'Access-Control-Allow-Origin': 'http://localhost', | |
'Content-Length': body.length, | |
'Content-Type': 'text/plain' | |
}); | |
console.log('User ' + req.body.username + ' triggered error: ' + err); | |
body = JSON.stringify(body); | |
res.write(body); | |
} else { | |
var body = 'Username and password didn\'t match.'; | |
res.writeHead(200, { | |
'Access-Control-Allow-Origin': 'http://localhost', | |
'Content-Length': body.length, | |
'Content-Type': 'text/plain' | |
}); | |
console.log('User ' + req.body.username + ' failed to validate.'); | |
body = JSON.stringify(body); | |
res.write(body); | |
} | |
res.end(); | |
} | |
function loginSucceed(req, res, result) { | |
loginData = JSON.stringify(result); | |
res.writeHead(200, { | |
'Access-Control-Allow-Origin': 'http://localhost', | |
'Content-Length': loginData.length, | |
'Content-Type': 'application/json' | |
}); | |
res.write(loginData); | |
console.log('User ' + req.body.username + ' logged in successfully.'); | |
res.end(); | |
} | |
function loginFail(req, res, err) { | |
if (err) { | |
var body = err; | |
res.writeHead(200, { | |
'Access-Control-Allow-Origin': 'http://localhost', | |
'Content-Length': body.length, | |
'Content-Type': 'text/plain' | |
}); | |
console.log('User ' + req.body.username + ' triggered error: ' + err); | |
body = JSON.stringify(body); | |
res.write(body); | |
} else { | |
var body = 'There was an error while processing your login.'; | |
res.writeHead(200, { | |
'Access-Control-Allow-Origin': 'http://localhost', | |
'Content-Length': body.length, | |
'Content-Type': 'text/plain' | |
}); | |
console.log('User ' + req.body.username + ' failed to validate.'); | |
body = JSON.stringify(body); | |
res.write(body); | |
} | |
res.end(); | |
} | |
function registerSucceed(req, res, result) { | |
var body = result; | |
res.writeHead(200, { | |
'Access-Control-Allow-Origin': 'http://localhost', | |
'Content-Length': body.length, | |
'Content-Type': 'text/plain' | |
}); | |
res.write(result); | |
res.end(); | |
console.log("Sending user " + req.body.username + " success response: " + body); | |
} | |
function registerFail(req, res, err) { | |
if (err) { | |
var body = err; | |
res.writeHead(200, { | |
'Access-Control-Allow-Origin': 'http://localhost', | |
'Content-Length': body.length, | |
'Content-Type': 'text/plain' | |
}); | |
res.write(body); | |
res.end(); | |
console.log('User ' + req.body.username + ' triggered error: ' + err); | |
console.log("Sending user " + req.body.username + " error response: " + body); | |
} else { | |
var body = 'Oops! Registration process failed!'; | |
res.writeHead(200, { | |
'Access-Control-Allow-Origin': 'http://localhost', | |
'Content-Length': body.length, | |
'Content-Type': 'text/plain' | |
}); | |
res.write(body); | |
res.end(); | |
console.log('User ' + req.body.username + ' failed to register.'); | |
console.log("Sending user " + req.body.username + " unknown failure response: " + body); | |
} | |
} | |
function missServer(req, res, err) { | |
console.log('User ' + req.body.username + ' failed to validate!'); | |
var body = 'Failed to post data!'; | |
body = JSON.stringify(body); | |
res.writeHead(200, { | |
'Access-Control-Allow-Origin': 'http://localhost', | |
'Content-Length': body.length, | |
'Content-Type': 'text/plain' | |
}); | |
res.write(body); | |
res.end(); | |
} | |
function hitServer(req, res, result) { | |
console.log('User ' + req.body.username + ' validated and is ready!'); | |
postSale(req, res, result); | |
} | |
function listen() { | |
app.use(express.bodyParser()); | |
app.post('/login', function (req, res) { | |
var username = req.body.username; | |
var password = req.body.password; | |
console.log('User ' + username + ' is attempting login...'); | |
validate(username, password, function (err, result) { | |
if (err) loginFail(req, res, err); | |
else loginSucceed(req, res, result); | |
}); | |
}); | |
app.post('/register', function (req, res) { | |
var username = req.body.username; | |
var password = req.body.password; | |
var fname = req.body.fname; | |
var lname = req.body.lname; | |
var credentials = [username,password,fname,lname]; | |
console.log('New user ' + username + ' is attempting to register...'); | |
register(credentials, function (err, result) { | |
if (err) { | |
console.log("New user " + username + " failed to register."); | |
registerFail(req, res, err); | |
} else if (result){ | |
console.log("New user " + username + " registered successfully."); | |
registerSucceed(req, res, result); | |
} | |
}); | |
}); | |
app.post('/game', function (req, res) { | |
var username = req.body.username; | |
var password = req.body.password; | |
console.log('User ' + username + ' is attempting retrieve game...'); | |
validate(username, password, function (err, result) { | |
if (err) gameFail(req, res, err); | |
else gameSucceed(req, res).spread(function (sales, settings, categories, players) { | |
return sendGame(req, res, sales, settings, categories, players); | |
}); | |
}); | |
}); | |
app.post('/recieveHit', function (req, res) { | |
var username = req.body.username; | |
var password = req.body.password; | |
console.log('User ' + username + ' is attempting to validate for a hit...'); | |
validate(username, password, function (err, result) { | |
if (err) missServer(req, res, err); | |
else hitServer(req, res, result); | |
}); | |
}); | |
app.listen(8080, function () { | |
console.log('Server running at http://127.0.0.1:8080/'); | |
}); | |
} | |
function validate(username, password, callback) { | |
var connection = createConnection(); | |
console.log(username); | |
connection.connect(function (err) { | |
if (err) return callback('Failed to connect', null); | |
console.log('Connection with the Officeball MySQL database openned for validation...'); | |
connection.query('select username,password,fname,lname,rank,active from users where username=?', | |
username, | |
function (err, rows, fields) { | |
connection.end(); | |
console.log('...Connection with the Officeball MySQL database for validation closed.'); | |
if (err) return callback('Error while performing query', null); | |
if (rows.length < 1) return callback('No users with this username found.', null); | |
if (rows.length > 1) return callback('- [Anomaly] - Failed to find exactly one user', null); | |
if (rows[0].active == "yes") { | |
if (rows[0].password === password & rows[0].active === "yes") { | |
var result = new Object(); | |
result.username = rows[0].username; | |
result.password = rows[0].password; | |
result.fname = rows[0].fname; | |
result.lname = rows[0].lname; | |
result.rank = rows[0].rank; | |
return callback(null, result); | |
} else { | |
return callback('Login credentials did not match.', null); | |
} | |
} else { | |
return callback('Awaiting account activation by coach.', null); | |
} | |
}); | |
}); | |
} | |
function register(credentials, callback) { | |
var connection = createConnection(); | |
connection.connect(function (err) { | |
if (err) return callback('Failed to connect', null); | |
console.log('Connection with the Officeball MySQL database openned for registration...'); | |
console.log(JSON.stringify(credentials)); | |
connection.query('select username from users where username=?', | |
credentials, | |
function (err, rows) { | |
if (err){ | |
err = "Oops! Error during registration process."; | |
connection.end(); | |
console.log('...Connection with the Officeball MySQL database for registration closed.'); | |
return callback(err, null); | |
} | |
else if (rows.length > 0){ | |
err = "Username already in use."; | |
connection.end(); | |
console.log('...Connection with the Officeball MySQL database for registration closed.'); | |
return callback ("This username is already in use.",null); | |
} | |
else{ | |
connection.query("INSERT INTO `officeball`.`users` (`username`, `password`, `fname`, `lname`) VALUES (?, ?, ?, ?)", | |
credentials, | |
function (err) { | |
connection.end(); | |
console.log('...Connection with the Officeball MySQL database for registration closed.'); | |
if (err) { | |
err = "Oops! Error while completing registration."; | |
return callback(err, null); | |
} else { | |
result = "Registration successful!"; | |
return callback(null, result); | |
} | |
}); | |
} | |
}); | |
}); | |
} | |
function groupToCat(group) { | |
for (x = 0; x < categories.length; x++) { | |
for (i = 0; i < categories[x].items.length; i++) { | |
if (group == categories[x].items[i]) { | |
return (categories[x].name); | |
} | |
} | |
} | |
return ("No match found!"); | |
} | |
function postSale(req, res, result, callback) { | |
var name = req.body.fname + ' ' + req.body.lname; | |
var group = req.body.group; | |
var category = groupToCat(group); | |
var customer = req.body.customer; | |
var price = req.body.price; | |
console.log(name + ' is attempting to sell a ' + category + ' line to ' + customer + ' for ' + price + '.'); | |
var commission = ''; | |
var salesData = [category, group, price, customer, name, commission]; | |
var connection = createConnection(); | |
connection.connect(function (err) { | |
if (err) return callback(new Error('Failed to connect'), null); | |
console.log('Connection with the officeball MySQL database openned for posting sale...'); | |
// if no error, you can do things now. | |
connection.query( | |
'INSERT INTO `officeball`.`sales_entries` SET category = ?, `group` = ?, price = ?, customer = ?, seller = ?, commission = ?', | |
salesData, | |
function (err, rows, fields) { | |
connection.end(); | |
console.log('...Connection with the officeball MySQL database for posting sale closed.'); | |
if (err) { | |
console.log(err); | |
return callback(new Error('Failed to post sales entry'), null); | |
} else { | |
console.log(name + ' successfully sold a ' + group + ' line.'); | |
var body = 'Posted sales entry successfully!'; | |
body = JSON.stringify(body); | |
res.writeHead(200, { | |
'Access-Control-Allow-Origin': 'http://localhost', | |
'Content-Length': body.length, | |
'Content-Type': 'text/plain' | |
}); | |
res.write(body); | |
res.end(); | |
} | |
}); | |
}); | |
} | |
//INITALIZE FUNCTIONS | |
listen(); | |
//SAY NICE THINGS | |
console.log("Application successfully initialized!"); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment