HangmanDb Class Reference

#include <HangmanDb.h>

List of all members.

Static Public Member Functions

static bool addUser (const std::wstring &user, const std::wstring &password)
static bool validLogin (const std::wstring &user, const std::wstring &pass)
static void addToScore (const std::wstring &user, int delta)
static std::vector< ScoregetHighScores (int top)
static Score getUserPosition (const std::wstring &user)

Static Private Member Functions

static std::string DbUser ()
static std::string DbPass ()

Classes

struct  Score


Detailed Description

Definition at line 7 of file HangmanDb.h.


Member Function Documentation

bool HangmanDb::addUser ( const std::wstring &  user,
const std::wstring &  password 
) [static]

Definition at line 33 of file HangmanDb.C.

00034 {
00035    try {
00036       Connection con("hangman", "localhost", DbUser().c_str(), DbPass().c_str());
00037       Query q = con.query();
00038       q << "insert into users "
00039         << "set user='" << Wt::toUTF8(user) << "', pass=MD5('"
00040         << Wt::toUTF8(password) << "'), numgames=0, score=0, lastseen=now()";
00041       q.store();
00042       return true;
00043    } catch(Exception &e) {
00044       std::cerr << "Database exception!\n";
00045       std::cerr << e.what() << std::endl;
00046       return false;
00047    }
00048 }

bool HangmanDb::validLogin ( const std::wstring &  user,
const std::wstring &  pass 
) [static]

Definition at line 50 of file HangmanDb.C.

00051 {
00052    try {
00053       Connection con("hangman", "localhost", DbUser().c_str(), DbPass().c_str());
00054       Query q = con.query();
00055       q << "select user,pass from users where "
00056         << "user='" << Wt::toUTF8(user)
00057         << "' and pass=MD5('" << Wt::toUTF8(pass) << "')";
00058       StoreQueryResult res = q.store();
00059       return res.size() > 0;
00060    } catch(Exception &e) {
00061       std::cerr << "Database exception!\n";
00062       std::cerr << e.what() << std::endl;
00063       return false;
00064    }
00065 }

void HangmanDb::addToScore ( const std::wstring &  user,
int  delta 
) [static]

Definition at line 67 of file HangmanDb.C.

00068 {
00069    try {
00070       Connection con("hangman", "localhost", DbUser().c_str(), DbPass().c_str());
00071       Query q = con.query();
00072       q << "update users set score=(score+" << delta << "), "
00073         << "numgames=(numgames+1), lastseen=now() "
00074         << "where user='" << Wt::toUTF8(user) << "'";
00075       StoreQueryResult res = q.store();
00076    } catch(Exception &e) {
00077       std::cerr << "Database exception!\n";
00078       std::cerr << e.what() << std::endl;
00079    }
00080 }

std::vector< HangmanDb::Score > HangmanDb::getHighScores ( int  top  )  [static]

Definition at line 82 of file HangmanDb.C.

00083 {
00084    std::vector<HangmanDb::Score> retval;
00085    try {
00086       Connection con("hangman", "localhost", DbUser().c_str(), DbPass().c_str());
00087       Query q = con.query();
00088       q << "select user, numgames, score, lastseen from users "
00089         << "order by score desc "
00090         << "limit " << top;
00091       StoreQueryResult res = q.store();
00092 
00093       for(unsigned int i = 0; i < res.size(); ++i) {
00094          struct Score s;
00095          s.number = i + 1;
00096          s.user = Wt::fromUTF8((std::string)res.at(i)["user"]);
00097          s.numgames = res.at(i)["numgames"];
00098          s.score = res.at(i)["score"];
00099          s.lastseen = Wt::fromUTF8((std::string)res.at(i)["lastseen"]);
00100          retval.push_back(s);
00101       }
00102    } catch(Exception &e) {
00103       std::cerr << "Database exception!\n";
00104       std::cerr << e.what() << std::endl;
00105    }
00106    return retval;
00107 }

HangmanDb::Score HangmanDb::getUserPosition ( const std::wstring &  user  )  [static]

Definition at line 109 of file HangmanDb.C.

00110 {
00111    try {
00112       Connection con("hangman", "localhost", DbUser().c_str(), DbPass().c_str());
00113       Query q = con.query();
00114       q << "select user, numgames, score, lastseen from users "
00115         << "order by score desc";
00116       StoreQueryResult res = q.store();
00117 
00118       // There MUST be a better way to do this...
00119       for(unsigned int i = 0; i < res.size(); ++i) {
00120          if(Wt::fromUTF8((std::string)res.at(i)["user"]) == user) {
00121             struct Score s;
00122             s.number = i + 1;
00123             s.user = Wt::fromUTF8((std::string)res.at(i)["user"]);
00124             s.numgames = res.at(i)["numgames"];
00125             s.score = res.at(i)["score"];
00126             s.lastseen = Wt::fromUTF8((std::string)res.at(i)["lastseen"]);
00127             return s;
00128          }
00129       }
00130    } catch(Exception &e) {
00131       std::cerr << "Database exception!\n";
00132       std::cerr << e.what() << std::endl;
00133    }
00134    Score s;
00135    s.number=0;
00136    s.user=L"DBase error";
00137    s.numgames = s.score = 0;
00138    return s;
00139 }

std::string HangmanDb::DbUser (  )  [static, private]

Definition at line 13 of file HangmanDb.C.

00014 {
00015         std::string retval;
00016         std::ifstream dbconf("HangmanDb.info");
00017         dbconf >> retval;
00018         return retval;
00019 }

std::string HangmanDb::DbPass (  )  [static, private]

Definition at line 21 of file HangmanDb.C.

00022 {
00023         std::string retval;
00024         std::ifstream dbconf("HangmanDb.info");
00025         dbconf >> retval; // username
00026         dbconf >> retval; // password
00027         return retval;
00028 }


The documentation for this class was generated from the following files:

Generated on Thu May 20 18:14:57 2010 for Wt by doxygen 1.5.6