fix session handling

This commit is contained in:
darkk1138
2013-11-25 22:12:34 +01:00
parent b178a96dfc
commit 7e5a216c31
6 changed files with 59 additions and 48 deletions
+42 -37
View File
@@ -87,7 +87,6 @@ public class CharacterService implements INetworkDispatch {
public void handlePacket(IoSession session, IoBuffer data) throws Exception {
Client client = core.getClient((Integer) session.getAttribute("connectionId"));
ClientRandomNameRequest randomNameRequest = new ClientRandomNameRequest();
ClientRandomNameResponse response;
String name = null;
@@ -96,16 +95,23 @@ public class CharacterService implements INetworkDispatch {
data.position(0);
randomNameRequest.deserialize(data);
while (name == null) {
String firstName ="";
String lastName = "";
if (randomNameRequest.getSharedRaceTemplate().contains("wookie")) {
name = nameGenerator.compose(4);
firstName = nameGenerator.compose(4);
} else {
name = nameGenerator.compose(2) + " " + nameGenerator.compose(3);
firstName = nameGenerator.compose(2);
lastName = nameGenerator.compose(3);
}
try {
if (checkForDuplicateName(getfirstName(name, randomNameRequest.getSharedRaceTemplate()), client.getAccountId())) {
name = null;
//it's fine here to just use 0 as accountId because we don't want reserved names to be random generated for anyone.
if (!checkForDuplicateName(firstName, 0)) {
name = firstName + ((lastName.length() > 0 ) ? " " + lastName : "");
}
} catch (SQLException e2) {
e2.printStackTrace();
@@ -132,7 +138,7 @@ public class CharacterService implements INetworkDispatch {
boolean isDeclined = false;
String firstName = getfirstName(message.getName(), message.getRaceTemplate());
String lastName = getlastName(message.getName(), message.getRaceTemplate());
if(message.getName() != null) System.out.println(message.getName());
//if(message.getName() != null) System.out.println(message.getName());
int length = firstName.length();
try {
@@ -317,67 +323,66 @@ public class CharacterService implements INetworkDispatch {
firstName = firstName.toLowerCase();
PreparedStatement ps = databaseConnection.preparedStatement("SELECT id FROM characters WHERE LOWER(\"firstName\")=?");
ps.setString(1, firstName);
//System.out.println(ps.toString());
ResultSet resultSet = ps.executeQuery();
boolean isDuplicate = resultSet.next();
resultSet.getStatement().close();
if (isDuplicate) { return true; }
//FIXME: this is a bit lazy... but it's only temporary :p
PreparedStatement ps2 = databaseConnection.preparedStatement("SELECT id FROM temp_reserved_char_names WHERE \"accountId\"!=? AND LOWER(\"firstName\")=?");
PreparedStatement psc = databaseConnection.preparedStatement("SELECT * FROM pg_tables WHERE \"tablename\"=?");
psc.setString(1, "temp_reserved_char_names");
ResultSet resultSetC = psc.executeQuery();
boolean tableExists = resultSetC.next();
resultSetC.getStatement().close();
if (!tableExists) { return false; }
PreparedStatement ps2 = databaseConnection.preparedStatement("SELECT \"accountId\" FROM temp_reserved_char_names WHERE \"accountId\"!=? AND LOWER(\"firstName\")=?");
ps2.setLong(1, accountId);
ps2.setString(2, firstName);
ResultSet resultSet2 = ps2.executeQuery();
boolean isReserved = resultSet.next();
boolean isReserved = resultSet2.next();
resultSet2.getStatement().close();
return isDuplicate && isReserved;
return isReserved;
}
private String getfirstName(String Name, String RaceTemplate)
{
String[] splitName;
if (RaceTemplate != "object/creature/player/wookiee_male.iff" | RaceTemplate != "object/creature/player/wookiee_female.iff")
if (RaceTemplate.contains("/wookiee_") ||
!Name.contains(" "))
{ // wookies don't have lastNames
if (Name.contains(" "))
{
splitName = Name.split(" ", 2);
return splitName[0];
}
else
{
return Name;
}
}
else
{
return Name;
}
return Name.split(" ", 2)[0];
}
private String getlastName(String Name, String RaceTemplate)
{
String[] splitName;
if (RaceTemplate != "object/creature/player/wookiee_male.iff" && RaceTemplate != "object/creature/player/wookiee_female.iff")
if (RaceTemplate.contains("/wookiee_") ||
!Name.contains(" "))
{ // wookies don't have lastNames
if (Name.contains(" "))
{
splitName = Name.split(" ", 2);
return splitName[1];
}
else
{
return "";
}
}
else
{
return "";
}
return Name.split(" ", 2)[1];
}
private String checkForReservedName(String firstName, String lastName) throws SQLException
{
PreparedStatement psc = databaseConnection.preparedStatement("SELECT * FROM pg_tables WHERE \"tablename\"=?");
psc.setString(1, "reservednames");
ResultSet rsc = psc.executeQuery();
if (!rsc.next()) {
return null;
}
firstName = firstName.toLowerCase();
lastName = lastName.toLowerCase();