Advertisement
Guest User

Untitled

a guest
Jul 20th, 2019
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const WebSocket = require('ws');
  2.  
  3. const wss = new WebSocket.Server({ port: 3004 });
  4.  
  5. var RandomOrg = require('random-org');
  6. var mysql = require('mysql');
  7.  
  8. var con = mysql.createConnection({
  9.   host: "185.14.30.21",
  10.   user: "root",
  11.   password: "VuTbmyPkjaPM4BCp",
  12.   database: "wheelbet",
  13. });
  14.  
  15. const _time = 20;
  16.  
  17. var clients = [];
  18. var players = [];
  19.  
  20. var game_started = false;
  21. var timer_started = false;
  22. var round_id = 0;
  23.  
  24. con.query("SELECT count(id) as cnt FROM matches", function (err, res, fields) {
  25.     global.endGames = res[0].cnt;
  26. });
  27. con.query("SELECT max(sum) as val FROM matches WHERE DATE(date) = DATE(NOW())", function (err, res, fields) {
  28.     global.maxWinDay = res[0].val;
  29. });
  30. con.query("SELECT max(sum) as val FROM matches", function (err, res, fields) {
  31.     global.maxMoney = res[0].val;
  32. });
  33.  
  34. function sendRoundInfo(ws) {
  35.     con.query("SELECT id FROM matches where type_id = 1 order by id desc limit 0,1", function (err, last_match, fields) {
  36.  
  37.         if (!game_started)
  38.             round_id = last_match[0].id + 1;
  39.  
  40.         roundInfo = ['roundInfo', {
  41.             'id': round_id,
  42.             'players': players,
  43.             'jackpot': players.reduce(function(p, c) {
  44.                             return p + parseInt(c.status.bet);
  45.                         }, 0),
  46.             'time': 20,
  47.         }];
  48.  
  49.         ws.send(JSON.stringify(roundInfo))
  50.    
  51.     });
  52. }
  53.  
  54. function sendStatToClients() {
  55.     ////console.log('send stat  game.js ' + endGames);
  56.     clients.forEach(function(client) {
  57.         client.send(JSON.stringify({'stats': {
  58.             'online': wss.clients.size,
  59.             'endGames': {val:global.endGames},
  60.             'maxWinDay': {val:global.maxWinDay},
  61.             'maxMoney': {val:global.maxMoney}}
  62.         }));
  63.     });
  64. }
  65.  
  66. wss.on('connection', function connection(ws) {
  67.  
  68.     clients.push(ws);
  69.  
  70.     sendRoundInfo(ws);
  71.  
  72.     clients.forEach(function(client) {
  73.         client.send(JSON.stringify({'stats': {
  74.             'online': wss.clients.size,
  75.             'endGames': '',
  76.             'maxWinDay': '',
  77.             'maxMoney': ''}
  78.         }));
  79.     });
  80.  
  81.     ws.send(JSON.stringify({'stats': {
  82.         'online': wss.clients.size,
  83.         'endGames': {val:global.endGames},
  84.         'maxWinDay': {val:global.maxWinDay},
  85.         'maxMoney': {val:global.maxMoney}}
  86.     }));
  87.  
  88.     ws.on('message', function (msg) {
  89.         var msg = JSON.parse(msg);
  90.  
  91.         switch(msg.event)
  92.         {
  93.             case 'bet':
  94.                 if (game_started) break;
  95.  
  96.                 con.query("SELECT * FROM users where remember_token = ? limit 0,1", [msg.token], function (err, new_player, fields)
  97.                 {
  98.                     if (err) throw err;
  99.  
  100.                     if (new_player[0].balance < parseInt(msg.bet)) {
  101.                         throw err;
  102.                     }
  103.                     var new_balance = new_player[0].balance - parseInt(msg.bet);
  104.  
  105.                     con.query("UPDATE users SET balance = ? where id = ?", [new_balance, new_player[0].id], function (err, result){});
  106.                     var round_bets_sum = msg.bet;
  107.  
  108.                     players.forEach(function(player, index) {
  109.                         round_bets_sum += parseInt(player.status.bet);
  110.  
  111.                         if (player.id == new_player[0].id) {
  112.                             players[index].status.bet += parseInt(msg.bet);
  113.                         }
  114.                     });
  115.  
  116.                     var new_player_tickets_from = 0;
  117.                     var new_player_tickets_to = 0;
  118.  
  119.                     // calc raises
  120.                     if (players.length > 0) {
  121.  
  122.                         var last_player_ticket_to = players[players.length - 1].status.tickets[0][1];
  123.  
  124.                         new_player_tickets_from = parseInt(last_player_ticket_to) + 1;
  125.  
  126.                         new_player_tickets_to = parseInt(last_player_ticket_to) + (msg.bet * 100);
  127.  
  128.                     } else {
  129.                         new_player_tickets_from = 1;
  130.                         new_player_tickets_to = msg.bet*100
  131.                     }
  132.  
  133.                     var new_player_obj = {
  134.                         "id": new_player[0].id,
  135.                         "gid": round_id,
  136.                         "name": new_player[0].fullname,
  137.                         "avatar": new_player[0].avatar,
  138.                         "team": false,
  139.                         "raise": msg.bet / round_bets_sum,
  140.                         "status": {
  141.                             "n": parseInt(players.length),
  142.                             "bet": parseInt(msg.bet),
  143.                             "tickets": [
  144.                                 [
  145.                                     new_player_tickets_from,
  146.                                     new_player_tickets_to
  147.                                 ]
  148.                             ]
  149.                         },
  150.                         "_lastDate": Date.now()
  151.                     }
  152.  
  153.                     var response_player;
  154.                     var player_exists = false;
  155.  
  156.                     // check if is exists user
  157.                     players.forEach(function(player, index) {
  158.  
  159.                         if (player.id == new_player_obj.id) {
  160.                             player_exists = true;
  161.                             response_player = players[index];
  162.                         }
  163.                     });
  164.  
  165.                     // update raises after new bet when timer is started
  166.                     players.forEach(function(player, index) {
  167.                         if (index == 0) {
  168.                             players[index].status.tickets[0][0] = 1;
  169.                             players[index].status.tickets[0][1] = players[index].status.bet*100
  170.  
  171.                         } else {
  172.                             var last_player_ticket_to = players[index - 1].status.tickets[0][1];
  173.  
  174.                             players[index].status.tickets[0][0] = parseInt(last_player_ticket_to) + 1;
  175.  
  176.                             players[index].status.tickets[0][1] = parseInt(last_player_ticket_to) + (players[index].status.bet * 100);
  177.                         }
  178.  
  179.                     });
  180.  
  181.                     if (!player_exists) {
  182.                         players.push(new_player_obj);
  183.                         response_player = new_player_obj;
  184.                     }
  185.  
  186.                     var bet = ['bet', {
  187.                         "date": Date.now(),
  188.                         "round": {
  189.                             "id": round_id,
  190.                             "time": _time,
  191.                             "timer": (players.length > 1)  ? true : false
  192.                         },
  193.                         "player": response_player,
  194.                     }];
  195.  
  196.                     clients.forEach(function(client) {
  197.                         client.send(JSON.stringify(bet));
  198.                     });
  199.  
  200.                 //console.log(players.length)
  201.  
  202.                 if (players.length > 1 && !timer_started) {
  203.  
  204.                     timer_started = true;
  205.  
  206.                     setTimeout(function() {
  207.  
  208.                         game_started = true;
  209.  
  210.                         var random = new RandomOrg({
  211.                             apiKey: '0f25fbe9-279e-4ac2-a1ff-6e5b7f2bf885',
  212.                             hashedApiKey: 'RIsHTjoCLnlNF6lXi9hXjyB+ABn/xp4kv+D4WkGV1WQFgDsgZuVoWazVgPgwvN8PaI1l0mlymS+5hIMKmSBaJg=='
  213.                         });
  214.  
  215.                         random
  216.                         .generateSignedIntegers({ min: 1, max: players[players.length - 1].status.tickets[0][1], n: 1 })
  217.                         .then(function(result) {
  218.  
  219.                             var winner_index = 0;
  220.                             var win_ticket = result.random.data[0];
  221.  
  222.                             players.forEach(function(player, index) {
  223.                                 if (win_ticket >= player.status.tickets[0][0] && win_ticket <= player.status.tickets[0][1])
  224.                                 {
  225.                                     winner_index = index;
  226.                                 }
  227.                             });
  228.  
  229.                             var jackpot = players.reduce(function(p, c) {
  230.                                                 return p + parseInt(c.status.bet);
  231.                                             }, 0);
  232.  
  233.                             var gid = round_id;
  234.  
  235.                             // add row to db
  236.                             var sql = "INSERT INTO matches (type_id, sum, win_user_id, win_ticket, date) VALUES ?";
  237.                             var date = new Date().toISOString().slice(0, 19).replace('T', ' ');
  238.                             var values = [
  239.                                 ['1', jackpot, players[winner_index].id, win_ticket, date],
  240.                             ];
  241.                             con.query(sql, [values], function (err,result){
  242.                                 gid = result.insertId;
  243.                             });
  244.  
  245.                             global.endGames = gid;
  246.  
  247.                             gid = gid + 1;
  248.  
  249.                             var winner = ['winner', {
  250.                                 "random": {
  251.                                     "num": win_ticket,
  252.                                     "random": result.random,
  253.                                     "signature": result.signature
  254.                                 },
  255.                                 "round": {
  256.                                     "id": round_id,
  257.                                     "gid": gid
  258.                                 },
  259.                                 "player": {
  260.                                     "n": winner_index,
  261.                                     "id": players[winner_index].id,
  262.                                     "avatar": players[winner_index].avatar,
  263.                                     "name": players[winner_index].name,
  264.                                     "money": players[winner_index].status.bet,
  265.                                     "jackpot": jackpot,
  266.                                 }
  267.                             }];
  268.  
  269.                             setTimeout(function() {
  270.  
  271.                                 con.query("UPDATE users SET balance = balance + ? where id = ?", [jackpot, players[winner_index].id], function (){});
  272.  
  273.                                 clients.forEach(function(client) {
  274.                                     client.send(JSON.stringify(winner));
  275.                                 });
  276.                            
  277.                                 players = []
  278.                                 game_started = false
  279.                                 timer_started = false
  280.  
  281.                                 sendStatToClients()
  282.                                
  283.                             }, (_time-5)*1000);
  284.  
  285.                         });
  286.                     },(_time-5)*1000);
  287.                 }
  288.                 });
  289.  
  290.             default:
  291.                 ////console.log ('unknown event:', msg.event)
  292.                 break;
  293.         }
  294.     });
  295.  
  296.  
  297.     ws.on('close', function() {
  298.  
  299.     });
  300.  
  301. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement