package handling.login.handler; import client.LoginCrypto; import client.MapleClient; import database.DatabaseConnection; import org.apache.log4j.Logger; import tools.data.input.SeekableLittleEndianAccessor; import tools.packet.LoginPacket; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class RegisterAccountHandler { private static final Logger log = Logger.getLogger(RegisterAccountHandler.class); public static void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { c.getSession().write(LoginPacket.RegisterInfo(true)); } public static void CheckAccount(SeekableLittleEndianAccessor slea, MapleClient c) { String accountName = slea.readMapleAsciiString(); c.getSession().write(LoginPacket.CheckAccount(accountName,c.isAccountNameUsed(accountName))); } /** * 注册帐号 * @param slea * @param c */ public static void RegisterAccount(SeekableLittleEndianAccessor slea, MapleClient c){ /* * 0A * 0C 00 69 63 65 6C 65 6D 6F 6E 30 30 30 31 // 用户名 * 05 00 31 31 31 31 31 // 密码 * 04 00 31 31 31 31 // 真实姓名 * 0A 00 32 30 30 30 2F 30 31 2F 30 31 // 生日 * 0C 00 31 31 31 31 31 31 31 31 31 31 31 31 // 电话号码 * 0A 00 31 31 31 31 31 31 31 31 31 31 // 问题1 * 0A 00 33 33 33 33 33 33 33 33 33 33 // 答案1 * 0A 00 32 32 32 32 32 32 32 32 32 32 // 问题2 * 0A 00 34 34 34 34 34 34 34 34 34 34 //答案2 * 0E 00 31 32 33 34 35 36 37 40 71 71 2E 63 6F 6D 电子邮箱 * 0F 00 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 // 身份证 * 0A 00 31 33 38 33 38 33 38 34 33 38 // 手机号码 * 00 // 性别 0-男 1-女 * 00 00 00 00 00 ...icelemon0001..11111..1111..2000/01/01..111-11111111..1111111111..3333333333..2222222222..4444444444..1234567@qq.com..111111111111111..1383838438...... * * */ String accountName = slea.readMapleAsciiString(); String password = slea.readMapleAsciiString(); String realName = slea.readMapleAsciiString(); String birthDay = slea.readMapleAsciiString(); String homeNo = slea.readMapleAsciiString(); String questionOne = slea.readMapleAsciiString(); String answerOne = slea.readMapleAsciiString(); String questionTwo = slea.readMapleAsciiString(); String answerTwo = slea.readMapleAsciiString(); String email = slea.readMapleAsciiString(); String IDCard = slea.readMapleAsciiString(); String telNo = slea.readMapleAsciiString(); byte sex = slea.readByte(); boolean result = false; if (!c.isAccountNameUsed(accountName)) { try { Connection con = DatabaseConnection.getConnection(); try (PreparedStatement ps = con.prepareStatement("INSERT INTO accounts (`name`, password, birthday,email,gender) VALUES (?, ?, ?, ?, ?)")) { ps.setString(1, accountName); ps.setString(2, LoginCrypto.hexSha1(password)); ps.setString(3, birthDay); ps.setString(4, email); ps.setByte(5, sex); ps.executeUpdate(); ps.close(); result = true; } } catch (SQLException ex) { log.error("注册帐号失败!", ex); } } c.getSession().write(LoginPacket.RegisterAccount(result)); } }