diff --git a/src/main/java/client/Client.java b/src/main/java/client/Client.java index e587168f9b..40b60392d8 100644 --- a/src/main/java/client/Client.java +++ b/src/main/java/client/Client.java @@ -470,14 +470,6 @@ public class Client extends ChannelInboundHandlerAdapter { public void setPic(String pic) { this.pic = pic; - try (Connection con = DatabaseConnection.getConnection(); - PreparedStatement ps = con.prepareStatement("UPDATE accounts SET pic = ? WHERE id = ?")) { - ps.setString(1, pic); - ps.setInt(2, accId); - ps.executeUpdate(); - } catch (SQLException e) { - e.printStackTrace(); - } } public String getPic() { diff --git a/src/main/java/database/account/AccountRepository.java b/src/main/java/database/account/AccountRepository.java index c5fb91efa5..4a2ba0aea3 100644 --- a/src/main/java/database/account/AccountRepository.java +++ b/src/main/java/database/account/AccountRepository.java @@ -68,4 +68,17 @@ public class AccountRepository { .execute() > 0; } } + + public boolean setPic(int accountId, String pic) { + String sql = """ + UPDATE account + SET pic = :pic + WHERE id = :id"""; + try (Handle handle = connection.getHandle()) { + return handle.createUpdate(sql) + .bind("id", accountId) + .bind("pic", pic) + .execute() > 0; + } + } } diff --git a/src/main/java/net/PacketProcessor.java b/src/main/java/net/PacketProcessor.java index 91c99397e4..575e6201c4 100644 --- a/src/main/java/net/PacketProcessor.java +++ b/src/main/java/net/PacketProcessor.java @@ -293,11 +293,12 @@ public final class PacketProcessor { registerHandler(RecvOpcode.PICK_ALL_CHAR, new ViewAllCharSelectedHandler()); registerHandler(RecvOpcode.REGISTER_PIN, new RegisterPinHandler(channelDeps.accountService())); registerHandler(RecvOpcode.GUEST_LOGIN, new GuestLoginHandler()); - registerHandler(RecvOpcode.REGISTER_PIC, new RegisterPicHandler()); + registerHandler(RecvOpcode.REGISTER_PIC, new RegisterPicHandler(channelDeps.accountService())); registerHandler(RecvOpcode.CHAR_SELECT_WITH_PIC, new CharSelectedWithPicHandler()); registerHandler(RecvOpcode.SET_GENDER, new SetGenderHandler()); registerHandler(RecvOpcode.VIEW_ALL_WITH_PIC, new ViewAllCharSelectedWithPicHandler()); - registerHandler(RecvOpcode.VIEW_ALL_PIC_REGISTER, new ViewAllCharRegisterPicHandler()); + registerHandler(RecvOpcode.VIEW_ALL_PIC_REGISTER, new ViewAllCharRegisterPicHandler( + channelDeps.accountService())); } private void registerChannelHandlers() { diff --git a/src/main/java/net/server/handlers/login/RegisterPicHandler.java b/src/main/java/net/server/handlers/login/RegisterPicHandler.java index 031361def6..c94e12c1e3 100644 --- a/src/main/java/net/server/handlers/login/RegisterPicHandler.java +++ b/src/main/java/net/server/handlers/login/RegisterPicHandler.java @@ -10,6 +10,7 @@ import net.server.coordinator.session.SessionCoordinator.AntiMulticlientResult; import net.server.world.World; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import service.AccountService; import tools.PacketCreator; import java.net.InetAddress; @@ -18,14 +19,10 @@ import java.net.UnknownHostException; public final class RegisterPicHandler extends AbstractPacketHandler { private static final Logger log = LoggerFactory.getLogger(RegisterPicHandler.class); - private static int parseAntiMulticlientError(AntiMulticlientResult res) { - return switch (res) { - case REMOTE_PROCESSING -> 10; - case REMOTE_LOGGEDIN -> 7; - case REMOTE_NO_MATCH -> 17; - case COORDINATOR_ERROR -> 8; - default -> 9; - }; + private final AccountService accountService; + + public RegisterPicHandler(AccountService accountService) { + this.accountService = accountService; } @Override @@ -67,6 +64,7 @@ public final class RegisterPicHandler extends AbstractPacketHandler { String pic = p.readString(); if (c.getPic() == null || c.getPic().equals("")) { + accountService.setPic(c.getAccID(), pic); c.setPic(pic); c.setWorld(server.getCharacterWorld(charId)); @@ -94,4 +92,14 @@ public final class RegisterPicHandler extends AbstractPacketHandler { SessionCoordinator.getInstance().closeSession(c, true); } } -} \ No newline at end of file + + private static int parseAntiMulticlientError(AntiMulticlientResult res) { + return switch (res) { + case REMOTE_PROCESSING -> 10; + case REMOTE_LOGGEDIN -> 7; + case REMOTE_NO_MATCH -> 17; + case COORDINATOR_ERROR -> 8; + default -> 9; + }; + } +} diff --git a/src/main/java/net/server/handlers/login/ViewAllCharRegisterPicHandler.java b/src/main/java/net/server/handlers/login/ViewAllCharRegisterPicHandler.java index 0495db2ff0..41e42d4872 100644 --- a/src/main/java/net/server/handlers/login/ViewAllCharRegisterPicHandler.java +++ b/src/main/java/net/server/handlers/login/ViewAllCharRegisterPicHandler.java @@ -10,6 +10,7 @@ import net.server.coordinator.session.SessionCoordinator.AntiMulticlientResult; import net.server.world.World; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import service.AccountService; import tools.PacketCreator; import tools.Randomizer; @@ -19,14 +20,10 @@ import java.net.UnknownHostException; public final class ViewAllCharRegisterPicHandler extends AbstractPacketHandler { private static final Logger log = LoggerFactory.getLogger(ViewAllCharRegisterPicHandler.class); - private static int parseAntiMulticlientError(AntiMulticlientResult res) { - return switch (res) { - case REMOTE_PROCESSING -> 10; - case REMOTE_LOGGEDIN -> 7; - case REMOTE_NO_MATCH -> 17; - case COORDINATOR_ERROR -> 8; - default -> 9; - }; + private final AccountService accountService; + + public ViewAllCharRegisterPicHandler(AccountService accountService) { + this.accountService = accountService; } @Override @@ -78,6 +75,7 @@ public final class ViewAllCharRegisterPicHandler extends AbstractPacketHandler { c.setChannel(channel); String pic = p.readString(); + accountService.setPic(c.getAccID(), pic); c.setPic(pic); String[] socket = server.getInetSocket(c, c.getWorld(), channel); @@ -95,4 +93,14 @@ public final class ViewAllCharRegisterPicHandler extends AbstractPacketHandler { e.printStackTrace(); } } + + private static int parseAntiMulticlientError(AntiMulticlientResult res) { + return switch (res) { + case REMOTE_PROCESSING -> 10; + case REMOTE_LOGGEDIN -> 7; + case REMOTE_NO_MATCH -> 17; + case COORDINATOR_ERROR -> 8; + default -> 9; + }; + } } diff --git a/src/main/java/service/AccountService.java b/src/main/java/service/AccountService.java index a41c91b8f1..c9f55b4f09 100644 --- a/src/main/java/service/AccountService.java +++ b/src/main/java/service/AccountService.java @@ -115,14 +115,40 @@ public class AccountService { } private void setPinPostgres(int accountId, String pin) { - boolean success = false; try { - success = accountRepository.setPin(accountId, pin); + boolean success = accountRepository.setPin(accountId, pin); + if (!success) { + log.warn("Failed to set pin (no updated rows) - account:{}, pin:{}", accountId, pin); + } } catch (Exception e) { log.error("Failed to set pin due to error - account:{}, pin:{}", accountId, pin, e); } - if (!success) { - log.warn("Failed to set pin due to no updated rows - account:{}, pin:{}", accountId, pin); + } + + public void setPic(int accountId, String pic) { + setPicMysql(accountId, pic); + setPicPostgres(accountId, pic); + } + + private void setPicMysql(int accountId, String pic) { + try (Connection con = DatabaseConnection.getConnection(); + PreparedStatement ps = con.prepareStatement("UPDATE accounts SET pic = ? WHERE id = ?")) { + ps.setString(1, pic); + ps.setInt(2, accountId); + ps.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + private void setPicPostgres(int accountId, String pic) { + try { + boolean success = accountRepository.setPic(accountId, pic); + if (!success) { + log.warn("Failed to set pic (no updated rows) - account:{}, pic:{}", accountId, pic); + } + } catch (Exception e) { + log.error("Failed to set pic - account:{}, pin:{}", accountId, pic, e); } } }