Reputation: 63
I am working on IO project and I am having issue, when I am trying to do multiple mysql queries under one funtionality.
When match win Calculations are happening Mysql selects just does not happen and error is being thrown that winner object is missing.
I have tried to resolve this in multiple ways: 1) When I tried to nest second select query under first select query result functionality - It did throw Mysql error
Error: Cannot enqueue Quit after invoking quit.
2) I tried to remove all conenction.end() and leave just one at the end of calcualtion functionality. -> It resulted in
Cannot enqueue Query after invoking quit.
Does anyone have any tips how to adjust code in manner, where I can have queries nested one after another, I believe that I have missed some minor detail.
if(data.gameStatus == 'calculation'){
//winner data
mysqlConnect();
connection.query('SELECT * FROM users where username = "'+data.winnerData.username+'"', function(err, result){
if(err){
getDateTimeNow();
console.log(err);
console.log(datetime+' Error occured while calculating game score for'+ data.winnerData.username);
console.log('============================================================');
}
else{
winner = result;
}
});
//loser data
connection.query('SELECT * FROM users where username = "'+data.winnerData.username+'"', function(err, result){
if(err){
getDateTimeNow();
console.log(err);
console.log(datetime+' Error occured while calculating game score for'+ data.loserData.username);
console.log('============================================================');
}
else{
loser = result;
}
});
// rank calculations
var gameTime = data.gameTime;
var winnerPointsBefore = winner[0].points;
var winnerRank = winner[0].rank;
var winnerDefuses = data.winnerData.minesDefused;
var winnerFlags = data.winnerData.fieldsFlagged;
var winnerId = winner[0].id;
var winnerUsername = winner[0].username;
var winnerGamesWon = winner[0].games_won;
var winnerGamesLost = winner[0].games_lost;
var winnerCoins = winner[0].coins;
var timeBonus = 0;
var rankPointAfterModifier = 0;
var loserRank = loser[0].rank;
var loserPointsBefore = loser[0].points;
var loserDefuses = data.losetData.minesDefused;
var loserFlags = data.loserData.fieldsFlagged;
var loserId = loser[0].id;
var loserUsername = loser[0].username;
var loserGamesWon = loser[0].games_won;
var loserGamesLost = loser[0].games_lost;
var loserCoins = loser[0].coins;
if(winnerPointsBefore - loserPointsAfter > 700){
//If pro is facing noob which is 1.5 rank bellow he cannot gain more or less than 15 point
rankPointAfterModifier = 15;
}else{
if(winnerDefuses == 10 && winnerFlags >= winnerDefuses){
//Game won by defusing all mines -> time bonus calculations depending on rank
timeBonus = 70 - 10*winnerRank - gameTime;
if(loserFlags > loserDefuses){
loserFalseFlags = loserFlags - loserDefuses;
opponentPointReduction = 5 * (loserDefuses - loserFalseFlags);
if(opponentPointReduction < 0) {
opponentPointReduction = 0;
}
}else{
opponentPointReduction = 5 * loserDefuses;
}
pointsGained = (winnerDefuses * 5) - opponentPointReduction + timeBonus;
}else{
//Game won by opponent exploding(retard lose scenario)
if(loserFlags > loserDefuses){
loserFalseFlags = loserFlags - loserDefuses;
opponentPointReduction = 5 * (loserDefuses - loserFalseFlags);
if(opponentPointReduction < 0) {
opponentPointReduction = 0;
}
}else{
opponentPointReduction = 5 * loserDefuses;
}
pointsGained = 5 * (winnerDefuses * (winnerFlags / winnerDefuses)) - opponentPointReduction;
}
if(winnerRank != loserRank){
rankPointAfterModifier = -0.2 * (winnerRank-loserRank) * pointsGained;
}
else{
rankPointAfterModifier = pointsGained;
}
}
winnerCoinsEarned = Math.floor(rankPointAfterModifier / 2);
loserCoinsEarned = Math.floor(rankPointAfterModifier / 5);
winnerPointsAfter = winnerPointsBefore + rankPointAfterModifier;
loserPointsAfter = loserPointsBefore - rankPointAfterModifier;
// Register game data in sql
var gameLog = {
winner_id: winnerId,
loser_id: loserId,
winner_name: winnerUsername,
loser_name: loserUsername,
winner_defuses: winnerDefuses,
winner_flagged: winnerFlags,
loser_defuses: loserDefuses,
loser_flagged: loserFlags,
game_time: gameTime,
rank_exchanged: rankPointAfterModifier,
winner_coins_gain: winnerCoinsEarned,
loser_coins_gain: loserCoinsEarned
}
connection.query('INSERT INTO gamelog SET ?', gameLog, function(err, result){
if(err){
getDateTimeNow();
console.log(err);
console.log(datetime+' Error occured while Registering game Log 1337');
console.log('============================================================');
}
getDateTimeNow();
console.log(datetime+ "Game result has been registered: "+result.insertId);
console.log('============================================================');
});
//Register data to game history for player
//winner
winnerGamesWon++;
winnerRankNow = 1;
if(winnerPointsAfter >= 1500){
winnerRankNow = 2;
}
if(winnerPointsAfter >= 1800){
winnerRankNow = 3;
}
if(winnerPointsAfter >= 2100){
winnerRankNow = 4;
}
if(winnerPointsAfter >= 2500){
winnerRankNow = 5;
}
totalWinnerCoins = winnerCoins + winnerCoinsEarned;
connection.query('UPDATE users SET games_won = '+winnerGamesWon+', coins = '+totalWinnerCoins+', points ='+winnerPointsAfter+',rank = '+winnerRankNow+' WHERE id = '+winnerId, function(err, result){
if(err){
getDateTimeNow();
console.log(err);
console.log(datetime+' Error occured while Updating winner rank points 1336');
console.log('============================================================');
}
getDateTimeNow();
console.log(datetime+ "Rank point has been updated for: "+ winnerUsername);
console.log('============================================================');
});
//winner
loserGamesLost++;
loserRankNow = 1;
if(loserPointsAfter >= 1500){
loserRankNow = 2;
}
if(loserPointsAfter >= 1800){
loserRankNow = 3;
}
if(loserPointsAfter >= 2100){
loserRankNow = 4;
}
if(loserPointsAfter >= 2500){
loserRankNow = 5;
}
totalLoserCoins = loserCoins + loserCoinsEarned;
connection.query('UPDATE users SET games_lost = '+loserGamesLost+', coins= '+totalLoserCoins+', points ='+loserPointsAfter+',rank = '+loserRankNow+' WHERE id = '+loserId, function(err, result){
if(err){
getDateTimeNow();
console.log(err);
console.log(datetime+' Error occured while Updating winner rank points 1336');
console.log('============================================================');
}
getDateTimeNow();
console.log(datetime+ "Rank point has been updated for: "+ winnerUsername);
console.log('============================================================');
});
returnData = {
loser : {
username: loserUsername,
rankPointsBefore: loserPointsBefore,
rankPointsAfter: loserPointsAfter,
loserCoinsEarned: loserCoinsEarned
},
winner : {
username: winnerUsername,
rankPointsBefore: winnerPointsBefore,
rankPointsAfter: winnerPointsAfter,
winnerCoinsEarned: winnerCoinsEarned
},
totalRankPoints: winnerPointsBefore + loserPointsBefore
}
}
Upvotes: 0
Views: 217