Route chr creation to dummy CharacterCreator

This commit is contained in:
P0nk
2024-09-25 07:21:27 +02:00
parent a9967d53b1
commit 767c4402e7
5 changed files with 38 additions and 20 deletions

View File

@@ -3,16 +3,16 @@ package client.creator;
import client.inventory.Item; import client.inventory.Item;
import constants.id.ItemId; import constants.id.ItemId;
import constants.id.MapId; import constants.id.MapId;
import database.character.CharacterSaver; import database.character.CharacterRepository;
public class CharacterCreator { public class CharacterCreator {
private final CharacterSaver chrSaver; private final CharacterRepository chrRepository;
public CharacterCreator(CharacterSaver chrSaver) { public CharacterCreator(CharacterRepository chrRepository) {
this.chrSaver = chrSaver; this.chrRepository = chrRepository;
} }
public boolean createBeginner(NewCharacterSpec spec, int accountId, int worldId) { public boolean createNew(NewCharacterSpec spec, int accountId, int worldId) {
int mapId = getStartingMap(spec.type()); int mapId = getStartingMap(spec.type());
Item guide = getStarterGuide(spec.type()); Item guide = getStarterGuide(spec.type());
// TODO, save: // TODO, save:

View File

@@ -1,11 +1,13 @@
package net; package net;
import client.command.CommandsExecutor; import client.command.CommandsExecutor;
import client.creator.CharacterCreator;
import client.processor.action.MakerProcessor; import client.processor.action.MakerProcessor;
import client.processor.npc.FredrickProcessor; import client.processor.npc.FredrickProcessor;
import database.character.CharacterLoader; import database.character.CharacterLoader;
import database.character.CharacterSaver; import database.character.CharacterSaver;
import database.drop.DropProvider; import database.drop.DropProvider;
import lombok.Builder;
import server.shop.ShopFactory; import server.shop.ShopFactory;
import service.BanService; import service.BanService;
import service.NoteService; import service.NoteService;
@@ -16,14 +18,16 @@ import java.util.Objects;
/** /**
* @author Ponk * @author Ponk
*/ */
@Builder
public record ChannelDependencies( public record ChannelDependencies(
CharacterLoader characterLoader, CharacterSaver characterSaver, NoteService noteService, CharacterCreator characterCreator, CharacterLoader characterLoader, CharacterSaver characterSaver,
FredrickProcessor fredrickProcessor, MakerProcessor makerProcessor, DropProvider dropProvider, NoteService noteService, FredrickProcessor fredrickProcessor, MakerProcessor makerProcessor,
CommandsExecutor commandsExecutor, ShopFactory shopFactory, TransitionService transitionService, DropProvider dropProvider, CommandsExecutor commandsExecutor, ShopFactory shopFactory,
BanService banService TransitionService transitionService, BanService banService
) { ) {
public ChannelDependencies { public ChannelDependencies {
Objects.requireNonNull(characterCreator);
Objects.requireNonNull(characterLoader); Objects.requireNonNull(characterLoader);
Objects.requireNonNull(characterSaver); Objects.requireNonNull(characterSaver);
Objects.requireNonNull(noteService); Objects.requireNonNull(noteService);

View File

@@ -286,7 +286,7 @@ public final class PacketProcessor {
registerHandler(RecvOpcode.SERVERLIST_REQUEST, new ServerlistRequestHandler()); registerHandler(RecvOpcode.SERVERLIST_REQUEST, new ServerlistRequestHandler());
registerHandler(RecvOpcode.SERVERSTATUS_REQUEST, new ServerStatusRequestHandler()); registerHandler(RecvOpcode.SERVERSTATUS_REQUEST, new ServerStatusRequestHandler());
registerHandler(RecvOpcode.CHECK_CHAR_NAME, new CheckCharNameHandler()); registerHandler(RecvOpcode.CHECK_CHAR_NAME, new CheckCharNameHandler());
registerHandler(RecvOpcode.CREATE_CHAR, new CreateCharHandler()); registerHandler(RecvOpcode.CREATE_CHAR, new CreateCharHandler(channelDeps.characterCreator()));
registerHandler(RecvOpcode.DELETE_CHAR, new DeleteCharHandler()); registerHandler(RecvOpcode.DELETE_CHAR, new DeleteCharHandler());
registerHandler(RecvOpcode.VIEW_ALL_CHAR, new ViewAllCharHandler()); registerHandler(RecvOpcode.VIEW_ALL_CHAR, new ViewAllCharHandler());
registerHandler(RecvOpcode.PICK_ALL_CHAR, new ViewAllCharSelectedHandler()); registerHandler(RecvOpcode.PICK_ALL_CHAR, new ViewAllCharSelectedHandler());

View File

@@ -27,6 +27,7 @@ import client.Family;
import client.SkillFactory; import client.SkillFactory;
import client.command.CommandContext; import client.command.CommandContext;
import client.command.CommandsExecutor; import client.command.CommandsExecutor;
import client.creator.CharacterCreator;
import client.inventory.Item; import client.inventory.Item;
import client.inventory.ItemFactory; import client.inventory.ItemFactory;
import client.inventory.manipulator.CashIdGenerator; import client.inventory.manipulator.CashIdGenerator;
@@ -1004,24 +1005,29 @@ public class Server {
return hikariConfig; return hikariConfig;
} }
// TODO: set up proper dependency injection with a framework such as Dagger or Guice.
private ChannelDependencies registerChannelDependencies(PgDatabaseConnection connection) { private ChannelDependencies registerChannelDependencies(PgDatabaseConnection connection) {
CharacterRepository characterRepository = new CharacterRepository(); CharacterRepository characterRepository = new CharacterRepository();
MonsterCardRepository monsterCardRepository = new MonsterCardRepository(connection); MonsterCardRepository monsterCardRepository = new MonsterCardRepository(connection);
CharacterLoader characterLoader = new CharacterLoader(monsterCardRepository);
CharacterSaver characterSaver = new CharacterSaver(connection, characterRepository, monsterCardRepository); CharacterSaver characterSaver = new CharacterSaver(connection, characterRepository, monsterCardRepository);
TransitionService transitionService = new TransitionService(characterSaver); TransitionService transitionService = new TransitionService(characterSaver);
BanService banService = new BanService(transitionService);
NoteService noteService = new NoteService(new NoteDao(connection)); NoteService noteService = new NoteService(new NoteDao(connection));
MakerProcessor makerProcessor = new MakerProcessor(new MakerInfoProvider(new MakerRepository(connection)));
FredrickProcessor fredrickProcessor = new FredrickProcessor(noteService);
DropProvider dropProvider = new DropProvider(new DropRepository(connection)); DropProvider dropProvider = new DropProvider(new DropRepository(connection));
ShopFactory shopFactory = new ShopFactory(new ShopDao(connection)); ShopFactory shopFactory = new ShopFactory(new ShopDao(connection));
CommandContext commandContext = new CommandContext(null, dropProvider, shopFactory, ChannelDependencies channelDependencies = ChannelDependencies.builder()
characterSaver, transitionService); .characterCreator(new CharacterCreator(characterRepository))
CommandsExecutor commandsExecutor = new CommandsExecutor(commandContext); .characterLoader(new CharacterLoader(monsterCardRepository))
ChannelDependencies channelDependencies = new ChannelDependencies(characterLoader, characterSaver, noteService, .characterSaver(characterSaver)
fredrickProcessor, makerProcessor, dropProvider, commandsExecutor, shopFactory, transitionService, .noteService(noteService)
banService); .fredrickProcessor(new FredrickProcessor(noteService))
.makerProcessor(new MakerProcessor(new MakerInfoProvider(new MakerRepository(connection))))
.dropProvider(dropProvider)
.commandsExecutor(new CommandsExecutor(new CommandContext(null, dropProvider, shopFactory,
characterSaver, transitionService)))
.shopFactory(shopFactory)
.transitionService(transitionService)
.banService(new BanService(transitionService))
.build();
PacketProcessor.registerGameHandlerDependencies(channelDependencies); PacketProcessor.registerGameHandlerDependencies(channelDependencies);

View File

@@ -23,6 +23,7 @@ package net.server.handlers.login;
import client.Client; import client.Client;
import client.SkinColor; import client.SkinColor;
import client.creator.CharacterCreator;
import client.creator.JobType; import client.creator.JobType;
import client.creator.NewCharacterSpec; import client.creator.NewCharacterSpec;
import client.creator.novice.BeginnerCreator; import client.creator.novice.BeginnerCreator;
@@ -35,6 +36,11 @@ import tools.PacketCreator;
import java.util.Optional; import java.util.Optional;
public final class CreateCharHandler extends AbstractPacketHandler { public final class CreateCharHandler extends AbstractPacketHandler {
private final CharacterCreator characterCreator;
public CreateCharHandler(CharacterCreator characterCreator) {
this.characterCreator = characterCreator;
}
@Override @Override
public void handlePacket(InPacket p, Client c) { public void handlePacket(InPacket p, Client c) {
@@ -52,6 +58,8 @@ public final class CreateCharHandler extends AbstractPacketHandler {
.gender(p.readByte()) .gender(p.readByte())
.build(); .build();
characterCreator.createNew(spec, c.getAccID(), c.getWorld());
int status = switch (spec.type()) { int status = switch (spec.type()) {
case KNIGHT_OF_CYGNUS -> NoblesseCreator.createCharacter(c, spec.name(), spec.face(), spec.hair() + spec.hairColor(), case KNIGHT_OF_CYGNUS -> NoblesseCreator.createCharacter(c, spec.name(), spec.face(), spec.hair() + spec.hairColor(),
spec.skin().getId(), spec.topItemId(), spec.bottomItemId(), spec.shoesItemId(), spec.weaponItemId(), spec.skin().getId(), spec.topItemId(), spec.bottomItemId(), spec.shoesItemId(), spec.weaponItemId(),