Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var util = require('util');
- var EventEmitter = require('events').EventEmitter;
- var mysql = require('mysql');
- function Database(taskList) {
- var self = this;
- self.actionInterval = 2500;
- self.knownBuyingTasks = [];
- self.knownSellingTasks = [];
- self.taskList = taskList;
- self.connection = mysql.createConnection({
- host : 'localhost',
- user : 'root',
- password: '',
- database: 'csgosupply'
- });
- self.connect = function() {
- self.connection.connect(function (error) {
- if (error) {
- return;
- }
- self.emit('connected', self.connection.threadId);
- });
- }
- self.registerBot = function(bot) {
- self.connection.query("SELECT id FROM bots WHERE steam_id64 = ?", [bot.steamClient.steamID], function(error, results) {
- if (error) {
- return;
- }
- if (!results[0]) {
- self.connection.query("INSERT INTO `bots`(`username`, `steam_id64`) VALUES (?, ?)", [bot.settings.Username, bot.steamClient.steamID]);
- }
- });
- }
- self.loadRunningTasks = function() {
- self.connection.query("SELECT * FROM running_tasks", function(error, databaseEntries) {
- if (error) {
- self.emit('error', "Couldn't get running_tasks from the database");
- return;
- }
- for (var i = 0; i < databaseEntries.length; i++) {
- self.emit('running_task_found', databaseEntries[i]);
- }
- });
- }
- self.checkForBuyingTasks = function() {
- var options = {
- 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",
- nestTables: true
- };
- self.connection.query(options, function(error, databaseEntries) {
- if (error) {
- return;
- }
- for (var i = 0; i < databaseEntries.length; i++) {
- var databaseEntry = databaseEntries[i];
- //Checking if the task is already in the system
- if (self.knownBuyingTasks[databaseEntry.buying_tasks.id] === undefined) {
- //If the task we found is not known yet, alert the main proccess
- self.emit('buying_task_found', databaseEntry);
- }
- }
- //Check for buying_tasks again after the actionInterval
- setTimeout(function() {
- self.checkForBuyingTasks();
- }, self.actionInterval);
- });
- }
- self.checkForSellingTasks = function() {
- var options = {
- 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",
- nestTables: true
- };
- self.connection.query(options, function(error, databaseEntries) {
- if (error) {
- return;
- }
- var data = []; //May change for a better name
- //May be usefull to merge databaseEntries together, according to selling_tasks.id
- for (var i = 0; i < databaseEntries.length; i++) {
- var databaseEntry = databaseEntries[i];
- var entry = null;
- for (var j = 0; j < data.length; j++) {
- if (databaseEntry.selling_tasks.id === data[j].selling_tasks.id) {
- entry = data[j];
- break;
- }
- }
- if (entry === null) {
- var items = databaseEntry.bot_items;
- databaseEntry.bot_items = [];
- databaseEntry.bot_items.push(items);
- data.push(databaseEntry);
- } else {
- entry.bot_items.push(databaseEntry.bot_items);
- }
- }
- for (var i = 0; i < data.length; i++) {
- var entry = data[i];
- if (self.knownSellingTasks[entry.selling_tasks.id] === undefined) {
- self.emit('selling_task_found', entry);
- }
- }
- //Check for selling_tasks again after the actionInterval
- setTimeout(function() {
- self.checkForSellingTasks();
- }, self.actionInterval);
- });
- }
- self.confirmTransaction = function(task){
- if (task.databaseEntry.selling_tasks) {
- var order_id = task.databaseEntry.selling_tasks.order_id;
- self.connection.query("UPDATE bot_trades SET accepted = NOW() WHERE order_id = ?", [order_id], function() {
- self.emit('accepted_timestamp_set', order_id);
- });
- self.connection.query("UPDATE transactions SET status = 'Completed' WHERE order_id = ?",[order_id], function(){
- self.emit('transaction_status', order_id);
- });
- }
- }
- self.declinedTransaction = function(task){
- var order_id = task.databaseEntry.selling_tasks.order_id;
- self.connection.query("UPDATE bot_trades set accepted = 'Declined' WHERE order_id = ? ",[order_id], function(){
- self.emit('declined_transaction', order_id);
- });
- self.connection.query("UPDATE transactions SET status = 'Declined' WHERE order_id = ?",[order_id], function(){
- self.emit('transaction_status', order_id);
- });
- }
- self.insertbotTrade = function(task){
- if (task.databaseEntry.selling_tasks) {
- var order_id = task.databaseEntry.selling_tasks.order_id;
- var user_id = task.databaseEntry.users.id;
- var item_assets = JSON.stringify(task.databaseEntry.bot_items);
- self.connection.query("INSERT INTO bot_trades (order_id, user_id, item_assets, type) VALUES (?, ?, ?, ?)", [order_id,user_id,item_assets,'sell'], function() {
- self.emit('Inserted_bot_trade', order_id);
- });
- }
- }
- self.awardCredits = function(task) {
- if (task.databaseEntry.buying_tasks) {
- var value = task.databaseEntry.buying_tasks.value;
- var user = task.databaseEntry.users.id;
- var sql = "UPDATE `users` SET credits = credits + ? WHERE id = ?";
- self.emit('user_credits_updated', '+' + value + ' credits for user with id: ' + user);
- } else if (task.databaseEntry.selling_tasks) {
- var value = task.databaseEntry.selling_tasks.value;
- var user = task.databaseEntry.users.id;
- var sql = "UPDATE `users` SET credits = credits - ? WHERE id = ?";
- self.emit('user_credits_updated', '-' + value + ' credits for user with id: ' + user);
- } else {
- console.log('something weird happend in database.awardCredits()');
- return;
- }
- self.deleteTask(task);
- self.connection.query(sql, [value, user], function (error) {
- if (error) {
- console.log(error);
- return;
- }
- });
- }
- self.addNewItems = function(bot, items) {
- var botUsername = bot.settings.Username;
- for (var i = 0; i < items.length; i++) {
- var item = items[i];
- self.emit('added_a_new_item', botUsername, item);
- var assetId = item.id;
- self.connection.query("INSERT INTO `bot_items`(`bot`, `assetid`, `market_name`) VALUES (?,?,?)" , [botUsername, assetId, item.market_name], function(error, results) {
- if (error) {
- console.log(error);
- }
- });
- }
- }
- self.removeItem = function(assetid) {
- self.connection.query("DELETE FROM `bot_items` WHERE `assetid` = " + assetid);
- }
- self.removeItems = function(task) {
- var items = task.databaseEntry.bot_items;
- items.forEach(function(item) {
- self.connection.query("DELETE FROM `bot_items` WHERE id = ?", [item.id], function(error) {
- if (error) {
- return;
- }
- });
- });
- }
- self.addRunningTask = function(task) {
- 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) {
- if (error) {
- return;
- }
- });
- }
- self.removeRunningTask = function(task) {
- self.connection.query("DELETE FROM `running_tasks` WHERE tradeofferid = ?", [task.offer.tradeofferid]);
- }
- //May be able to make this easier -> see similarity with self.declineTask()
- self.deleteTask = function (task) {
- self.taskList.removeTask(task);
- if (task.databaseEntry.buying_tasks) {
- self.connection.query("DELETE FROM `buying_tasks` WHERE id = " + task.databaseEntry.buying_tasks.id, function (error, results, fields) {
- if (error) {
- return;
- }
- });
- } else if (task.databaseEntry.selling_tasks) {
- self.connection.query("DELETE FROM `selling_tasks` WHERE id = " + task.databaseEntry.selling_tasks.id, function (error, results, fields) {
- if (error) {
- return;
- }
- });
- }
- }
- self.declineTask = function(databaseEntry) {
- //TODO: Make entry in the notification table, so the user can see his tradeoffer could not be sent
- if (databaseEntry.buying_tasks) {
- self.connection.query("DELETE FROM buying_tasks WHERE id = " + databaseEntry.buying_tasks.id, function(error, results, fields) {
- if (error) {
- return;
- }
- });
- } else if (databaseEntry.selling_tasks) {
- self.connection.query("DELETE FROM selling_tasks WHERE id = " + databaseEntry.selling_tasks.id, function(error, results, fields) {
- if (error) {
- return;
- }
- });
- }
- }
- self.connection.on('error', function(error) {
- self.emit('error', error);
- });
- }
- util.inherits(Database, EventEmitter);
- module.exports = Database;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement