Replace FredrickProcessor dependence on NoteDao
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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<Pair<Item, InventoryType>> items) {
|
||||
if (!Inventory.checkSpotsAndOwnership(chr, items)) {
|
||||
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) {
|
||||
List<String> expiredCnames = new LinkedList<>();
|
||||
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()) {
|
||||
List<Pair<Integer, Integer>> expiredCids = new LinkedList<>();
|
||||
List<Pair<Pair<Integer, String>, 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();
|
||||
|
||||
@@ -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;
|
||||
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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ public final class PacketProcessor {
|
||||
private static final Logger log = LoggerFactory.getLogger(PacketProcessor.class);
|
||||
private static final Map<String, PacketProcessor> 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());
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user