summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--src/accounthandler.cpp64
-rw-r--r--src/client.cpp34
-rw-r--r--src/connectionhandler.cpp2
-rw-r--r--src/defines.h7
-rw-r--r--src/main.cpp1
6 files changed, 101 insertions, 14 deletions
diff --git a/ChangeLog b/ChangeLog
index 2b816118..41e493d7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2005-12-11 Yohann Ferreira <bertram@cegetel.net>
+
+ * src/accounthandler.cpp, src/main.cpp, src/dalstorage.cpp,
+ src/client.cpp, src/connectionhandler.cpp, src/defines.h:
+ Added unregistering, checking on character's name and email
+ length support. Also made some little tweaks.
+
2005-12-10 Yohann Ferreira <bertram@cegetel.net>
* src/dalstorage.cpp: Fixed the buggy part of getAccount()
diff --git a/src/accounthandler.cpp b/src/accounthandler.cpp
index fbb5c803..c2e2df5e 100644
--- a/src/accounthandler.cpp
+++ b/src/accounthandler.cpp
@@ -65,6 +65,9 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message)
std::cout << username << " is trying to login." << std::endl;
if (computer.getAccount() != NULL) {
+ std::cout << "Already logged in as " << computer.getAccount()->getName()
+ << "." << std::endl;
+ std::cout << "Please logout first." << std::endl;
result.writeShort(SMSG_LOGIN_ERROR);
result.writeShort(LOGIN_UNKNOWN);
break;
@@ -123,6 +126,13 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message)
bool emailValid = false;
// Testing Email validity
+ if ( (email.length() < MIN_EMAIL_LENGTH) || (email.length() > MAX_EMAIL_LENGTH))
+ {
+ result.writeShort(SMSG_REGISTER_RESPONSE);
+ result.writeByte(REGISTER_INVALID_EMAIL);
+ std::cout << email << ": Email too short or too long." << std::endl;
+ break;
+ }
if (store.doesEmailAlreadyExists(email)) // Search if Email already exists
{
result.writeShort(SMSG_REGISTER_RESPONSE);
@@ -156,11 +166,11 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message)
result.writeByte(REGISTER_INVALID_USERNAME);
std::cout << username << ": Username too short or too long." << std::endl;
}
- else if (password.length() < MIN_PASSWORD_LENGTH)
+ else if ((password.length() < MIN_PASSWORD_LENGTH) || (password.length() > MAX_PASSWORD_LENGTH))
{
result.writeShort(SMSG_REGISTER_RESPONSE);
result.writeByte(REGISTER_INVALID_PASSWORD);
- std::cout << email << ": Password too short." << std::endl;
+ std::cout << email << ": Password too short or too long." << std::endl;
}
else if (!emailValid)
{
@@ -182,6 +192,49 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message)
}
break;
+ case CMSG_UNREGISTER:
+ {
+ std::string username = message.readString();
+ std::string password = message.readString();
+ std::cout << username << " wants to be deleted from our accounts." << std::endl;
+
+ // see if the account exists
+ Account *acc = store.getAccount(username);
+
+ if (!acc) {
+ // account doesn't exist -- send error to client
+ std::cout << username << ": Account doesn't exist anyway." << std::endl;
+
+ result.writeShort(SMSG_UNREGISTER_RESPONSE);
+ result.writeByte(UNREGISTER_INVALID_USERNAME);
+ } else if (acc->getPassword() != password) {
+ // bad password -- send error to client
+ std::cout << "Won't delete it : Bad password for " << username << "." << std::endl;
+
+ result.writeShort(SMSG_UNREGISTER_RESPONSE);
+ result.writeByte(UNREGISTER_INVALID_PASSWORD);
+ } else {
+
+ // If the account to delete is the current account we're logged in.
+ // Get out of it in memory.
+ if (computer.getAccount() != NULL )
+ {
+ if (computer.getAccount()->getName() == username )
+ {
+ computer.setCharacter(NULL);
+ computer.setAccount(NULL);
+ }
+ }
+ // delete account and associated characters
+ std::cout << "Farewell " << username << " ..." << std::endl;
+ store.delAccount(username);
+ store.flush();
+ result.writeShort(SMSG_UNREGISTER_RESPONSE);
+ result.writeByte(UNREGISTER_OK);
+ }
+ }
+ break;
+
case CMSG_CHAR_CREATE:
{
if (computer.getAccount() == NULL) {
@@ -202,6 +255,13 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message)
}
std::string name = message.readString();
+ if ((name.length() < MIN_CHARACTER_LENGTH) || (name.length() > MAX_CHARACTER_LENGTH))
+ {
+ result.writeShort(SMSG_CHAR_CREATE_RESPONSE);
+ result.writeByte(CREATE_INVALID_NAME);
+ std::cout << name << ": Character's name too short or too long." << std::endl;
+ break;
+ }
//char hairStyle = message.readByte();
//char hairColor = message.readByte();
Genders sex = (Genders)message.readByte();
diff --git a/src/client.cpp b/src/client.cpp
index e6142552..c2115ce6 100644
--- a/src/client.cpp
+++ b/src/client.cpp
@@ -49,12 +49,13 @@ int main(int argc, char *argv[])
printf ("0) Quit\n");
printf ("1) Register\n");
- printf ("2) Login\n");
- printf ("3) Chat\n");
- printf ("4) Create character\n");
- printf ("5) Character selection\n");
- printf ("6) Move character\n");
- printf ("7) Equip item\n");
+ printf ("2) Unregister\n");
+ printf ("3) Login\n");
+ printf ("4) Chat\n");
+ printf ("5) Create character\n");
+ printf ("6) Character selection\n");
+ printf ("7) Move character\n");
+ printf ("8) Equip item\n");
printf ("9) Ruby expression\n");
printf ("Choose your option: ");
std::cin >> answer;
@@ -75,6 +76,17 @@ int main(int argc, char *argv[])
break;
case 2:
+ // Unregister (deleting an account)
+ msg.writeShort(CMSG_UNREGISTER);
+ printf("Account name: ", line);
+ std::cin >> line;
+ msg.writeString(line);
+ printf("Password: ", line);
+ std::cin >> line;
+ msg.writeString(line);
+ break;
+
+ case 3:
// Login
msg.writeShort(CMSG_LOGIN);
printf("Account name: ", line);
@@ -85,7 +97,7 @@ int main(int argc, char *argv[])
msg.writeString(line);
break;
- case 3:
+ case 4:
// Chat
msg.writeShort(CMSG_SAY);
printf("\nChat: ", line);
@@ -95,7 +107,7 @@ int main(int argc, char *argv[])
responseRequired = false;
break;
- case 4:
+ case 5:
{
// Create character
msg.writeShort(CMSG_CHAR_CREATE);
@@ -105,7 +117,7 @@ int main(int argc, char *argv[])
msg.writeByte(0);
} break;
- case 5:
+ case 6:
{
// Select character
msg.writeShort(CMSG_CHAR_SELECT);
@@ -114,7 +126,7 @@ int main(int argc, char *argv[])
msg.writeByte(atoi(line));
} break;
- case 6:
+ case 7:
{
// Move character
long x, y;
@@ -130,7 +142,7 @@ int main(int argc, char *argv[])
responseRequired = false;
} break;
- case 7:
+ case 8:
{
// Equip
unsigned int itemId;
diff --git a/src/connectionhandler.cpp b/src/connectionhandler.cpp
index 9a58b882..9ff50619 100644
--- a/src/connectionhandler.cpp
+++ b/src/connectionhandler.cpp
@@ -138,7 +138,7 @@ ConnectionHandler::startListen(ListenThreadData *ltd)
NetComputer *comp = new NetComputer(this, client);
clients.push_back(comp);
computerConnected(comp);
- LOG_INFO(clients.size() << " clients connected")
+ LOG_INFO(clients.size() << " client(s) connected")
}
}
}
diff --git a/src/defines.h b/src/defines.h
index 716ec65e..75991a63 100644
--- a/src/defines.h
+++ b/src/defines.h
@@ -59,8 +59,13 @@ enum {
MIN_LOGIN_LENGTH = 4,
MAX_LOGIN_LENGTH = 16,
MIN_PASSWORD_LENGTH = 4,
+ MAX_PASSWORD_LENGTH = 25,
+ MIN_EMAIL_LENGTH = 7,
+ MAX_EMAIL_LENGTH = 50,
// Character related
+ MIN_CHARACTER_LENGTH = 4,
+ MAX_CHARACTER_LENGTH = 25,
MAX_OF_CHARACTERS = 3,
/** Tells the max difference between the
* less big stat and the biggest one.
@@ -88,6 +93,8 @@ enum {
CMSG_ENCRYPTED_LOGIN = 0x0011,
SMSG_LOGIN_ERROR = 0x0012,
SMSG_LOGIN_CONFIRM = 0x0013,
+ CMSG_LOGOUT = 0x0014,
+ SMSG_LOGOUT_CONFIRM = 0x0015,
CMSG_CHAR_CREATE = 0x0020,
SMSG_CHAR_CREATE_RESPONSE = 0x0021,
CMSG_CHAR_DELETE = 0x0022,
diff --git a/src/main.cpp b/src/main.cpp
index f197b14c..b9cda372 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -228,6 +228,7 @@ int main(int argc, char *argv[])
// Register message handlers
connectionHandler.registerHandler(CMSG_LOGIN, accountHandler);
connectionHandler.registerHandler(CMSG_REGISTER, accountHandler);
+ connectionHandler.registerHandler(CMSG_UNREGISTER, accountHandler);
connectionHandler.registerHandler(CMSG_CHAR_CREATE, accountHandler);
connectionHandler.registerHandler(CMSG_CHAR_SELECT, accountHandler);