00001
#include "LobbyForm.h"
00002
#include "SimpleWeb.h"
00003
#include <libsimple.h>
00004
00005
00006 LobbyForm::LobbyForm(
SimpleWeb& www)
00007 :
BaseForm(www, "
LobbyForm")
00008 {
00009 }
00010
00011
00012 LobbyForm::~LobbyForm()
00013 {
00014 }
00015
00016
00017 void LobbyForm::Process()
00018 {
00019 Database& db =
GetWeb().
GetDatabase();
00020
char action[200];
00021 GetForm() -> getvalue(GetFormName(), action, 200);
00022
if (!strcmp(action,
"login"))
00023 {
00024
char login[200];
00025
char passwd[200];
00026 GetForm() -> getvalue(
"login", login, 200);
00027 GetForm() -> getvalue(
"passwd", passwd, 200);
00028 db::Account acct(db, login, passwd);
00029
if (acct.num)
00030 {
00031
long valid = random();
00032 db::Valid v(db, valid, acct.num);
00033 v.valid = valid;
00034 v.account = acct.num;
00035 v.save();
00036
GetWeb().
SetAccount(acct.num);
00037
GetWeb().
SetValid(valid);
00038 }
00039 }
00040
else
00041
if (!strcmp(action,
"register"))
00042 {
00043 Query q(db);
00044
char login[200];
00045
char pw1[200];
00046
char pw2[200];
00047
char sql[1000];
00048 GetForm() -> getvalue(
"login", login, 200);
00049 GetForm() -> getvalue(
"passwd", pw1, 200);
00050 GetForm() -> getvalue(
"passwd2", pw2, 200);
00051 sprintf(sql,
"select num from account where login='%s'", q.safestr(login).c_str());
00052
long num = q.get_count(sql);
00053
if (!num && !strcmp(pw1, pw2) && *pw1)
00054 {
00055 db::Account acct(&db);
00056 acct.name = login;
00057 acct.pw = pw1;
00058 acct.save();
00059 }
00060 }
00061
else
00062
if (!strcmp(action,
"player_select"))
00063 {
00064
long num = atol(GetForm() -> getvalue(
"player").c_str());
00065 db::Player pl(db, num);
00066
if (pl.num && pl.account ==
GetWeb().
GetAccount())
00067 {
00068
GetWeb().
SetPlayer(pl.num);
00069 }
00070 }
00071
else
00072
if (!strcmp(action,
"player_create"))
00073 {
00074
char name[200];
00075 GetForm() -> getvalue(
"player_name", name, 200);
00076 db::Player pl(db, name);
00077
if (!pl.num)
00078 {
00079 pl.account =
GetWeb().
GetAccount();
00080 pl.name = name;
00081 pl.save();
00082
00083 {
00084 db::Resource r(&db,
"select * from resource where name='Gold'");
00085 r.name =
"Gold";
00086 r.save();
00087 db::Playerresource x(db, pl.num, r.num);
00088 x.player = pl.num;
00089 x.resource = r.num;
00090 x.amount = 1000;
00091 x.save();
00092 }
00093
00094 {
00095 db::Location loc(&db,
"select * from location where name='Homesville'");
00096 loc.name =
"Homesville";
00097 loc.save();
00098 pl.location = loc.num;
00099 db::Building b(&db,
"select * from building where name='Simple cottage'");
00100 b.name =
"Simple cottage";
00101 b.beds = 2;
00102 b.save();
00103 db::Playerbuilding x(db, pl.num, b.num);
00104 x.player = pl.num;
00105 x.building = b.num;
00106 x.location = loc.num;
00107 x.save();
00108 }
00109 pl.save();
00110 }
00111 }
00112 }
00113
00114
00115 void LobbyForm::Display(
long)
00116 {
00117 Database& db =
GetWeb().
GetDatabase();
00118
if (!
GetWeb().
GetAccount())
00119 {
00120
00121 printf(
"<h3>Login</h3>");
00122 printf(
"<form method='POST' action='%s'>",
GetWeb().GetCgiName().c_str());
00123 printf(
"<input type=hidden name='%s' value='login'>", GetFormName().c_str());
00124 printf(
"Account Login<br>");
00125 printf(
"<input type=text name=login><br>");
00126 printf(
"Account Password<br>");
00127 printf(
"<input type=password name=passwd><br>");
00128
00129 printf(
"<input type=submit name=submit value=' Login '>");
00130 printf(
"</form>");
00131
00132
00133 printf(
"<h3>Register</h3>");
00134 printf(
"<form method='POST' action='%s'>",
GetWeb().GetCgiName().c_str());
00135 printf(
"<input type=hidden name='%s' value='register'>", GetFormName().c_str());
00136 printf(
"Account Login<br>");
00137 printf(
"<input type=text name=login><br>");
00138 printf(
"Account Password<br>");
00139 printf(
"<input type=password name=passwd><br>");
00140 printf(
"Repeat Password<br>");
00141 printf(
"<input type=password name=passwd2><br>");
00142
00143 printf(
"<input type=submit name=submit value=' Register '>");
00144 printf(
"</form>");
00145 }
00146
else
00147
if (!
GetWeb().
GetPlayer())
00148 {
00149 Query q(db);
00150
char sql[1000];
00151
00152
00153 sprintf(sql,
"select * from player where account=%ld",
GetWeb().GetAccount());
00154 q.get_result(sql);
00155
long num_players = q.num_rows();
00156
if (q.num_rows())
00157 {
00158 printf(
"<form method='POST' action='%s'>",
GetWeb().GetCgiName().c_str());
00159 printf(
"<input type=hidden name='%s' value='player_select'>", GetFormName().c_str());
00160 printf(
"Select Player<br><select name='player'><option>");
00161
while (q.fetch_row())
00162 {
00163 db::Player pl(&db, &q);
00164 printf(
"<option value=%ld>%s", pl.num, pl.name.c_str());
00165 }
00166 printf(
"</select><br>");
00167 printf(
"<input type=submit name=submit value=' Select '>");
00168
00169 printf(
"</form>");
00170 }
00171 q.free_result();
00172
00173
00174
if (num_players < 5)
00175 {
00176 printf(
"<form method='POST' action='%s'>",
GetWeb().GetCgiName().c_str());
00177 printf(
"<input type=hidden name='%s' value='player_create'>", GetFormName().c_str());
00178 printf(
"Player Name<br>");
00179 printf(
"<input type=text name=player_name><br>");
00180 printf(
"<input type=submit name=submit value=' Create Player '>");
00181
00182 printf(
"</form>");
00183 }
00184 }
00185
else
00186 {
00187
00188
00189 }
00190 }
00191
00192