Changeset 53643ca in network-game for server/DataAccess.cpp


Ignore:
Timestamp:
Jul 19, 2014, 12:32:33 AM (10 years ago)
Author:
Dmitry Portnoy <dmp1488@…>
Branches:
master
Children:
4c00935
Parents:
cdb0e98
Message:

Server loads user profile and game history info from the database, saves game history to the db after every game, and uses a lua settings file to load db settings

File:
1 edited

Legend:

Unmodified
Added
Removed
  • server/DataAccess.cpp

    rcdb0e98 r53643ca  
    66#include <crypt.h>
    77
     8#include "LuaLoader.h"
     9
    810using namespace std;
    911
    1012DataAccess::DataAccess()
    1113{
     14   LuaLoader luaLoader;
     15
     16   string database, username, password;
     17
     18   if (luaLoader.runScript("db_settings.lua")) {
     19       cout << "Loading settings" << endl;
     20
     21       database = luaLoader.getValue("database");
     22       username = luaLoader.getValue("username");
     23       password = luaLoader.getValue("password");
     24
     25       cout << database << endl;
     26       cout << username << endl;
     27       cout << password << endl;
     28   } else {
     29       cout << "Failed to load settings from lua script" << endl;
     30   }
     31
    1232   mysql_init(&mysql);
    1333   connection = mysql_real_connect(&mysql, "localhost", "pythonAdmin", "pyMaster09*", "pythondb", 0, 0, 0);
     
    5272}
    5373
     74// this is no longer used anywhere
    5475int DataAccess::updatePlayer(string username, string password)
    5576{
     
    85106      cout << "Creating a new player" << endl;
    86107      p = new Player(string(row[1]), string(row[2]));
     108      p->setId(atoi(row[0]));
    87109      if (row[3] == NULL) {
    88110         p->setClass(Player::CLASS_NONE);
     
    93115      }
    94116      cout << "Player class: " << p->playerClass << endl;
    95       cout << "Created new player" << endl;
     117      if (row[7] == NULL)
     118          cout << "wins: NULL" << endl;
     119      else
     120          cout << "wins: " << atoi(row[7]) << endl;
     121      if (row[8] == NULL)
     122          cout << "losses: NULL" << endl;
     123      else
     124          cout << "losses: " << atoi(row[8]) << endl;
     125      cout << "Loaded player from db" << endl;
    96126   }else {
    97127      cout << "Returned no results for some reason" << endl;
     
    112142   MYSQL_RES *result;
    113143   MYSQL_ROW row;
    114    ostringstream oss;
    115144
    116145   result = select("users", "");
     
    139168}
    140169
     170int* DataAccess::getPlayerRecord(int playerId) {
     171   MYSQL_RES *result;
     172   MYSQL_ROW row;
     173   ostringstream oss;
     174   int* record = new int[5];
     175
     176   oss << "id=" << playerId;
     177   result = select("users", oss.str());
     178
     179   if ( ( row = mysql_fetch_row(result)) != NULL ) {
     180      cout << "Retrieved player record successfully" << endl;
     181      record[0] = atoi(row[4]);   // level
     182      record[1] = atoi(row[5]);   // experience
     183      record[2] = atoi(row[6]);   // honor
     184      record[3] = atoi(row[7]);   // wins
     185      record[4] = atoi(row[8]);   // losses
     186      cout << "record[0]:" << record[0] << endl;
     187      cout << "record[1]:" << record[1] << endl;
     188      cout << "record[2]:" << record[2] << endl;
     189      cout << "record[3]:" << record[3] << endl;
     190      cout << "record[4]:" << record[4] << endl;
     191   }
     192
     193   if (result == NULL) {
     194      cout << mysql_error(connection) << endl;
     195      return NULL;
     196   }
     197
     198   mysql_free_result(result);
     199
     200   return record;
     201}
     202
     203int** DataAccess::getPlayerGameHistory(int playerId, unsigned int& numGames)
     204{
     205   // each array is the score for one game
     206   // the columns are result, team, blue score, and red score
     207   // for result 0 is defeat and 1 is victory
     208   // for team, 0 is blue and 1 is red
     209
     210   MYSQL_RES *result;
     211   MYSQL_ROW row;
     212   ostringstream oss;
     213
     214   int** gameHistory;
     215
     216   oss << "user_id=" << playerId;
     217   result = select("gameHistory", oss.str());
     218
     219   numGames = mysql_num_rows(result);
     220   gameHistory = (int**)malloc(sizeof(int*)*numGames);
     221   cout << "Result has " << numGames << " rows" << endl;
     222
     223   int i=0;
     224   while ( ( row = mysql_fetch_row(result)) != NULL ) {
     225      gameHistory[i] = new int[4];
     226
     227      int userTeam = atoi(row[2]);
     228      int blueScore = atoi(row[4]);
     229      int redScore = atoi(row[3]);
     230      int gameResult = -1;
     231
     232      if (blueScore == 3) {
     233         if (userTeam == 0)
     234            gameResult = 1;
     235         else
     236            gameResult = 0;
     237      }else if (redScore == 3) {
     238         if (userTeam == 1)
     239            gameResult = 1;
     240         else
     241            gameResult = 0;
     242      }else {
     243         cout << "Recorded game has no team with 3 points" << endl;
     244      }
     245
     246      gameHistory[i][0] = gameResult;
     247      gameHistory[i][1] = userTeam;
     248      gameHistory[i][2] = blueScore;
     249      gameHistory[i][3] = redScore;
     250
     251      i++;
     252   }
     253
     254   if (result == NULL) {
     255      cout << mysql_error(connection) << endl;
     256      return NULL;
     257   }
     258
     259   mysql_free_result(result);
     260
     261   return gameHistory;
     262}
     263
     264int DataAccess::saveGameHistory(int playerId, int team, int blueScore, int redScore)
     265{
     266   ostringstream oss;
     267
     268   cout << "Saving game to db" << endl;
     269   oss << playerId << ", " << team << ", " << blueScore << ", " << redScore;
     270
     271   return insert("gameHistory", "user_id, user_team, blue_score, red_score", oss.str());
     272}
     273
    141274int DataAccess::insert(string table, string columns, string values)
    142275{
     
    156289   if (query_state != 0) {
    157290      cout << mysql_error(connection) << endl;
    158       return 1;
     291      return -1;
    159292   }
    160293
     
    168301
    169302   if (connection == NULL) {
    170        cout << "Error: non database connection exists" << endl;
     303       cout << "Error: no database connection exists" << endl;
    171304       return -1;
    172305   }
     
    179312   if (query_state != 0) {
    180313      cout << mysql_error(connection) << endl;
    181       return 1;
     314      return -1;
    182315   }
    183316
     
    198331   if (!filter.empty())
    199332      oss << " WHERE " << filter;
     333   cout << "executing select query: " << oss.str() << endl;
    200334
    201335   query_state = mysql_query(connection, oss.str().c_str());
Note: See TracChangeset for help on using the changeset viewer.