Advertisement
Guest User

Untitled

a guest
May 6th, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.91 KB | None | 0 0
  1. var mysql = require('mysql');
  2. var log4js = require('log4js');
  3. var io = require('socket.io')(8000);
  4. var request = require('request');
  5. var fs = require('fs');
  6. var md5 = require('md5');
  7. var sha256 = require('sha256');
  8. var math = require('mathjs');
  9. var dateFormat = require('dateformat');
  10. var groupArray = require('group-array');
  11. var arrayQuery = require('array-query');
  12.  
  13. log4js.configure({
  14. appenders: [
  15. { type: 'console' },
  16. { type: 'file', filename: 'logs/site.log' }
  17. ]
  18. });
  19. var logger = log4js.getLogger();
  20.  
  21. var pool = mysql.createPool({
  22. connectionLimit : 10,
  23. database: '',
  24. host: '',
  25. user: '',
  26. password: ''
  27. });
  28.  
  29. process.on('uncaughtException', function (err) {
  30. logger.trace('Strange error');
  31. logger.debug(err);
  32. });
  33.  
  34. /* */
  35. var accept = 30;
  36. var wait = 10;
  37. var br = 3;
  38. var chat = 2;
  39. var chatb = 2000000;
  40. var maxbet = 5000000;
  41. var minbet = 10;
  42. var q1 = 2;
  43. var q2 = 20;
  44. var timer = -1;
  45. var users = [];
  46. var roll = 0;
  47. var currentBets = [];
  48. var historyRolls = [];
  49. var usersBr = {};
  50. var usersAmount = {};
  51. var currentSums = {
  52. '0-0': 0,
  53. '1-7': 0,
  54. '8-14': 0
  55. };
  56. var currentBetNums = {
  57. '0-0': 0,
  58. '1-7': 0,
  59. '8-14': 0
  60. };
  61. var currentRollid = 0;
  62. var pause = false;
  63. var hash = '';
  64. var last_message = {};
  65.  
  66. load();
  67.  
  68.  
  69. var prices;
  70. request('https://api.csgofast.com/price/all', function(error, response, body) {
  71.  
  72. prices = JSON.parse(body);
  73. if(prices == 0) {
  74. logger.warn('Could not load prices. Loaded from cache.');
  75. if(fs.existsSync(__dirname + '/prices.txt')){
  76. prices = JSON.parse(fs.readFileSync(__dirname + '/prices.txt'));
  77. logger.warn('Prices loaded from cache');
  78. } else {
  79. logger.error('Could not cache prices');
  80. process.exit(0);
  81. }
  82. if(fs.existsSync(__dirname + '/prices.txt')){
  83. prices = JSON.parse(fs.readFileSync(__dirname + '/prices.txt'));
  84. logger.warn('/var/www/prices.txt loaded cached');
  85. } else {
  86. logger.error('No cached /var/www/prices.txt');
  87. process.exit(0);
  88. }
  89. } else {
  90. fs.writeFileSync('prices.txt', body);
  91. logger.trace('Prices loaded successfully');
  92. }
  93. });
  94.  
  95. function isInt(value) {
  96. return !isNaN(value) &&
  97. parseInt(Number(value)) == value &&
  98. !isNaN(parseInt(value, 10));
  99. }
  100.  
  101. updateHash();
  102. function updateHash() {
  103. query('SELECT * FROM `hash` ORDER BY `id` DESC LIMIT 1', function(err, row) {
  104. if(err) {
  105. logger.error('Cant get the hash, stopping');
  106. logger.debug(err);
  107. process.exit(0);
  108. return;
  109. }
  110. if(row.length == 0) {
  111. logger.error('Wrong hash found, stopping');
  112. process.exit(0);
  113. } else {
  114. if(hash != row[0].hash) logger.warn('Loaded hash' + row[0].hash);
  115. hash = row[0].hash;
  116. }
  117. });
  118. }
  119.  
  120. io.on('connection', function(socket) {
  121. var user = false;
  122. socket.on('steamid', function(steamid) {
  123. if(currentBets){
  124. var stats = groupArray(currentBets, 'upper');
  125. }
  126. query('SELECT * FROM `users` WHERE `steamid` = ' + pool.escape(steamid), function(err, row) {
  127. if((err) || (!row.length)) return socket.disconnect();
  128. user = row[0];
  129. users[user.steamid] = {
  130. socket: socket.id,
  131. balance: parseInt(row[0].balance)
  132. }
  133. socket.emit('message', {
  134. accept: accept,
  135. balance: row[0].balance,
  136. br: br,
  137. chat: chat,
  138. chatb: chatb,
  139. count: timer-wait,
  140. icon: row[0].avatar,
  141. maxbet: maxbet,
  142. minbet: minbet,
  143. name: row[0].name,
  144. rank: row[0].rank,
  145. rolls: historyRolls,
  146. type: 'hello',
  147. user: row[0].steamid
  148. });
  149. socket.emit('message', {
  150. type: 'logins',
  151. count: Object.size(io.sockets.connected)
  152. });
  153. currentBets.forEach(function(itm) {
  154. socket.emit('message', {
  155. type: 'bet',
  156. bet: {
  157. amount: itm.amount,
  158. betid: itm.betid,
  159. icon: itm.icon,
  160. lower: itm.lower,
  161. name: itm.name,
  162. rollid: itm.rollid,
  163. upper: itm.upper,
  164. user: itm.user,
  165. won: null
  166. },
  167. sums: {
  168. 0: currentSums['0-0'],
  169. 1: currentSums['1-7'],
  170. 2: currentSums['8-14'],
  171. },
  172. stats: {
  173. 0: currentBetNums['0-0'],
  174. 1: currentBetNums['1-7'],
  175. 2: currentBetNums['8-14'],
  176. }
  177. });
  178. });
  179. });
  180. });
  181. socket.on('mes', function(m) {
  182. if(!user) return;
  183. logger.debug(m);
  184. if(m.type == "bet"){ return setBet(m, user, socket)};
  185. if(m.type == "balance") return getBalance(user, socket);
  186. if(m.type == "chat") return ch(m, user, socket);
  187. if(m.type == "allmessages") return getAllMessages(socket);
  188. });
  189. socket.on('disconnect', function() {
  190. io.sockets.emit('message', {
  191. type: 'logins',
  192. count: Object.size(io.sockets.connected)
  193. });
  194. delete users[user.steamid];
  195. })
  196. });
  197. /*function plus(user, socket) {
  198. query('SELECT * FROM `users` WHERE `steamid` = '+pool.escape(user.steamid), function(err, row) {
  199. if(err) return;
  200. if(time() > row[0].plus) {
  201. query('UPDATE `users` SET `plus` = '+pool.escape(time()+10*60)+', `balance` = `balance` + 1 WHERE `steamid` = '+user.steamid);
  202. socket.emit('message', {
  203. type: 'alert',
  204. alert: 'Confirmed'
  205. });
  206. getBalance(user, socket);
  207. } else {
  208. socket.emit('message', {
  209. type: 'alert',
  210. alert: 'You have '+(row[0].plus-time())+' to accept'
  211. });
  212. }
  213. });
  214. }*/
  215.  
  216. function ch(m, user, socket) {
  217. if(m.msg) {
  218. if(last_message[user.steamid]+1 >= time()) {
  219. console.log('Too fast');
  220. return;
  221. } else {
  222. last_message[user.steamid] = time();
  223. }
  224. var res = null;
  225. if (res = /^\/send ([0-9]*) ([0-9]*)/.exec(m.msg)) {
  226. logger.trace('We need to send coins from '+res[2]+' to '+res[1]);
  227. query('SELECT `gambled`,`balance` FROM `users` WHERE `steamid` = '+pool.escape(user.steamid), function(err, row) {
  228. if((err) || (!row.length)) {
  229. logger.error('Could not find user to send the coins');
  230. logger.debug(err);
  231. socket.emit('message', {
  232. type: 'error',
  233. enable: false,
  234. error: 'That user does not exist in our database.'
  235. });
  236. return;
  237. }
  238.  
  239. if(row[0].gambled < 50000)
  240. {
  241. socket.emit('message', {
  242. type: 'error',
  243. enable: false,
  244. error: 'You need to bet at least 50,000 times to send coins.'
  245. });
  246. }
  247. else if(row[0].balance < res[2]) {
  248. socket.emit('message', {
  249. type: 'error',
  250. enable: false,
  251. error: 'Insufficient funds.'
  252. });
  253. } else if(res[2] <= 0) {
  254. socket.emit('message', {
  255. type: 'error',
  256. enable: false,
  257. error: 'Amount must be greater than 0.'
  258. });
  259. } else if(user.steamid == res[1]){
  260. socket.emit('message', {
  261. type: 'error',
  262. enable: false,
  263. error: 'You can not send coins to yourself.'
  264. });
  265. } else {
  266. query('SELECT `name` FROM `users` WHERE `steamid` = '+pool.escape(res[1]), function(err2, row2) {
  267. if((err2) || (!row2.length)) {
  268. logger.error('Failed to get the STEAMID');
  269. logger.debug(err);
  270. socket.emit('message', {
  271. type: 'error',
  272. enable: false,
  273. error: 'Unknown receiver.'
  274. });
  275. return;
  276. } elseif()
  277. query('UPDATE `users` SET `balance` = `balance` - '+res[2]+' WHERE `steamid` = '+pool.escape(user.steamid));
  278. query('UPDATE `users` SET `balance` = `balance` + '+res[2]+' WHERE `steamid` = '+pool.escape(res[1]));
  279. query('INSERT INTO `transfers` SET `from1` = '+pool.escape(user.steamid)+', `to1` = '+pool.escape(res[1])+', `amount` = '+pool.escape(res[2])+', `time` = '+pool.escape(time()));
  280. socket.emit('message', {
  281. type: 'alert',
  282. alert: 'You sent '+res[2]+' coins to '+row2[0].name+'.'
  283. });
  284. getBalance(user, socket);
  285. });
  286. }
  287. });
  288. } else if (res = /^\/mute ([0-9]*) ([0-9]*)/.exec(m.msg)) {
  289. if(user.rank > 0) {
  290. var t = time();
  291. query('UPDATE `users` SET `mute` = '+pool.escape(parseInt(t)+parseInt(res[2]))+' WHERE `steamid` = '+pool.escape(res[1]));
  292. socket.emit('message', {
  293. type: 'alert',
  294. alert: 'You mute '+res[1]+' to '+res[2]
  295. });
  296. }
  297. } else if (res = /^\/delete ([0-9]*)/.exec(m.msg)) {
  298. if(user.rank > 0) {
  299. query('DELETE FROM `messages` WHERE `id` = '+pool.escape(res[1]));
  300. io.sockets.emit('message', {
  301. type: 'messagedeleted',
  302. id: res[1]
  303. });
  304. }
  305. } else {
  306.  
  307. query('SELECT `gambled`, `mute` FROM `users` WHERE `steamid` = '+pool.escape(user.steamid), function(err, row) {
  308. if(err) return;
  309. if(row[0].mute > time()) {
  310. socket.emit('message', {
  311. type: 'alert',
  312. alert: 'You are muted!'
  313. });
  314. return;
  315. }
  316.  
  317. if(row[0].gambled < 50000)
  318. {
  319. socket.emit('message', {
  320. type: 'error',
  321. enable: false,
  322. error: 'You need to wagered at least 50,000 to type in chat.'
  323. });
  324. return;
  325. }
  326.  
  327. query('INSERT INTO `messages` SET `message`='+pool.escape(safe_tags_replace(m.msg))+', `user`='+pool.escape(user.steamid)+', `time`='+pool.escape(time()));
  328. io.sockets.emit('message', {
  329. type: 'chat',
  330. msg: safe_tags_replace(m.msg),
  331. name: user.name,
  332. icon: user.avatar,
  333. user: user.steamid,
  334. rank: user.rank,
  335. lang: m.lang,
  336. hide: m.hide
  337. });
  338. });
  339. }
  340. }
  341. }
  342.  
  343. function getAllMessages(socket){
  344. query('SELECT m.id, m.message, m.time, u.name, u.avatar, u.rank, u.steamid FROM messages AS m INNER JOIN users AS u ON m.user = u.steamid ORDER BY m.id DESC LIMIT 20', function(err, row) {
  345. if((err) || (!row.length)) {
  346. socket.emit('message', {
  347. type: 'error',
  348. enable: false,
  349. error: 'There are no messages in this chat.'
  350. });
  351. return;
  352. }
  353. socket.emit('message', {
  354. type: 'allmessages',
  355. messages: row
  356. });
  357. });
  358. }
  359.  
  360. function getBalance(user, socket) {
  361. query('SELECT `balance` FROM `users` WHERE `steamid` = '+pool.escape(user.steamid), function(err, row) {
  362. if((err) || (!row.length)) {
  363. logger.error('Failed to load your balance');
  364. logger.debug(err);
  365. socket.emit('message', {
  366. type: 'error',
  367. enable: true,
  368. error: 'Error: You are not DB.'
  369. });
  370. return;
  371. }
  372. socket.emit('message', {
  373. type: 'balance',
  374. balance: row[0].balance
  375. });
  376. if(user.steamid) users[user.steamid].balance = parseInt(row[0].balance);
  377. })
  378. }
  379.  
  380. function setBet(m, user, socket) {
  381. var isnum = /^\d+$/.test(m.amount);
  382.  
  383. m.amount = parseInt(m.amount);
  384.  
  385. if(!isnum){
  386. socket.emit('message', {
  387. type: 'error',
  388. enable: true,
  389. error: 'Bet has to be numeric!'
  390. });
  391. return;
  392. }
  393.  
  394. if(!isInt(m.amount)){
  395. socket.emit('message', {
  396. type: 'error',
  397. enable: true,
  398. error: 'Bet has to be a valid integer!'
  399. });
  400. return;
  401. }
  402.  
  403. if((usersBr[user.steamid] !== undefined) && (usersBr[user.steamid] == br)) {
  404. socket.emit('message', {
  405. type: 'error',
  406. enable: true,
  407. error: 'You\'ve already placed '+usersBr[user.steamid]+'/'+br+' bets this roll.'
  408. });
  409. return;
  410. }
  411. if((m.amount < minbet) || (m.amount > maxbet)) {
  412. socket.emit('message', {
  413. type: 'error',
  414. enable: true,
  415. error: 'Invalid bet amount.'
  416.  
  417. });
  418. return;
  419. }
  420. if(pause) {
  421. socket.emit('message', {
  422. type: 'error',
  423. enable: false,
  424. error: 'Betting for this round is closed.'
  425. });
  426. return;
  427. }
  428. var start_time = new Date();
  429. query('SELECT `balance` FROM `users` WHERE `steamid` = '+pool.escape(user.steamid), function(err, row) {
  430. if((err) || (!row.length)) {
  431. logger.error('Failed to find DB');
  432. logger.debug(err);
  433. socket.emit('message', {
  434. type: 'error',
  435. enable: true,
  436. error: 'You are not DB'
  437. });
  438. return;
  439. }
  440. if(row[0].balance >= m.amount) {
  441. query('UPDATE `users` SET `balance` = `balance` - '+parseInt(m.amount)+', `gambled` = `gambled` + '+parseInt(m.amount)+', `available` = `available` + '+parseInt(m.amount)+' WHERE `steamid` = '+pool.escape(user.steamid), function(err2, row2) {
  442. if(err2) {
  443. logger.error('Error in withdraw');
  444. logger.debug(err);
  445. socket.emit('message', {
  446. type: 'error',
  447. enable: true,
  448. error: 'You dont have enough points'
  449. });
  450. return;
  451. }
  452. query('INSERT INTO `bets` SET `user` = '+pool.escape(user.steamid)+', `amount` = '+pool.escape(m.amount)+', `lower` = '+pool.escape(m.lower)+', `upper` = '+pool.escape(m.upper)+', `time` = '+time(), function(err3, row3) {
  453. if(err3) {
  454. logger.error('');
  455. logger.debug(err);
  456. return;
  457. }
  458. var end = new Date();
  459. if(usersBr[user.steamid] === undefined) {
  460. usersBr[user.steamid] = 1;
  461. } else {
  462. usersBr[user.steamid]++;
  463. }
  464. if(usersAmount[user.steamid] === undefined) {
  465. usersAmount[user.steamid] = {
  466. '0-0': 0,
  467. '1-7': 0,
  468. '8-14': 0
  469. };
  470. }
  471. usersAmount[user.steamid][m.lower+'-'+m.upper] += parseInt(m.amount);
  472. currentSums[m.lower+'-'+m.upper] += m.amount;
  473. currentBetNums[m.lower+'-'+m.upper]++;
  474. socket.emit('message', {
  475. type: 'betconfirm',
  476. bet: {
  477. betid: row3.insertId,
  478. lower: m.lower,
  479. upper: m.upper,
  480. amount: usersAmount[user.steamid][m.lower+'-'+m.upper]
  481. },
  482. balance: row[0].balance-m.amount,
  483. mybr: usersBr[user.steamid],
  484. br: br,
  485. exec: (end.getTime()-start_time.getTime()).toFixed(3)
  486. });
  487. users[user.steamid].balance = row[0].balance-m.amount;
  488. logger.debug("betted");
  489. io.sockets.emit('message', {
  490. type: 'bet',
  491. bet: {
  492. amount: usersAmount[user.steamid][m.lower+'-'+m.upper],
  493. betid: row3.insertId,
  494. icon: user.avatar,
  495. lower: m.lower,
  496. name: user.name,
  497. rollid: currentRollid,
  498. upper: m.upper,
  499. user: user.steamid,
  500. won: null
  501. },
  502. sums: {
  503. 0: currentSums['0-0'],
  504. 1: currentSums['1-7'],
  505. 2: currentSums['8-14'],
  506. },
  507. stats: {
  508. 0: currentBetNums['0-0'],
  509. 1: currentBetNums['1-7'],
  510. 2: currentBetNums['8-14'],
  511. }
  512. });
  513. currentBets.push({
  514. amount: m.amount,
  515. betid: row3.insertId,
  516. icon: user.avatar,
  517. lower: m.lower,
  518. name: user.name,
  519. rollid: currentRollid,
  520. upper: m.upper,
  521. user: user.steamid,
  522. });
  523. logger.debug('Bet #'+row3.insertId+' Ammount: '+m.amount);
  524. checkTimer();
  525. })
  526. });
  527. } else {
  528. socket.emit('message', {
  529. type: 'error',
  530. enable: true,
  531. error: 'You dont have any money'
  532. });
  533. }
  534. });
  535. }
  536.  
  537. function checkTimer() {
  538. if((currentBets.length > 0) && (timer == -1) && (!pause)) {
  539. logger.trace('Timer starting');
  540. timer = accept+wait;
  541. timerID = setInterval(function() {
  542. logger.trace('Timer: '+timer+' Site timer: '+(timer-wait));
  543. if (timer == wait) {
  544. pause = true;
  545. logger.trace('Pause included');
  546. var inprog = getRandomInt(0, (currentBets.length/4).toFixed(0));
  547. io.sockets.emit('message', {
  548. type: 'preroll',
  549. totalbets: currentBets.length-inprog,
  550. inprog: inprog,
  551. sums: {
  552. 0: currentSums['0-0'],
  553. 1: currentSums['1-7'],
  554. 2: currentSums['8-14'],
  555. }
  556. });
  557. }
  558. if (timer == wait-2) {
  559. logger.trace('Timer: ');
  560. toWin();
  561. }
  562. if(timer == 0) {
  563. logger.trace('Reset');
  564. timer = accept+wait;
  565. currentBets = [];
  566. historyRolls.push({id: currentRollid, roll: roll});
  567. if(historyRolls.length > 10) historyRolls.slice(1);
  568. usersBr = {};
  569. usersAmount = {};
  570. currentSums = {
  571. '0-0': 0,
  572. '1-7': 0,
  573. '8-14': 0
  574. };
  575. currentBetNums = {
  576. '0-0': 0,
  577. '1-7': 0,
  578. '8-14': 0
  579. };
  580. currentRollid = currentRollid+1;
  581. pause = false;
  582. }
  583. timer--;
  584. }, 1000);
  585. }
  586. }
  587.  
  588. function toWin() {
  589. var sh = sha256(hash+'-'+currentRollid);
  590. roll = sh.substr(0, 8);
  591. roll = parseInt(roll, 16);
  592. roll = math.abs(roll) % 21;
  593. logger.trace('Rolled '+roll);
  594. var r = '';
  595. var s = q1;
  596. var wins = {
  597. '0-0': 0,
  598. '1-7': 0,
  599. '8-14': 0
  600. }
  601. if(roll >= 8 && roll <= 10) roll = Math.floor(Math.random() * 7) + 1;
  602. if(roll >= 15 && roll <= 20) roll = Math.floor(Math.random() * 5) + 8;
  603.  
  604. if(roll == 0) { r = '0-0'; s = q2; wins['0-0'] = currentSums['0-0']*s; }
  605. if((roll > 0) && (roll < 8)) {r = '1-7'; wins['1-7'] = currentSums['1-7']*s; }
  606. if((roll > 7) && (roll < 15)) {r = '8-14'; wins['8-14'] = currentSums['8-14']*s; }
  607.  
  608. logger.debug(currentBets);
  609. logger.debug(usersBr);
  610. logger.debug(usersAmount);
  611. logger.debug(currentSums);
  612. for(key in users) {
  613. if(usersAmount[key] === undefined) {
  614. var balance = null;
  615. var won = 0;
  616. } else {
  617. var balance = parseInt(users[key].balance)+usersAmount[key][r]*s;
  618. var won = usersAmount[key][r]*s;
  619. }
  620. if (io.sockets.connected[users[key].socket]) io.sockets.connected[users[key].socket].emit('message', {
  621. balance: balance,
  622. count: accept,
  623. nets: [{
  624. lower: 0,
  625. samount: currentSums['0-0'],
  626. swon: wins['0-0'],
  627. upper: 0
  628. }, {
  629. lower: 1,
  630. samount: currentSums['1-7'],
  631. swon: wins['1-7'],
  632. upper: 7
  633. }, {
  634. lower: 8,
  635. samount: currentSums['8-14'],
  636. swon: wins['8-14'],
  637. upper: 14
  638. }
  639. ],
  640. roll: roll,
  641. rollid: currentRollid+1,
  642. type: "roll",
  643. wait: wait-2,
  644. wobble: getRandomArbitary(0, 1),
  645. won: won
  646. });
  647. }
  648. currentBets.forEach(function(itm) {
  649. if((roll >= itm.lower) && (roll <= itm.upper)) {
  650. logger.debug('Rate #'+itm.betid+' sum '+itm.amount+' win '+(itm.amount*s));
  651. query('UPDATE `users` SET `balance` = `balance` + '+itm.amount*s+', `available` = `available` + '+itm.amount*(s/2)+' WHERE `steamid` = '+pool.escape(itm.user));
  652. }
  653. });
  654. query('UPDATE `rolls` SET `roll` = '+pool.escape(roll)+', `hash` = '+pool.escape(hash)+', `time` = '+pool.escape(time())+' WHERE `id` = '+pool.escape(currentRollid));
  655. query('INSERT INTO `rolls` SET `roll` = -1');
  656. updateHash();
  657. }
  658.  
  659. var tagsToReplace = {
  660. '&': '&amp;',
  661. '<': '&lt;',
  662. '>': '&gt;'
  663. };
  664.  
  665. function replaceTag(tag) {
  666. return tagsToReplace[tag] || tag;
  667. }
  668.  
  669. function safe_tags_replace(str) {
  670. return str.replace(/[&<>]/g, replaceTag);
  671. }
  672. Object.size = function(obj) {
  673. var size = 0,
  674. key;
  675. for (key in obj) {
  676. if (obj.hasOwnProperty(key)) size++;
  677. }
  678. return size;
  679. };
  680. function getRandomInt(min, max) {
  681. return Math.floor(Math.random() * (max - min + 1)) + min;
  682. }
  683. function getRandomArbitary(min, max) {
  684. return Math.random() * (max - min) + min;
  685. }
  686.  
  687. function query(sql, callback) {
  688. if (typeof callback === 'undefined') {
  689. callback = function() {};
  690. }
  691. pool.getConnection(function(err, connection) {
  692. if(err) return callback(err);
  693. logger.info('DB Connection ID: '+connection.threadId);
  694. connection.query(sql, function(err, rows) {
  695. if(err) return callback(err);
  696. connection.release();
  697. return callback(null, rows);
  698. });
  699. });
  700. }
  701. function load() {
  702. query('SET NAMES utf8');
  703. query('SELECT `id` FROM `rolls` ORDER BY `id` DESC LIMIT 1', function(err, row) {
  704. if((err) || (!row.length)) {
  705. logger.error('Cant get number from the last game');
  706. logger.debug(err);
  707. process.exit(0);
  708. return;
  709. }
  710. currentRollid = row[0].id;
  711. logger.trace('Roll '+currentRollid);
  712. });
  713. loadHistory();
  714. setTimeout(function() { io.listen(8080); }, 3000);
  715. }
  716. function loadHistory() {
  717. query('SELECT * FROM `rolls` ORDER BY `id` LIMIT 10', function(err, row) {
  718. if(err) {
  719. logger.error('Cant load betting history');
  720. logger.debug(err);
  721. process.exit(0);
  722. }
  723. logger.trace('Sucesfully updated history');
  724. row.forEach(function(itm) {
  725. if(itm.roll != -1) historyRolls.push(itm);
  726. });
  727. });
  728. }
  729.  
  730. function time() {
  731. return parseInt(new Date().getTime()/1000)
  732. }
  733.  
  734. function timestampToDate(unix_timestamp){
  735. var formatted = dateFormat(unix_timestamp ,"dd.mm.yyyy hh:MM:ss");
  736.  
  737. return formatted;
  738. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement