Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var http = require("http");
- var mysql = require('./mysql');
- var util = require("../js/util");
- var settings = require("./settings");
- var JSONResponse = require("./JSONResponse").JSONResponse;
- var Database = require("./Database").Database;
- var ProductAutoBidBot = require("./ProductAutoBidBot").ProductAutoBidBot;
- function handleJSONResponse(response)
- {
- switch(response.getParam(0))
- {
- case "place-bid":
- var bidProduct = undefined;
- var bidUser = undefined;
- var productAndUserFetchedCallback = function()
- {
- if(bidProduct === undefined
- || bidUser === undefined)
- return;
- if(!bidUser||!bidProduct)
- {
- if(!bidUser)
- response.addError("Placing a bid requires a login.");
- if(!bidProduct)
- response.addError("Product does not exist.");
- response.end();
- return;
- }
- bidProduct.placeBid(response.getTime(), bidUser,
- function(bid)
- {
- response.set("bid", bid?bid.toJSON():null);
- response.end();
- });
- }
- db.getProduct(response.getParam(1), function(product)
- {
- bidProduct = product;
- productAndUserFetchedCallback();
- });
- response.validateLogin(function(user)
- {
- bidUser = user;
- productAndUserFetchedCallback();
- });
- break;
- case "next-bid-since":
- var sinceBidId = parseInt(response.getParam(1));
- if(db.getLastBid()
- && db.getLastBid().getId() > sinceBidId)
- {
- db.getLastBidsPlacedAfterBidId(sinceBidId,
- function(bids)
- {
- var bidData = new Array(bids.length);
- for(var i=0; i<bidData.length; i++)
- bidData[i] = bids[i].toJSON();
- response.set("bids", bidData);
- response.end();
- });
- }
- else
- {
- var rawResponse = {};
- var onBidPlacedListener = function(bid)
- {
- db.removeOnBidPlacedEventListener(onBidPlacedListener);
- if(!rawResponse[bid.getId()])
- {
- response.set("bids", [bid]);
- rawResponse[bid.getId()] = response.getRawResponse();
- }
- response.setRawResponse(rawResponse[bid.getId()]);
- response.end();
- };
- db.addOnBidPlacedEventListener(onBidPlacedListener);
- }
- break;
- case "active-products":
- db.getProductsStartingBetween(new Date(0), new Date(),
- function(products)
- {
- var productData = new Array(products.length);
- for(var i=0; i<productData.length; i++)
- productData[i] = products[i].toJSON();
- response.set("activeProducts", productData);
- response.end();
- });
- break;
- case "product-info":
- db.getProduct(response.getParam(1), function(product)
- {
- response.set("product", product?product.toJSON():null);
- response.end();
- });
- break;
- case "bid-info":
- db.getBid(response.getParam(1), function(bid)
- {
- response.set("bid", bid?bid.toJSON():null);
- response.end();
- });
- break;
- case "user-info":
- db.getUser(response.getParam(1), function(user)
- {
- response.set("user", user?user.toJSON():null);
- response.end();
- });
- break;
- case "time":
- response.set("time", response.getTime().getTime());
- response.end();
- break;
- default:
- response.addError("Unknown Command");
- response.end();
- }
- }
- var client = mysql.Client();
- client.host = settings.sqlHost;
- client.user = settings.sqlUser;
- client.password = settings.sqlPass;
- client.database = settings.sqlDatabase;
- client.connect();
- var db = new Database(client, settings);
- (function()
- {
- var botUsers = new Array();
- var botsLoadedCallbacks = new Array();
- db.addProductLoadedEventListener(function(product)
- {
- var botUsersReadyCallback = function()
- {
- if(settings.autoBidEnabled)
- new ProductAutoBidBot(product, botUsers,
- settings.autoBidDelay).start();
- }
- if(botsLoadedCallbacks !== null)
- botsLoadedCallbacks.push(botUsersReadyCallback);
- else
- botUsersReadyCallback();
- });
- db._init(function(db)
- {
- var botsLoadedCallback = function()
- {
- if(botUsers.length < settings.botUserIds.length)
- return;
- for(var i=0; i<botsLoadedCallbacks.length; i++)
- botsLoadedCallbacks[i]();
- }
- for(var i=0; i<settings.botUserIds.length; i++)
- db.getUser(settings.botUserIds[i], function(user)
- {
- botUsers.push(user);
- botsLoadedCallback();
- });
- http.createServer(function(request, response)
- {
- var jsonresponse = new JSONResponse(db, request, response);
- handleJSONResponse(jsonresponse);
- }).listen(settings.httpPort);
- console.log("HTTP Server listening to *:"+settings.httpPort);
- });
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement