From 2a5761a7a4c5ae4629439ee24131f909168dcac7 Mon Sep 17 00:00:00 2001 From: Sewmina Dilshan Date: Tue, 15 Nov 2022 13:42:16 +0530 Subject: [PATCH] Improvements --- app.js | 76 +++++++++++++++++++++++++++++++++++---------------- settings.json | 4 +-- 2 files changed, 55 insertions(+), 25 deletions(-) diff --git a/app.js b/app.js index de57050..6e19a30 100644 --- a/app.js +++ b/app.js @@ -1,11 +1,13 @@ console.log("Starting Cupid v1") console.log("") const { response } = require('express'); -const { exec } = require('child_process'); +const { exec, execFile } = require('child_process'); +var spawn = require('child_process').spawn; const express = require('express') const app = express() require('./settings')(); const Helpers = require('./helpers'); +const { start } = require('repl'); //Read settings @@ -17,6 +19,14 @@ console.log(settings); var Rooms = []; // Rooms.push({Port:"2002",Players:["Player1","Player2"]}) +app.get('/settings',(req,res)=>{ + if(req.query.password != settings.password){ + res.send("403 Unauthorized") + return; + } + var m_settings = {minimum_players:settings.minimum_players, maximum_players:settings.maximum_players, waiting_time:settings.waiting_time} + res.send(m_settings); +}) app.get('/', (req, res) => { var username = req.query.username ?? ""; @@ -34,6 +44,8 @@ app.get('/', (req, res) => { var myRoomId = -1; var possibleRoomId = -1; var expiredRooms = []; + + //TODO: Make this loop go backwards and remove the extra loop below for (var i = 0; i < Rooms.length; i++) { if(Rooms[i].Players.length >= settings.minimum_players){ @@ -52,7 +64,20 @@ app.get('/', (req, res) => { // console.log("Room " + i + " will be expired in " + expireDate + "-" + Date.now() + "=" + timeToLive); } } + } + //Purge expired rooms + for(var i=expiredRooms.length-1; i>=0; i--){ + Rooms.pop(expiredRooms[i]); + if(possibleRoomId == expiredRooms[i]){ + possibleRoomId =-1; + } + if(myRoomId == expiredRooms[i]){ + myRoomId =-1; + } + } + + for (var i = 0; i < Rooms.length; i++) { if(myRoomId > -1){continue;} if (Rooms[i].Players.indexOf(username) > -1) { myRoomId = i; @@ -64,32 +89,10 @@ app.get('/', (req, res) => { } } - for(var i=expiredRooms.length-1; i>=0; i--){ - Rooms.pop(expiredRooms[i]); - if(possibleRoomId == expiredRooms[i]){ - possibleRoomId =-1; - } - if(myRoomId == expiredRooms[i]){ - myRoomId =-1; - } - } - if (myRoomId == -1) { if (possibleRoomId == -1) { Rooms.push({ Port: Helpers.GetRandomPort(settings.port_range_min, settings.port_range_max), Players: [username], Time: Date.now() }) myRoomId= Rooms.length-1; - - //Spawn server instance - exec(settings.game_exe, (err, stdout, stderr) => { - if (err) { - // node couldn't execute the command - return; - } - - // the *entire* stdout and stderr (buffered) - console.log(`stdout: ${stdout}`); - console.log(`stderr: ${stderr}`); - }); } else { Rooms[possibleRoomId].Players.push(username); } @@ -107,6 +110,33 @@ app.get('/', (req, res) => { if (selectedRoomId > -1) { if (Rooms[selectedRoomId].Players.length >= settings.minimum_players) { res.send("1," + Rooms[selectedRoomId].Port); + //Spawn server instance + var arguments = ["-port", Rooms[selectedRoomId].Port]; + console.log(arguments); + // execFile(settings.game_exe,arguments, {maxBuffer:1024 * 1000}, (err, stdout, stderr) => { + // if (err) { + // // node couldn't execute the command + // console.log(err); + // return; + // } + // console.log("game started correctly?"); + // // the *entire* stdout and stderr (buffered) + // console.log(`stdout: ${stdout}`); + // console.log(`stderr: ${stderr}`); + // }); + var child = spawn(settings.game_exe, arguments); + + child.stdout.on('data', function (data) { + // console.log('stdout: ' + data); + }); + + child.stderr.on('data', function (data) { + console.log('stderr: ' + data); + }); + + child.on('close', function (code) { + console.log('child process exited with code ' + code); + }); } else { res.send("0," + Rooms[selectedRoomId].Port); } diff --git a/settings.json b/settings.json index 9ea71f8..451d735 100644 --- a/settings.json +++ b/settings.json @@ -1,10 +1,10 @@ { "port":1601, "password":"xyz@123", - "game_exe":"/home/game/game.x86_64", + "game_exe":"/root/Unity/CupidSample/Builds/Linux/Cupid.x86_64", "minimum_players": 2, "maximum_players": 5, "waiting_time": 60000, "port_range_min":2000, "port_range_max":3000 -} \ No newline at end of file +}