一个登录的例子
screen
=============================================================================
site logo
用户名: 密码:
=============================================================================
=============================================================================~
~
~
site logo~
~
~
~
~
~
~
用户名:hzt 密码:******** ~
=============================================================================~
code:
void state_login_prompt(Client& client, Event event)
{
if (event.type == EV_INIT) {
client.clear();
client.drawFile("issue");
EntryField* w_username = new EntryField();
EntryField* w_password = new EntryField();
w_username->setMaxLength(20);
w_username->setLabel("用户名:");
w_username->setStyle(BG_BLU B_WHT);
w_username->setStartRow(client.height - 1);
w_username->setStartCol(0);
w_username->update(client);
w_password->setMaxLength(20);
w_password->setLabel("密码:");
w_password->setStyle(BG_BLU B_WHT);
w_password->setStartRow(client.height - 1);
w_password->setStartCol(40);
w_password->setMask('*');
w_password->update(client);
client.addWidget("w_username", w_username);
client.addWidget("w_password", w_password);
client.focusWidget("w_username");
}
// focus widget event
switch (event.type) {
case EV_KEY_UP:
case EV_KEY_PAGE_UP:
if (!client.activeWidgetName().equals("w_username")) {
client.focusWidget("w_username");
}
return;
case EV_KEY_DOWN:
case EV_KEY_PAGE_DOWN:
if (!client.activeWidgetName().equals("w_password")) {
client.focusWidget("w_password");
}
return;
default:
break;
}
int login_times = client.session.getIntProperty("login_times");
int response = client.processWidgetEvent(event);
switch (response) {
case R_DONE:
if (client.activeWidgetName().equals("w_username")) {
client.name = ((EntryField*)client.activeWidget())->text();
client.focusWidget("w_password");
}
else if (client.activeWidgetName().equals("w_password")) {
String password = ((EntryField*)client.activeWidget())->text();
if (BBS::instance()->checkUser(client.name, password)) {
BBS::instance()->loadUserData(client);
client.transit(state_go_online);
}
else {
client.session.setIntProperty("login_times", ++login_times);
client.print(NRM B_RED "\n密码错误...(%d)\n", login_times);
if (login_times >= 3) {
Debug("login_times(%d)", login_times);
client.disconnect();
break;
}
client.activeWidget()->reset(client);
client.focusWidget("w_username");
client.activeWidget()->reset(client);
}
}
break;
case R_BREAK:
client.disconnect();
break;
return;
}
}
--
FROM 202.120.174.78