Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

Created April 8, 2014 05:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/10094515 to your computer and use it in GitHub Desktop.
Save anonymous/10094515 to your computer and use it in GitHub Desktop.
index-all.js
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