Replace FredrickProcessor dependence on NoteDao

This commit is contained in:
P0nk
2022-12-27 10:52:49 +01:00
parent 389b3ad2a4
commit af14da987e
8 changed files with 47 additions and 58 deletions

View File

@@ -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() { public int getDoorSlot() {
if (doorSlot != -1) { if (doorSlot != -1) {
return doorSlot; return doorSlot;

View File

@@ -30,21 +30,18 @@ import client.inventory.InventoryType;
import client.inventory.Item; import client.inventory.Item;
import client.inventory.ItemFactory; import client.inventory.ItemFactory;
import client.inventory.manipulator.InventoryManipulator; import client.inventory.manipulator.InventoryManipulator;
import database.DaoException;
import database.note.NoteDao;
import model.Note;
import net.server.Server; import net.server.Server;
import net.server.world.World; import net.server.world.World;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import server.ItemInformationProvider; import server.ItemInformationProvider;
import server.maps.HiredMerchant; import server.maps.HiredMerchant;
import service.NoteService;
import tools.DatabaseConnection; import tools.DatabaseConnection;
import tools.PacketCreator; import tools.PacketCreator;
import tools.Pair; import tools.Pair;
import java.sql.*; import java.sql.*;
import java.util.Collections;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
@@ -57,6 +54,12 @@ public class FredrickProcessor {
private static final Logger log = LoggerFactory.getLogger(FredrickProcessor.class); 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 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<Pair<Item, InventoryType>> items) { private static byte canRetrieveFromFredrick(Character chr, List<Pair<Item, InventoryType>> items) {
if (!Inventory.checkSpotsAndOwnership(chr, items)) { if (!Inventory.checkSpotsAndOwnership(chr, items)) {
List<Integer> itemids = new LinkedList<>(); List<Integer> 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<Pair<Integer, Integer>> expiredCids) { private static void removeFredrickReminders(List<Pair<Integer, Integer>> expiredCids) {
List<String> expiredCnames = new LinkedList<>(); List<String> expiredCnames = new LinkedList<>();
for (Pair<Integer, Integer> id : expiredCids) { for (Pair<Integer, Integer> id : expiredCids) {
@@ -156,7 +155,7 @@ public class FredrickProcessor {
} }
} }
public static void runFredrickSchedule() { public void runFredrickSchedule() {
try (Connection con = DatabaseConnection.getConnection()) { try (Connection con = DatabaseConnection.getConnection()) {
List<Pair<Integer, Integer>> expiredCids = new LinkedList<>(); List<Pair<Integer, Integer>> expiredCids = new LinkedList<>();
List<Pair<Pair<Integer, String>, Integer>> notifCids = new LinkedList<>(); List<Pair<Pair<Integer, String>, Integer>> notifCids = new LinkedList<>();
@@ -244,7 +243,7 @@ public class FredrickProcessor {
ps.addBatch(); ps.addBatch();
String msg = fredrickReminderMessage(cid.getRight() - 1); String msg = fredrickReminderMessage(cid.getRight() - 1);
saveFredrickReminderNote(msg, cid.getLeft().getRight()); noteService.sendNormal(msg, "FREDRICK", cid.getLeft().getRight());
} }
ps.executeBatch(); 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) { private static boolean deleteFredrickItems(int cid) {
try (Connection con = DatabaseConnection.getConnection(); try (Connection con = DatabaseConnection.getConnection();
PreparedStatement ps = con.prepareStatement("DELETE FROM `inventoryitems` WHERE `type` = ? AND `characterid` = ?")) { 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()) { if (c.tryacquireClient()) {
try { try {
Character chr = c.getPlayer(); Character chr = c.getPlayer();

View File

@@ -57,7 +57,7 @@ public class NoteDao {
} }
} }
private static Optional<Note> findById(Handle handle, int id) { private Optional<Note> findById(Handle handle, int id) {
final Optional<Note> note; final Optional<Note> note;
try { try {
note = handle.createQuery(""" note = handle.createQuery("""
@@ -74,7 +74,7 @@ public class NoteDao {
return note; return note;
} }
private static void deleteById(Handle handle, int id) { private void deleteById(Handle handle, int id) {
try { try {
handle.createUpdate(""" handle.createUpdate("""
UPDATE notes UPDATE notes

View File

@@ -1,12 +1,14 @@
package net; package net;
import client.processor.npc.FredrickProcessor;
import service.NoteService; import service.NoteService;
import java.util.Objects; import java.util.Objects;
public record ChannelDependencies(NoteService noteService) { public record ChannelDependencies(NoteService noteService, FredrickProcessor fredrickProcessor) {
public ChannelDependencies { public ChannelDependencies {
Objects.requireNonNull(noteService); Objects.requireNonNull(noteService);
Objects.requireNonNull(fredrickProcessor);
} }
} }

View File

@@ -38,7 +38,7 @@ public final class PacketProcessor {
private static final Logger log = LoggerFactory.getLogger(PacketProcessor.class); private static final Logger log = LoggerFactory.getLogger(PacketProcessor.class);
private static final Map<String, PacketProcessor> instances = new LinkedHashMap<>(); private static final Map<String, PacketProcessor> instances = new LinkedHashMap<>();
private static ChannelDependencies channelDependencies; private static ChannelDependencies channelDeps;
private PacketHandler[] handlers; private PacketHandler[] handlers;
@@ -53,7 +53,7 @@ public final class PacketProcessor {
} }
public static void registerGameHandlerDependencies(ChannelDependencies channelDependencies) { public static void registerGameHandlerDependencies(ChannelDependencies channelDependencies) {
PacketProcessor.channelDependencies = channelDependencies; PacketProcessor.channelDeps = channelDependencies;
} }
public static PacketProcessor getLoginServerProcessor() { public static PacketProcessor getLoginServerProcessor() {
@@ -61,7 +61,7 @@ public final class PacketProcessor {
} }
public static PacketProcessor getChannelServerProcessor(int world, int channel) { 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"); 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_SORT, new InventoryMergeHandler());
registerHandler(RecvOpcode.ITEM_MOVE, new ItemMoveHandler()); registerHandler(RecvOpcode.ITEM_MOVE, new ItemMoveHandler());
registerHandler(RecvOpcode.MESO_DROP, new MesoDropHandler()); 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.CHANGE_MAP, new ChangeMapHandler());
registerHandler(RecvOpcode.MOVE_LIFE, new MoveLifeHandler()); registerHandler(RecvOpcode.MOVE_LIFE, new MoveLifeHandler());
registerHandler(RecvOpcode.CLOSE_RANGE_ATTACK, new CloseRangeDamageHandler()); registerHandler(RecvOpcode.CLOSE_RANGE_ATTACK, new CloseRangeDamageHandler());
@@ -160,7 +160,7 @@ public final class PacketProcessor {
registerHandler(RecvOpcode.MAGIC_ATTACK, new MagicDamageHandler()); registerHandler(RecvOpcode.MAGIC_ATTACK, new MagicDamageHandler());
registerHandler(RecvOpcode.TAKE_DAMAGE, new TakeDamageHandler()); registerHandler(RecvOpcode.TAKE_DAMAGE, new TakeDamageHandler());
registerHandler(RecvOpcode.MOVE_PLAYER, new MovePlayerHandler()); 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_ITEM, new UseItemHandler());
registerHandler(RecvOpcode.USE_RETURN_SCROLL, new UseItemHandler()); registerHandler(RecvOpcode.USE_RETURN_SCROLL, new UseItemHandler());
registerHandler(RecvOpcode.USE_UPGRADE_SCROLL, new ScrollHandler()); registerHandler(RecvOpcode.USE_UPGRADE_SCROLL, new ScrollHandler());
@@ -202,7 +202,7 @@ public final class PacketProcessor {
registerHandler(RecvOpcode.MESSENGER, new MessengerHandler()); registerHandler(RecvOpcode.MESSENGER, new MessengerHandler());
registerHandler(RecvOpcode.NPC_ACTION, new NPCAnimationHandler()); registerHandler(RecvOpcode.NPC_ACTION, new NPCAnimationHandler());
registerHandler(RecvOpcode.CHECK_CASH, new TouchingCashShopHandler()); 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.COUPON_CODE, new CouponCodeHandler());
registerHandler(RecvOpcode.SPAWN_PET, new SpawnPetHandler()); registerHandler(RecvOpcode.SPAWN_PET, new SpawnPetHandler());
registerHandler(RecvOpcode.MOVE_PET, new MovePetHandler()); registerHandler(RecvOpcode.MOVE_PET, new MovePetHandler());
@@ -215,11 +215,11 @@ public final class PacketProcessor {
registerHandler(RecvOpcode.CANCEL_DEBUFF, new CancelDebuffHandler()); registerHandler(RecvOpcode.CANCEL_DEBUFF, new CancelDebuffHandler());
registerHandler(RecvOpcode.USE_SKILL_BOOK, new SkillBookHandler()); registerHandler(RecvOpcode.USE_SKILL_BOOK, new SkillBookHandler());
registerHandler(RecvOpcode.SKILL_MACRO, new SkillMacroHandler()); 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.CLOSE_CHALKBOARD, new CloseChalkboardHandler());
registerHandler(RecvOpcode.USE_MOUNT_FOOD, new UseMountFoodHandler()); registerHandler(RecvOpcode.USE_MOUNT_FOOD, new UseMountFoodHandler());
registerHandler(RecvOpcode.MTS_OPERATION, new MTSHandler()); 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.SPOUSE_CHAT, new SpouseChatHandler());
registerHandler(RecvOpcode.PET_AUTO_POT, new PetAutoPotHandler()); registerHandler(RecvOpcode.PET_AUTO_POT, new PetAutoPotHandler());
registerHandler(RecvOpcode.PET_EXCLUDE_ITEMS, new PetExcludeItemsHandler()); registerHandler(RecvOpcode.PET_EXCLUDE_ITEMS, new PetExcludeItemsHandler());
@@ -273,7 +273,7 @@ public final class PacketProcessor {
registerHandler(RecvOpcode.COCONUT, new CoconutHandler()); registerHandler(RecvOpcode.COCONUT, new CoconutHandler());
registerHandler(RecvOpcode.ARAN_COMBO_COUNTER, new AranComboHandler()); registerHandler(RecvOpcode.ARAN_COMBO_COUNTER, new AranComboHandler());
registerHandler(RecvOpcode.CLICK_GUIDE, new ClickGuideHandler()); 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.MONSTER_CARNIVAL, new MonsterCarnivalHandler());
registerHandler(RecvOpcode.REMOTE_STORE, new RemoteStoreHandler()); registerHandler(RecvOpcode.REMOTE_STORE, new RemoteStoreHandler());
registerHandler(RecvOpcode.WEDDING_ACTION, new WeddingHandler()); registerHandler(RecvOpcode.WEDDING_ACTION, new WeddingHandler());

View File

@@ -30,6 +30,7 @@ import client.inventory.Item;
import client.inventory.ItemFactory; import client.inventory.ItemFactory;
import client.inventory.manipulator.CashIdGenerator; import client.inventory.manipulator.CashIdGenerator;
import client.newyear.NewYearCardRecord; import client.newyear.NewYearCardRecord;
import client.processor.npc.FredrickProcessor;
import config.YamlConfig; import config.YamlConfig;
import constants.game.GameConstants; import constants.game.GameConstants;
import constants.inventory.ItemConstants; import constants.inventory.ItemConstants;
@@ -842,7 +843,7 @@ public class Server {
throw new IllegalStateException("Failed to initiate a connection to the database"); throw new IllegalStateException("Failed to initiate a connection to the database");
} }
registerChannelDependencies(); ChannelDependencies channelDependencies = registerChannelDependencies();
final ExecutorService initExecutor = Executors.newFixedThreadPool(10); final ExecutorService initExecutor = Executors.newFixedThreadPool(10);
// Run slow operations asynchronously to make startup faster // Run slow operations asynchronously to make startup faster
@@ -872,7 +873,7 @@ public class Server {
} }
ThreadManager.getInstance().start(); ThreadManager.getInstance().start();
initializeTimelyTasks(); // aggregated method for timely tasks thanks to lxconan initializeTimelyTasks(channelDependencies); // aggregated method for timely tasks thanks to lxconan
try { try {
int worldCount = Math.min(GameConstants.WORLD_NAMES.length, YamlConfig.config.server.WORLDS); int worldCount = Math.min(GameConstants.WORLD_NAMES.length, YamlConfig.config.server.WORLDS);
@@ -920,14 +921,14 @@ public class Server {
} }
} }
private void registerChannelDependencies() { private ChannelDependencies registerChannelDependencies() {
NoteDao noteDao = new NoteDao(); NoteService noteService = new NoteService(new NoteDao());
FredrickProcessor fredrickProcessor = new FredrickProcessor(noteService);
ChannelDependencies channelDependencies = new ChannelDependencies( ChannelDependencies channelDependencies = new ChannelDependencies(noteService, fredrickProcessor);
new NoteService(noteDao)
);
PacketProcessor.registerGameHandlerDependencies(channelDependencies); PacketProcessor.registerGameHandlerDependencies(channelDependencies);
return channelDependencies;
} }
private LoginServer initLoginServer(int port) { private LoginServer initLoginServer(int port) {
@@ -948,7 +949,7 @@ public class Server {
} }
} }
private void initializeTimelyTasks() { private void initializeTimelyTasks(ChannelDependencies channelDependencies) {
TimerManager tMan = TimerManager.getInstance(); TimerManager tMan = TimerManager.getInstance();
tMan.start(); tMan.start();
tMan.register(tMan.purge(), YamlConfig.config.server.PURGING_INTERVAL);//Purging ftw... 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 LoginCoordinatorTask(), HOURS.toMillis(1), timeLeft);
tMan.register(new EventRecallCoordinatorTask(), 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 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 InvitationTask(), SECONDS.toMillis(30), SECONDS.toMillis(30));
tMan.register(new RespawnTask(), YamlConfig.config.server.RESPAWN_INTERVAL, YamlConfig.config.server.RESPAWN_INTERVAL); tMan.register(new RespawnTask(), YamlConfig.config.server.RESPAWN_INTERVAL, YamlConfig.config.server.RESPAWN_INTERVAL);

View File

@@ -31,6 +31,11 @@ import net.packet.InPacket;
* @author kevintjuh93 * @author kevintjuh93
*/ */
public class FredrickHandler extends AbstractPacketHandler { public class FredrickHandler extends AbstractPacketHandler {
private final FredrickProcessor fredrickProcessor;
public FredrickHandler(FredrickProcessor fredrickProcessor) {
this.fredrickProcessor = fredrickProcessor;
}
@Override @Override
public void handlePacket(InPacket p, Client c) { public void handlePacket(InPacket p, Client c) {
@@ -42,7 +47,7 @@ public class FredrickHandler extends AbstractPacketHandler {
//c.sendPacket(PacketCreator.getFredrick((byte) 0x24)); //c.sendPacket(PacketCreator.getFredrick((byte) 0x24));
break; break;
case 0x1A: case 0x1A:
FredrickProcessor.fredrickRetrieveItems(c); fredrickProcessor.fredrickRetrieveItems(c);
break; break;
case 0x1C: //Exit case 0x1C: //Exit
break; break;

View File

@@ -26,10 +26,15 @@ import client.processor.npc.FredrickProcessor;
* @author Ronan * @author Ronan
*/ */
public class DueyFredrickTask implements Runnable { public class DueyFredrickTask implements Runnable {
private final FredrickProcessor fredrickProcessor;
public DueyFredrickTask(FredrickProcessor fredrickProcessor) {
this.fredrickProcessor = fredrickProcessor;
}
@Override @Override
public void run() { public void run() {
FredrickProcessor.runFredrickSchedule(); fredrickProcessor.runFredrickSchedule();
DueyProcessor.runDueyExpireSchedule(); DueyProcessor.runDueyExpireSchedule();
} }
} }