Advertisement
Guest User

Untitled

a guest
Sep 14th, 2017
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.91 KB | None | 0 0
  1. var http = require("http");
  2. var mysql = require('./mysql');
  3. var util = require("../js/util");
  4. var settings = require("./settings");
  5. var JSONResponse = require("./JSONResponse").JSONResponse;
  6. var Database = require("./Database").Database;
  7. var ProductAutoBidBot = require("./ProductAutoBidBot").ProductAutoBidBot;
  8.  
  9. function handleJSONResponse(response)
  10. {
  11. switch(response.getParam(0))
  12. {
  13. case "place-bid":
  14. var bidProduct = undefined;
  15. var bidUser = undefined;
  16. var productAndUserFetchedCallback = function()
  17. {
  18. if(bidProduct === undefined
  19. || bidUser === undefined)
  20. return;
  21. if(!bidUser||!bidProduct)
  22. {
  23. if(!bidUser)
  24. response.addError("Placing a bid requires a login.");
  25. if(!bidProduct)
  26. response.addError("Product does not exist.");
  27. response.end();
  28. return;
  29. }
  30. bidProduct.placeBid(response.getTime(), bidUser,
  31. function(bid)
  32. {
  33. response.set("bid", bid?bid.toJSON():null);
  34. response.end();
  35. });
  36. }
  37. db.getProduct(response.getParam(1), function(product)
  38. {
  39. bidProduct = product;
  40. productAndUserFetchedCallback();
  41. });
  42. response.validateLogin(function(user)
  43. {
  44. bidUser = user;
  45. productAndUserFetchedCallback();
  46. });
  47. break;
  48. case "next-bid-since":
  49. var sinceBidId = parseInt(response.getParam(1));
  50. if(db.getLastBid()
  51. && db.getLastBid().getId() > sinceBidId)
  52. {
  53. db.getLastBidsPlacedAfterBidId(sinceBidId,
  54. function(bids)
  55. {
  56. var bidData = new Array(bids.length);
  57. for(var i=0; i<bidData.length; i++)
  58. bidData[i] = bids[i].toJSON();
  59. response.set("bids", bidData);
  60. response.end();
  61. });
  62. }
  63. else
  64. {
  65. var rawResponse = {};
  66. var onBidPlacedListener = function(bid)
  67. {
  68. db.removeOnBidPlacedEventListener(onBidPlacedListener);
  69. if(!rawResponse[bid.getId()])
  70. {
  71. response.set("bids", [bid]);
  72. rawResponse[bid.getId()] = response.getRawResponse();
  73. }
  74. response.setRawResponse(rawResponse[bid.getId()]);
  75. response.end();
  76. };
  77. db.addOnBidPlacedEventListener(onBidPlacedListener);
  78. }
  79. break;
  80. case "active-products":
  81. db.getProductsStartingBetween(new Date(0), new Date(),
  82. function(products)
  83. {
  84. var productData = new Array(products.length);
  85. for(var i=0; i<productData.length; i++)
  86. productData[i] = products[i].toJSON();
  87. response.set("activeProducts", productData);
  88. response.end();
  89. });
  90. break;
  91. case "product-info":
  92. db.getProduct(response.getParam(1), function(product)
  93. {
  94. response.set("product", product?product.toJSON():null);
  95. response.end();
  96. });
  97. break;
  98. case "bid-info":
  99. db.getBid(response.getParam(1), function(bid)
  100. {
  101. response.set("bid", bid?bid.toJSON():null);
  102. response.end();
  103. });
  104. break;
  105. case "user-info":
  106. db.getUser(response.getParam(1), function(user)
  107. {
  108. response.set("user", user?user.toJSON():null);
  109. response.end();
  110. });
  111. break;
  112. case "time":
  113. response.set("time", response.getTime().getTime());
  114. response.end();
  115. break;
  116. default:
  117. response.addError("Unknown Command");
  118. response.end();
  119. }
  120. }
  121.  
  122. var client = mysql.Client();
  123. client.host = settings.sqlHost;
  124. client.user = settings.sqlUser;
  125. client.password = settings.sqlPass;
  126. client.database = settings.sqlDatabase;
  127.  
  128. client.connect();
  129.  
  130. var db = new Database(client, settings);
  131.  
  132. (function()
  133. {
  134. var botUsers = new Array();
  135. var botsLoadedCallbacks = new Array();
  136.  
  137. db.addProductLoadedEventListener(function(product)
  138. {
  139. var botUsersReadyCallback = function()
  140. {
  141. if(settings.autoBidEnabled)
  142. new ProductAutoBidBot(product, botUsers,
  143. settings.autoBidDelay).start();
  144. }
  145. if(botsLoadedCallbacks !== null)
  146. botsLoadedCallbacks.push(botUsersReadyCallback);
  147. else
  148. botUsersReadyCallback();
  149. });
  150. db._init(function(db)
  151. {
  152. var botsLoadedCallback = function()
  153. {
  154. if(botUsers.length < settings.botUserIds.length)
  155. return;
  156. for(var i=0; i<botsLoadedCallbacks.length; i++)
  157. botsLoadedCallbacks[i]();
  158. }
  159. for(var i=0; i<settings.botUserIds.length; i++)
  160. db.getUser(settings.botUserIds[i], function(user)
  161. {
  162. botUsers.push(user);
  163. botsLoadedCallback();
  164. });
  165. http.createServer(function(request, response)
  166. {
  167. var jsonresponse = new JSONResponse(db, request, response);
  168. handleJSONResponse(jsonresponse);
  169. }).listen(settings.httpPort);
  170. console.log("HTTP Server listening to *:"+settings.httpPort);
  171. });
  172. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement