Advertisement
Guest User

Untitled

a guest
Jun 16th, 2016
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.70 KB | None | 0 0
  1. var util = require('util');
  2. var EventEmitter = require('events').EventEmitter;
  3. var mysql = require('mysql');
  4.  
  5. function Database(taskList) {
  6. var self = this;
  7. self.actionInterval = 2500;
  8. self.knownBuyingTasks = [];
  9. self.knownSellingTasks = [];
  10. self.taskList = taskList;
  11. self.connection = mysql.createConnection({
  12. host : 'localhost',
  13. user : 'root',
  14. password: '',
  15. database: 'csgosupply'
  16. });
  17. self.connect = function() {
  18. self.connection.connect(function (error) {
  19. if (error) {
  20. return;
  21. }
  22. self.emit('connected', self.connection.threadId);
  23. });
  24. }
  25. self.registerBot = function(bot) {
  26. self.connection.query("SELECT id FROM bots WHERE steam_id64 = ?", [bot.steamClient.steamID], function(error, results) {
  27. if (error) {
  28. return;
  29. }
  30. if (!results[0]) {
  31. self.connection.query("INSERT INTO `bots`(`username`, `steam_id64`) VALUES (?, ?)", [bot.settings.Username, bot.steamClient.steamID]);
  32. }
  33. });
  34. }
  35. self.loadRunningTasks = function() {
  36. self.connection.query("SELECT * FROM running_tasks", function(error, databaseEntries) {
  37. if (error) {
  38. self.emit('error', "Couldn't get running_tasks from the database");
  39. return;
  40. }
  41. for (var i = 0; i < databaseEntries.length; i++) {
  42. self.emit('running_task_found', databaseEntries[i]);
  43. }
  44. });
  45. }
  46. self.checkForBuyingTasks = function() {
  47. var options = {
  48. sql: "SELECT buying_tasks.*, users.id, users.steam_id64, users.steam_tradeofferurl FROM `buying_tasks` INNER JOIN `users` ON buying_tasks.user_id = users.id",
  49. nestTables: true
  50. };
  51. self.connection.query(options, function(error, databaseEntries) {
  52. if (error) {
  53. return;
  54. }
  55. for (var i = 0; i < databaseEntries.length; i++) {
  56. var databaseEntry = databaseEntries[i];
  57. //Checking if the task is already in the system
  58. if (self.knownBuyingTasks[databaseEntry.buying_tasks.id] === undefined) {
  59. //If the task we found is not known yet, alert the main proccess
  60. self.emit('buying_task_found', databaseEntry);
  61. }
  62. }
  63. //Check for buying_tasks again after the actionInterval
  64. setTimeout(function() {
  65. self.checkForBuyingTasks();
  66. }, self.actionInterval);
  67. });
  68. }
  69. self.checkForSellingTasks = function() {
  70. var options = {
  71. sql: "SELECT selling_tasks.id, selling_tasks.value,selling_tasks.order_id, users.id, users.steam_id64, users.steam_tradeofferurl, bot_items.id, bot_items.bot,bot_items.market_name, bot_items.assetid FROM `selling_tasks` INNER JOIN `users` ON selling_tasks.user_id = users.id INNER JOIN `selling_tasks_descriptions` ON selling_tasks_descriptions.selling_task_id = selling_tasks.id INNER JOIN `bot_items` ON selling_tasks_descriptions.bot_items_id = bot_items.id",
  72. nestTables: true
  73. };
  74. self.connection.query(options, function(error, databaseEntries) {
  75. if (error) {
  76. return;
  77. }
  78. var data = []; //May change for a better name
  79. //May be usefull to merge databaseEntries together, according to selling_tasks.id
  80. for (var i = 0; i < databaseEntries.length; i++) {
  81. var databaseEntry = databaseEntries[i];
  82. var entry = null;
  83. for (var j = 0; j < data.length; j++) {
  84. if (databaseEntry.selling_tasks.id === data[j].selling_tasks.id) {
  85. entry = data[j];
  86. break;
  87. }
  88. }
  89. if (entry === null) {
  90. var items = databaseEntry.bot_items;
  91. databaseEntry.bot_items = [];
  92. databaseEntry.bot_items.push(items);
  93. data.push(databaseEntry);
  94. } else {
  95. entry.bot_items.push(databaseEntry.bot_items);
  96. }
  97. }
  98. for (var i = 0; i < data.length; i++) {
  99. var entry = data[i];
  100.  
  101. if (self.knownSellingTasks[entry.selling_tasks.id] === undefined) {
  102. self.emit('selling_task_found', entry);
  103. }
  104. }
  105. //Check for selling_tasks again after the actionInterval
  106. setTimeout(function() {
  107. self.checkForSellingTasks();
  108. }, self.actionInterval);
  109. });
  110. }
  111. self.confirmTransaction = function(task){
  112. if (task.databaseEntry.selling_tasks) {
  113. var order_id = task.databaseEntry.selling_tasks.order_id;
  114. self.connection.query("UPDATE bot_trades SET accepted = NOW() WHERE order_id = ?", [order_id], function() {
  115. self.emit('accepted_timestamp_set', order_id);
  116. });
  117.  
  118. self.connection.query("UPDATE transactions SET status = 'Completed' WHERE order_id = ?",[order_id], function(){
  119. self.emit('transaction_status', order_id);
  120. });
  121. }
  122. }
  123. self.declinedTransaction = function(task){
  124. var order_id = task.databaseEntry.selling_tasks.order_id;
  125. self.connection.query("UPDATE bot_trades set accepted = 'Declined' WHERE order_id = ? ",[order_id], function(){
  126. self.emit('declined_transaction', order_id);
  127.  
  128. });
  129. self.connection.query("UPDATE transactions SET status = 'Declined' WHERE order_id = ?",[order_id], function(){
  130. self.emit('transaction_status', order_id);
  131. });
  132. }
  133.  
  134. self.insertbotTrade = function(task){
  135. if (task.databaseEntry.selling_tasks) {
  136. var order_id = task.databaseEntry.selling_tasks.order_id;
  137. var user_id = task.databaseEntry.users.id;
  138. var item_assets = JSON.stringify(task.databaseEntry.bot_items);
  139. self.connection.query("INSERT INTO bot_trades (order_id, user_id, item_assets, type) VALUES (?, ?, ?, ?)", [order_id,user_id,item_assets,'sell'], function() {
  140. self.emit('Inserted_bot_trade', order_id);
  141. });
  142. }
  143.  
  144. }
  145. self.awardCredits = function(task) {
  146. if (task.databaseEntry.buying_tasks) {
  147. var value = task.databaseEntry.buying_tasks.value;
  148. var user = task.databaseEntry.users.id;
  149. var sql = "UPDATE `users` SET credits = credits + ? WHERE id = ?";
  150. self.emit('user_credits_updated', '+' + value + ' credits for user with id: ' + user);
  151. } else if (task.databaseEntry.selling_tasks) {
  152. var value = task.databaseEntry.selling_tasks.value;
  153. var user = task.databaseEntry.users.id;
  154. var sql = "UPDATE `users` SET credits = credits - ? WHERE id = ?";
  155. self.emit('user_credits_updated', '-' + value + ' credits for user with id: ' + user);
  156. } else {
  157. console.log('something weird happend in database.awardCredits()');
  158. return;
  159. }
  160. self.deleteTask(task);
  161. self.connection.query(sql, [value, user], function (error) {
  162. if (error) {
  163. console.log(error);
  164. return;
  165. }
  166. });
  167. }
  168. self.addNewItems = function(bot, items) {
  169. var botUsername = bot.settings.Username;
  170. for (var i = 0; i < items.length; i++) {
  171. var item = items[i];
  172. self.emit('added_a_new_item', botUsername, item);
  173. var assetId = item.id;
  174. self.connection.query("INSERT INTO `bot_items`(`bot`, `assetid`, `market_name`) VALUES (?,?,?)" , [botUsername, assetId, item.market_name], function(error, results) {
  175. if (error) {
  176. console.log(error);
  177. }
  178. });
  179. }
  180. }
  181. self.removeItem = function(assetid) {
  182. self.connection.query("DELETE FROM `bot_items` WHERE `assetid` = " + assetid);
  183. }
  184. self.removeItems = function(task) {
  185. var items = task.databaseEntry.bot_items;
  186. items.forEach(function(item) {
  187. self.connection.query("DELETE FROM `bot_items` WHERE id = ?", [item.id], function(error) {
  188. if (error) {
  189. return;
  190. }
  191. });
  192. });
  193. }
  194. self.addRunningTask = function(task) {
  195. self.connection.query("INSERT INTO `running_tasks`(`bot_username`, `tradeofferid`, `databaseEntry_json`) VALUES (?, ?, ?)", [task.bot.settings.Username, task.offer.tradeofferid, JSON.stringify(task.databaseEntry)], function(error) {
  196. if (error) {
  197. return;
  198. }
  199. });
  200. }
  201. self.removeRunningTask = function(task) {
  202. self.connection.query("DELETE FROM `running_tasks` WHERE tradeofferid = ?", [task.offer.tradeofferid]);
  203. }
  204. //May be able to make this easier -> see similarity with self.declineTask()
  205. self.deleteTask = function (task) {
  206. self.taskList.removeTask(task);
  207. if (task.databaseEntry.buying_tasks) {
  208. self.connection.query("DELETE FROM `buying_tasks` WHERE id = " + task.databaseEntry.buying_tasks.id, function (error, results, fields) {
  209. if (error) {
  210. return;
  211. }
  212. });
  213. } else if (task.databaseEntry.selling_tasks) {
  214. self.connection.query("DELETE FROM `selling_tasks` WHERE id = " + task.databaseEntry.selling_tasks.id, function (error, results, fields) {
  215. if (error) {
  216. return;
  217. }
  218. });
  219. }
  220.  
  221. }
  222. self.declineTask = function(databaseEntry) {
  223. //TODO: Make entry in the notification table, so the user can see his tradeoffer could not be sent
  224. if (databaseEntry.buying_tasks) {
  225. self.connection.query("DELETE FROM buying_tasks WHERE id = " + databaseEntry.buying_tasks.id, function(error, results, fields) {
  226. if (error) {
  227. return;
  228. }
  229. });
  230. } else if (databaseEntry.selling_tasks) {
  231. self.connection.query("DELETE FROM selling_tasks WHERE id = " + databaseEntry.selling_tasks.id, function(error, results, fields) {
  232. if (error) {
  233. return;
  234. }
  235. });
  236. }
  237. }
  238. self.connection.on('error', function(error) {
  239. self.emit('error', error);
  240. });
  241. }
  242.  
  243. util.inherits(Database, EventEmitter);
  244.  
  245. module.exports = Database;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement