From af14da987eeeabc56e4d1826a0ff96698d16f4d2 Mon Sep 17 00:00:00 2001 From: P0nk Date: Tue, 27 Dec 2022 10:52:49 +0100 Subject: [PATCH] Replace FredrickProcessor dependence on NoteDao --- src/main/java/client/Character.java | 14 --------- .../processor/npc/FredrickProcessor.java | 30 +++++++------------ src/main/java/database/note/NoteDao.java | 4 +-- src/main/java/net/ChannelDependencies.java | 4 ++- src/main/java/net/PacketProcessor.java | 18 +++++------ src/main/java/net/server/Server.java | 21 ++++++------- .../channel/handlers/FredrickHandler.java | 7 ++++- .../net/server/task/DueyFredrickTask.java | 7 ++++- 8 files changed, 47 insertions(+), 58 deletions(-) diff --git a/src/main/java/client/Character.java b/src/main/java/client/Character.java index 201160e582..f21f402091 100644 --- a/src/main/java/client/Character.java +++ b/src/main/java/client/Character.java @@ -9203,20 +9203,6 @@ public class Character extends AbstractCharacterObject { } } - public void changeName(String name) { - FredrickProcessor.removeFredrickReminders(this.getId()); - - this.name = name; - try (Connection con = DatabaseConnection.getConnection(); - PreparedStatement ps = con.prepareStatement("UPDATE `characters` SET `name` = ? WHERE `id` = ?")) { - ps.setString(1, name); - ps.setInt(2, id); - ps.executeUpdate(); - } catch (SQLException e) { - e.printStackTrace(); - } - } - public int getDoorSlot() { if (doorSlot != -1) { return doorSlot; diff --git a/src/main/java/client/processor/npc/FredrickProcessor.java b/src/main/java/client/processor/npc/FredrickProcessor.java index 4480ea4609..5e0bd24015 100644 --- a/src/main/java/client/processor/npc/FredrickProcessor.java +++ b/src/main/java/client/processor/npc/FredrickProcessor.java @@ -30,21 +30,18 @@ import client.inventory.InventoryType; import client.inventory.Item; import client.inventory.ItemFactory; import client.inventory.manipulator.InventoryManipulator; -import database.DaoException; -import database.note.NoteDao; -import model.Note; import net.server.Server; import net.server.world.World; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import server.ItemInformationProvider; import server.maps.HiredMerchant; +import service.NoteService; import tools.DatabaseConnection; import tools.PacketCreator; import tools.Pair; import java.sql.*; -import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -57,6 +54,12 @@ public class FredrickProcessor { private static final Logger log = LoggerFactory.getLogger(FredrickProcessor.class); private static final int[] dailyReminders = new int[]{2, 5, 10, 15, 30, 60, 90, Integer.MAX_VALUE}; + private final NoteService noteService; + + public FredrickProcessor(NoteService noteService) { + this.noteService = noteService; + } + private static byte canRetrieveFromFredrick(Character chr, List> items) { if (!Inventory.checkSpotsAndOwnership(chr, items)) { List itemids = new LinkedList<>(); @@ -130,10 +133,6 @@ public class FredrickProcessor { } } - public static void removeFredrickReminders(int cid) { - removeFredrickReminders(Collections.singletonList(new Pair<>(cid, 0))); - } - private static void removeFredrickReminders(List> expiredCids) { List expiredCnames = new LinkedList<>(); for (Pair id : expiredCids) { @@ -156,7 +155,7 @@ public class FredrickProcessor { } } - public static void runFredrickSchedule() { + public void runFredrickSchedule() { try (Connection con = DatabaseConnection.getConnection()) { List> expiredCids = new LinkedList<>(); List, Integer>> notifCids = new LinkedList<>(); @@ -244,7 +243,7 @@ public class FredrickProcessor { ps.addBatch(); String msg = fredrickReminderMessage(cid.getRight() - 1); - saveFredrickReminderNote(msg, cid.getLeft().getRight()); + noteService.sendNormal(msg, "FREDRICK", cid.getLeft().getRight()); } ps.executeBatch(); @@ -255,15 +254,6 @@ public class FredrickProcessor { } } - private static void saveFredrickReminderNote(String message, String to) { - Note reminderNote = Note.createNormal(message, "FREDRICK", to, Server.getInstance().getCurrentTime()); - try { - NoteDao.save(reminderNote); - } catch (DaoException e) { - log.error("Failed to save Fredrick reminder note", e); - } - } - private static boolean deleteFredrickItems(int cid) { try (Connection con = DatabaseConnection.getConnection(); PreparedStatement ps = con.prepareStatement("DELETE FROM `inventoryitems` WHERE `type` = ? AND `characterid` = ?")) { @@ -278,7 +268,7 @@ public class FredrickProcessor { } } - public static void fredrickRetrieveItems(Client c) { // thanks Gustav for pointing out the dupe on Fredrick handling + public void fredrickRetrieveItems(Client c) { // thanks Gustav for pointing out the dupe on Fredrick handling if (c.tryacquireClient()) { try { Character chr = c.getPlayer(); diff --git a/src/main/java/database/note/NoteDao.java b/src/main/java/database/note/NoteDao.java index 34451e0963..d88de2f446 100644 --- a/src/main/java/database/note/NoteDao.java +++ b/src/main/java/database/note/NoteDao.java @@ -57,7 +57,7 @@ public class NoteDao { } } - private static Optional findById(Handle handle, int id) { + private Optional findById(Handle handle, int id) { final Optional note; try { note = handle.createQuery(""" @@ -74,7 +74,7 @@ public class NoteDao { return note; } - private static void deleteById(Handle handle, int id) { + private void deleteById(Handle handle, int id) { try { handle.createUpdate(""" UPDATE notes diff --git a/src/main/java/net/ChannelDependencies.java b/src/main/java/net/ChannelDependencies.java index eb07b2bfba..a6660f494d 100644 --- a/src/main/java/net/ChannelDependencies.java +++ b/src/main/java/net/ChannelDependencies.java @@ -1,12 +1,14 @@ package net; +import client.processor.npc.FredrickProcessor; import service.NoteService; import java.util.Objects; -public record ChannelDependencies(NoteService noteService) { +public record ChannelDependencies(NoteService noteService, FredrickProcessor fredrickProcessor) { public ChannelDependencies { Objects.requireNonNull(noteService); + Objects.requireNonNull(fredrickProcessor); } } diff --git a/src/main/java/net/PacketProcessor.java b/src/main/java/net/PacketProcessor.java index 4f47b2c55d..391143cb1a 100644 --- a/src/main/java/net/PacketProcessor.java +++ b/src/main/java/net/PacketProcessor.java @@ -38,7 +38,7 @@ public final class PacketProcessor { private static final Logger log = LoggerFactory.getLogger(PacketProcessor.class); private static final Map instances = new LinkedHashMap<>(); - private static ChannelDependencies channelDependencies; + private static ChannelDependencies channelDeps; private PacketHandler[] handlers; @@ -53,7 +53,7 @@ public final class PacketProcessor { } public static void registerGameHandlerDependencies(ChannelDependencies channelDependencies) { - PacketProcessor.channelDependencies = channelDependencies; + PacketProcessor.channelDeps = channelDependencies; } public static PacketProcessor getLoginServerProcessor() { @@ -61,7 +61,7 @@ public final class PacketProcessor { } public static PacketProcessor getChannelServerProcessor(int world, int channel) { - if (channelDependencies == null) { + if (channelDeps == null) { throw new IllegalStateException("Unable to get channel server processor - dependencies are not registered"); } @@ -152,7 +152,7 @@ public final class PacketProcessor { registerHandler(RecvOpcode.ITEM_SORT, new InventoryMergeHandler()); registerHandler(RecvOpcode.ITEM_MOVE, new ItemMoveHandler()); registerHandler(RecvOpcode.MESO_DROP, new MesoDropHandler()); - registerHandler(RecvOpcode.PLAYER_LOGGEDIN, new PlayerLoggedinHandler(channelDependencies.noteService())); + registerHandler(RecvOpcode.PLAYER_LOGGEDIN, new PlayerLoggedinHandler(channelDeps.noteService())); registerHandler(RecvOpcode.CHANGE_MAP, new ChangeMapHandler()); registerHandler(RecvOpcode.MOVE_LIFE, new MoveLifeHandler()); registerHandler(RecvOpcode.CLOSE_RANGE_ATTACK, new CloseRangeDamageHandler()); @@ -160,7 +160,7 @@ public final class PacketProcessor { registerHandler(RecvOpcode.MAGIC_ATTACK, new MagicDamageHandler()); registerHandler(RecvOpcode.TAKE_DAMAGE, new TakeDamageHandler()); registerHandler(RecvOpcode.MOVE_PLAYER, new MovePlayerHandler()); - registerHandler(RecvOpcode.USE_CASH_ITEM, new UseCashItemHandler(channelDependencies.noteService())); + registerHandler(RecvOpcode.USE_CASH_ITEM, new UseCashItemHandler(channelDeps.noteService())); registerHandler(RecvOpcode.USE_ITEM, new UseItemHandler()); registerHandler(RecvOpcode.USE_RETURN_SCROLL, new UseItemHandler()); registerHandler(RecvOpcode.USE_UPGRADE_SCROLL, new ScrollHandler()); @@ -202,7 +202,7 @@ public final class PacketProcessor { registerHandler(RecvOpcode.MESSENGER, new MessengerHandler()); registerHandler(RecvOpcode.NPC_ACTION, new NPCAnimationHandler()); registerHandler(RecvOpcode.CHECK_CASH, new TouchingCashShopHandler()); - registerHandler(RecvOpcode.CASHSHOP_OPERATION, new CashOperationHandler(channelDependencies.noteService())); + registerHandler(RecvOpcode.CASHSHOP_OPERATION, new CashOperationHandler(channelDeps.noteService())); registerHandler(RecvOpcode.COUPON_CODE, new CouponCodeHandler()); registerHandler(RecvOpcode.SPAWN_PET, new SpawnPetHandler()); registerHandler(RecvOpcode.MOVE_PET, new MovePetHandler()); @@ -215,11 +215,11 @@ public final class PacketProcessor { registerHandler(RecvOpcode.CANCEL_DEBUFF, new CancelDebuffHandler()); registerHandler(RecvOpcode.USE_SKILL_BOOK, new SkillBookHandler()); registerHandler(RecvOpcode.SKILL_MACRO, new SkillMacroHandler()); - registerHandler(RecvOpcode.NOTE_ACTION, new NoteActionHandler(channelDependencies.noteService())); + registerHandler(RecvOpcode.NOTE_ACTION, new NoteActionHandler(channelDeps.noteService())); registerHandler(RecvOpcode.CLOSE_CHALKBOARD, new CloseChalkboardHandler()); registerHandler(RecvOpcode.USE_MOUNT_FOOD, new UseMountFoodHandler()); registerHandler(RecvOpcode.MTS_OPERATION, new MTSHandler()); - registerHandler(RecvOpcode.RING_ACTION, new RingActionHandler(channelDependencies.noteService())); + registerHandler(RecvOpcode.RING_ACTION, new RingActionHandler(channelDeps.noteService())); registerHandler(RecvOpcode.SPOUSE_CHAT, new SpouseChatHandler()); registerHandler(RecvOpcode.PET_AUTO_POT, new PetAutoPotHandler()); registerHandler(RecvOpcode.PET_EXCLUDE_ITEMS, new PetExcludeItemsHandler()); @@ -273,7 +273,7 @@ public final class PacketProcessor { registerHandler(RecvOpcode.COCONUT, new CoconutHandler()); registerHandler(RecvOpcode.ARAN_COMBO_COUNTER, new AranComboHandler()); registerHandler(RecvOpcode.CLICK_GUIDE, new ClickGuideHandler()); - registerHandler(RecvOpcode.FREDRICK_ACTION, new FredrickHandler()); + registerHandler(RecvOpcode.FREDRICK_ACTION, new FredrickHandler(channelDeps.fredrickProcessor())); registerHandler(RecvOpcode.MONSTER_CARNIVAL, new MonsterCarnivalHandler()); registerHandler(RecvOpcode.REMOTE_STORE, new RemoteStoreHandler()); registerHandler(RecvOpcode.WEDDING_ACTION, new WeddingHandler()); diff --git a/src/main/java/net/server/Server.java b/src/main/java/net/server/Server.java index f341b94eee..2b1da16df8 100644 --- a/src/main/java/net/server/Server.java +++ b/src/main/java/net/server/Server.java @@ -30,6 +30,7 @@ import client.inventory.Item; import client.inventory.ItemFactory; import client.inventory.manipulator.CashIdGenerator; import client.newyear.NewYearCardRecord; +import client.processor.npc.FredrickProcessor; import config.YamlConfig; import constants.game.GameConstants; import constants.inventory.ItemConstants; @@ -842,7 +843,7 @@ public class Server { throw new IllegalStateException("Failed to initiate a connection to the database"); } - registerChannelDependencies(); + ChannelDependencies channelDependencies = registerChannelDependencies(); final ExecutorService initExecutor = Executors.newFixedThreadPool(10); // Run slow operations asynchronously to make startup faster @@ -872,7 +873,7 @@ public class Server { } ThreadManager.getInstance().start(); - initializeTimelyTasks(); // aggregated method for timely tasks thanks to lxconan + initializeTimelyTasks(channelDependencies); // aggregated method for timely tasks thanks to lxconan try { int worldCount = Math.min(GameConstants.WORLD_NAMES.length, YamlConfig.config.server.WORLDS); @@ -920,14 +921,14 @@ public class Server { } } - private void registerChannelDependencies() { - NoteDao noteDao = new NoteDao(); - - ChannelDependencies channelDependencies = new ChannelDependencies( - new NoteService(noteDao) - ); + private ChannelDependencies registerChannelDependencies() { + NoteService noteService = new NoteService(new NoteDao()); + FredrickProcessor fredrickProcessor = new FredrickProcessor(noteService); + ChannelDependencies channelDependencies = new ChannelDependencies(noteService, fredrickProcessor); PacketProcessor.registerGameHandlerDependencies(channelDependencies); + + return channelDependencies; } private LoginServer initLoginServer(int port) { @@ -948,7 +949,7 @@ public class Server { } } - private void initializeTimelyTasks() { + private void initializeTimelyTasks(ChannelDependencies channelDependencies) { TimerManager tMan = TimerManager.getInstance(); tMan.start(); tMan.register(tMan.purge(), YamlConfig.config.server.PURGING_INTERVAL);//Purging ftw... @@ -962,7 +963,7 @@ public class Server { tMan.register(new LoginCoordinatorTask(), HOURS.toMillis(1), timeLeft); tMan.register(new EventRecallCoordinatorTask(), HOURS.toMillis(1), timeLeft); tMan.register(new LoginStorageTask(), MINUTES.toMillis(2), MINUTES.toMillis(2)); - tMan.register(new DueyFredrickTask(), HOURS.toMillis(1), timeLeft); + tMan.register(new DueyFredrickTask(channelDependencies.fredrickProcessor()), HOURS.toMillis(1), timeLeft); tMan.register(new InvitationTask(), SECONDS.toMillis(30), SECONDS.toMillis(30)); tMan.register(new RespawnTask(), YamlConfig.config.server.RESPAWN_INTERVAL, YamlConfig.config.server.RESPAWN_INTERVAL); diff --git a/src/main/java/net/server/channel/handlers/FredrickHandler.java b/src/main/java/net/server/channel/handlers/FredrickHandler.java index 11dd5517ca..efe65a2126 100644 --- a/src/main/java/net/server/channel/handlers/FredrickHandler.java +++ b/src/main/java/net/server/channel/handlers/FredrickHandler.java @@ -31,6 +31,11 @@ import net.packet.InPacket; * @author kevintjuh93 */ public class FredrickHandler extends AbstractPacketHandler { + private final FredrickProcessor fredrickProcessor; + + public FredrickHandler(FredrickProcessor fredrickProcessor) { + this.fredrickProcessor = fredrickProcessor; + } @Override public void handlePacket(InPacket p, Client c) { @@ -42,7 +47,7 @@ public class FredrickHandler extends AbstractPacketHandler { //c.sendPacket(PacketCreator.getFredrick((byte) 0x24)); break; case 0x1A: - FredrickProcessor.fredrickRetrieveItems(c); + fredrickProcessor.fredrickRetrieveItems(c); break; case 0x1C: //Exit break; diff --git a/src/main/java/net/server/task/DueyFredrickTask.java b/src/main/java/net/server/task/DueyFredrickTask.java index 60b95ff560..4b403db73e 100644 --- a/src/main/java/net/server/task/DueyFredrickTask.java +++ b/src/main/java/net/server/task/DueyFredrickTask.java @@ -26,10 +26,15 @@ import client.processor.npc.FredrickProcessor; * @author Ronan */ public class DueyFredrickTask implements Runnable { + private final FredrickProcessor fredrickProcessor; + + public DueyFredrickTask(FredrickProcessor fredrickProcessor) { + this.fredrickProcessor = fredrickProcessor; + } @Override public void run() { - FredrickProcessor.runFredrickSchedule(); + fredrickProcessor.runFredrickSchedule(); DueyProcessor.runDueyExpireSchedule(); } }