index.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. const express = require('express')
  2. const app = express()
  3. const port = 9700
  4. const web3operatorAddress = "http://vps.playpoolstudios.com:2015/"
  5. const apiAddress = "https://vps.playpoolstudios.com/metahunt/api/"
  6. app.get('/', (req, res) => {
  7. res.send('Validator is validating')
  8. })
  9. app.listen(port, () => {
  10. console.log(`Mhunt Validator is listening on port ${port}`)
  11. })
  12. app.get('/validateSession', async (req,res)=>{
  13. const {tournamentId, address} = req.query;
  14. if(!tournamentId || !address){res.send("invalid params"); return;}
  15. let tournament = GetTournamentById(tournamentId);
  16. if(tournament==null){
  17. await CheckForStartedTourneys();
  18. }
  19. tournament = GetTournamentById(tournamentId);
  20. if(tournament == null){
  21. res.send("This tournament is not either started or valid");
  22. return;
  23. }
  24. })
  25. /* ------------------------------------------------------------------------------- */
  26. let tournamentsList;
  27. let startedTournaments;
  28. CheckForStartedTourneys();
  29. setInterval(async()=>{
  30. CheckForStartedTourneys();
  31. },60000)
  32. async function CheckForStartedTourneys() {
  33. const tournamentsResponse = await fetch(apiAddress + "get_tournaments_raw.php");
  34. const tournaments = await tournamentsResponse.json();
  35. tournamentsList = [];
  36. startedTournaments = [];
  37. const now = new Date();
  38. const tenMinutesAgo = new Date(now.getTime() - 10 * 60000); // 10 minutes ago from now
  39. tournaments.forEach(async tournament => {
  40. const tournamentDate = new Date(tournament.start_date); // Converts the string date to a Date object
  41. // Create a new TournamentData instance using the tournament JSON data
  42. const newTournament = new TournamentData(
  43. tournament.id,
  44. tournament.name,
  45. tournament.start_date,
  46. tournament.game_mode,
  47. tournament.reward,
  48. tournament.php_reward,
  49. tournament.is_test,
  50. tournament.ticket_count,
  51. tournament.owner_id
  52. );
  53. if (tournamentDate >= tenMinutesAgo && tournamentDate <= now) {
  54. console.log(`Tournament "${tournament.name}" started within the last 10 minutes.`);
  55. const participentsResponse = await fetch(web3operatorAddress+"getTournamentParticipants?id="+newTournament.id);
  56. const participents = await participentsResponse.json();
  57. participents["wallets"].forEach(participent => {
  58. newTournament.participents.push(participent);
  59. })
  60. startedTournaments.push(newTournament);
  61. }else if(tournamentDate > now){
  62. console.log(`Tournament "${tournament.name}" is yet to come`)
  63. }else{
  64. // console.log(`Tournament "${tournament.name}" is expired`)
  65. }
  66. // Push the new tournament instance into tournamentsList
  67. tournamentsList.push(newTournament);
  68. });
  69. }
  70. function GetTournamentById(tournamentId){
  71. startedTournaments.forEach(tournament => {
  72. if(tournament.id == tournamentId){
  73. return tournament;
  74. }
  75. })
  76. return null;
  77. }
  78. class TournamentData {
  79. constructor(id, name, start_date, game_mode, reward, php_reward, is_test, ticket_count, owner_id) {
  80. this.id = id;
  81. this.name = name;
  82. this.start_date = start_date;
  83. this.game_mode = game_mode;
  84. this.reward = reward;
  85. this.php_reward = php_reward;
  86. this.is_test = is_test;
  87. this.ticket_count = ticket_count;
  88. this.owner_id = owner_id;
  89. this.participents = [];
  90. }
  91. // Method to display tournament details
  92. displayDetails() {
  93. console.log(`Tournament ID: ${this.id}`);
  94. console.log(`Name: ${this.name}`);
  95. console.log(`Date: ${this.start_date}`);
  96. console.log(`Game Mode: ${this.game_mode}`);
  97. console.log(`Reward: ${this.reward}`);
  98. console.log(`PHP Reward: ${this.php_reward}`);
  99. console.log(`Test Tournament: ${this.is_test ? "Yes" : "No"}`);
  100. console.log(`Ticket Count: ${this.ticket_count}`);
  101. console.log(`Owner ID: ${this.owner_id}`);
  102. }
  103. }