#include <HangmanDb.h>
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< Score > | getHighScores (int top) |
static Score | getUserPosition (const std::wstring &user) |
Static Private Member Functions | |
static std::string | DbUser () |
static std::string | DbPass () |
Classes | |
struct | Score |
Definition at line 7 of file HangmanDb.h.
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 }