diff --git a/src/main/java/com/alterdekim/hearthhack/component/TcpConnection.java b/src/main/java/com/alterdekim/hearthhack/component/TcpConnection.java index 9adffde..e0ecb2e 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/TcpConnection.java +++ b/src/main/java/com/alterdekim/hearthhack/component/TcpConnection.java @@ -10,9 +10,7 @@ import javax.net.ssl.SSLSocket; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.OutputStream; -import java.util.HashMap; import java.util.Map; -import java.util.Set; @Slf4j public class TcpConnection extends Thread { @@ -24,11 +22,11 @@ public class TcpConnection extends Thread { private int token; @Getter - private Map processors; + private final Map processors; - public TcpConnection(SSLSocket socket, Set> processorClasses) { + public TcpConnection(SSLSocket socket, Map processors) { this.fromClient = socket; - this.init(processorClasses); + this.processors = processors; this.start(); } @@ -47,18 +45,6 @@ public class TcpConnection extends Thread { this.outToClient.flush(); } - private void init(Set> classes) { - this.processors = new HashMap<>(); - classes.forEach(c -> { - try { - var ci = c.getDeclaredConstructor().newInstance(); - this.processors.put(ci.getProcessorId(), ci); - } catch (Exception e) { - log.error(e.getMessage()); - } - }); - } - private void processPacket( BattleNetPacket packet ) { try { Processor is = this.processors.get(Integer.parseUnsignedInt(Integer.toUnsignedString(packet.getHeader().getServiceId()))); diff --git a/src/main/java/com/alterdekim/hearthhack/component/TcpServer.java b/src/main/java/com/alterdekim/hearthhack/component/TcpServer.java index 70a55e5..4255f82 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/TcpServer.java +++ b/src/main/java/com/alterdekim/hearthhack/component/TcpServer.java @@ -2,9 +2,9 @@ package com.alterdekim.hearthhack.component; import com.alterdekim.hearthhack.component.processor.Processor; +import com.alterdekim.hearthhack.reflect.ReflectionLoader; import com.alterdekim.hearthhack.util.Util; import lombok.extern.slf4j.Slf4j; -import org.reflections.Reflections; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -17,19 +17,17 @@ import java.util.Set; @Slf4j @Component -public class TcpServer { +public class TcpServer extends ReflectionLoader { private final int socketPort = 1119; private SSLServerSocket serverSocket; private List connections; - private Set> processorClasses; - @Scheduled(fixedDelay = 5000) private void start() { try { - processorClasses = new Reflections(this.getClass().getPackageName()).getSubTypesOf(Processor.class); + this.initReflect(Processor.class); if( serverSocket != null && !serverSocket.isClosed() ) { serverSocket.close(); serverSocket = null; @@ -44,7 +42,7 @@ public class TcpServer { while(true) { SSLSocket s = (SSLSocket) serverSocket.accept(); - TcpConnection c = new TcpConnection(s, processorClasses); + TcpConnection c = new TcpConnection(s, this.getParsers()); connections.add(c); log.info("New Connection Established From {}", s.getInetAddress().toString()); } diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/GameUtilitiesProcessor.java b/src/main/java/com/alterdekim/hearthhack/component/processor/GameUtilitiesProcessor.java index 0e0e265..4f05b04 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/GameUtilitiesProcessor.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/GameUtilitiesProcessor.java @@ -4,25 +4,23 @@ package com.alterdekim.hearthhack.component.processor; import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; import com.alterdekim.hearthhack.component.processor.client.request.ClientRequestParser; +import com.alterdekim.hearthhack.reflect.ReflectionLoader; import com.alterdekim.hearthhack.util.*; import com.google.protobuf.InvalidProtocolBufferException; import lombok.extern.slf4j.Slf4j; -import org.reflections.Reflections; - -import java.util.HashMap; import java.util.Map; import java.util.Optional; -import java.util.Set; @Slf4j public class GameUtilitiesProcessor extends Processor { - private Map parsers; + private ReflectionLoader parsers; public GameUtilitiesProcessor() { this.setProcessorId(9); - this.init(); + this.parsers = new ReflectionLoader<>(); + this.parsers.initReflect(ClientRequestParser.class); } private ClientRequestBody parseClientRequest(Protocol.ClientRequest request) { @@ -86,19 +84,6 @@ public class GameUtilitiesProcessor extends Processor { }); } - private void init() { - this.parsers = new HashMap<>(); - Set> classes = new Reflections(ClientRequestParser.class.getPackageName()).getSubTypesOf(ClientRequestParser.class); - classes.forEach(c -> { - try { - var ci = c.getDeclaredConstructor().newInstance(); - this.parsers.put(ci.getId(), ci); - } catch (Exception e) { - log.error(e.getMessage()); - } - }); - } - private void processClientRequest(BattleNetPacket packet, TcpConnection conn) throws Exception { Protocol.ClientRequest cr = Protocol.ClientRequest.parseFrom(packet.getBody()); @@ -163,11 +148,11 @@ public class GameUtilitiesProcessor extends Processor { conn.send(new BattleNetPacket(header, new byte[0])); } - if( !this.parsers.containsKey(type) ) { + if( !this.parsers.getParsers().containsKey(type) ) { log.error("Unknown ClientRequest type #{}", type); return; } - this.parsers.get(type).parse(packet, p, conn); + this.parsers.getParsers().get(type).parse(packet, p, conn); } @Override diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/ClientRequestParser.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/ClientRequestParser.java index 3b0053a..c412f68 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/ClientRequestParser.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/ClientRequestParser.java @@ -1,14 +1,16 @@ package com.alterdekim.hearthhack.component.processor.client.request; import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.reflect.AbstractParser; import com.alterdekim.hearthhack.util.BattleNetPacket; import com.alterdekim.hearthhack.util.ClientRequestBody; import lombok.NoArgsConstructor; @NoArgsConstructor -public abstract class ClientRequestParser { +public abstract class ClientRequestParser implements AbstractParser { public abstract void parse(BattleNetPacket packet, ClientRequestBody body, TcpConnection conn) throws Exception; + @Override public abstract int getId(); } diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/AccountLicensesInfo.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/AccountLicensesInfo.java index a4e311b..2402301 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/AccountLicensesInfo.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/AccountLicensesInfo.java @@ -28,7 +28,7 @@ public class AccountLicensesInfo extends GenericParser { } @Override - public GetAccountInfoRequest getId() { - return ACCOUNT_LICENSES; + public int getId() { + return ACCOUNT_LICENSES.getValue(); } } diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/AvailableFeatures.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/AvailableFeatures.java index 0cb9f99..06bb74c 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/AvailableFeatures.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/AvailableFeatures.java @@ -43,7 +43,7 @@ public class AvailableFeatures extends GenericParser { } @Override - public GetAccountInfoRequest getId() { - return FEATURES; + public int getId() { + return FEATURES.getValue(); } } diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/Boosters.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/Boosters.java index 01cb61a..77a292f 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/Boosters.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/Boosters.java @@ -28,7 +28,7 @@ public class Boosters extends GenericParser { } @Override - public GetAccountInfoRequest getId() { - return BOOSTERS; + public int getId() { + return BOOSTERS.getValue(); } } diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/CardBacks.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/CardBacks.java index 752cf8b..31189f2 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/CardBacks.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/CardBacks.java @@ -30,7 +30,7 @@ public class CardBacks extends GenericParser { } @Override - public GetAccountInfoRequest getId() { - return CARD_BACKS; + public int getId() { + return CARD_BACKS.getValue(); } } diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/CardValues.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/CardValues.java index f6a70fc..8d42fd0 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/CardValues.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/CardValues.java @@ -43,7 +43,7 @@ public class CardValues extends GenericParser { } @Override - public GetAccountInfoRequest getId() { - return CARD_VALUES; + public int getId() { + return CARD_VALUES.getValue(); } } diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/ClientOptions.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/ClientOptions.java index c5dfafc..816c62f 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/ClientOptions.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/ClientOptions.java @@ -50,7 +50,7 @@ public class ClientOptions extends GenericParser { } @Override - public GetAccountInfoRequest getId() { - return CLIENT_OPTIONS; + public int getId() { + return CLIENT_OPTIONS.getValue(); } } diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/Collection.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/Collection.java index af728dd..9379e3f 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/Collection.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/Collection.java @@ -28,7 +28,7 @@ public class Collection extends GenericParser { } @Override - public GetAccountInfoRequest getId() { - return COLLECTION; + public int getId() { + return COLLECTION.getValue(); } } diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/DeckList.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/DeckList.java index 0371f2d..5715a92 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/DeckList.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/DeckList.java @@ -79,7 +79,7 @@ public class DeckList extends GenericParser { } @Override - public GetAccountInfoRequest getId() { - return DECK_LIST; + public int getId() { + return DECK_LIST.getValue(); } } diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/DustBalance.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/DustBalance.java index 994afe8..766da58 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/DustBalance.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/DustBalance.java @@ -31,7 +31,7 @@ public class DustBalance extends GenericParser { } @Override - public GetAccountInfoRequest getId() { - return ARCANE_DUST_BALANCE; + public int getId() { + return ARCANE_DUST_BALANCE.getValue(); } } diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/FavoriteHeroes.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/FavoriteHeroes.java index 8375abf..6ab88f1 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/FavoriteHeroes.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/FavoriteHeroes.java @@ -74,7 +74,7 @@ public class FavoriteHeroes extends GenericParser { } @Override - public GetAccountInfoRequest getId() { - return FAVORITE_HEROES; + public int getId() { + return FAVORITE_HEROES.getValue(); } } diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/GeneralGenericParser.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/GeneralGenericParser.java index 9e3c7e5..50acf20 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/GeneralGenericParser.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/GeneralGenericParser.java @@ -2,44 +2,24 @@ package com.alterdekim.hearthhack.component.processor.client.request.generic; import com.alterdekim.Protocol; import com.alterdekim.hearthhack.component.TcpConnection; +import com.alterdekim.hearthhack.reflect.ReflectionLoader; import com.alterdekim.hearthhack.util.GetAccountInfoRequest; import lombok.extern.slf4j.Slf4j; -import org.reflections.Reflections; - -import java.util.HashMap; -import java.util.Map; -import java.util.Set; @Slf4j -public class GeneralGenericParser { - - private Map parsers; - +public class GeneralGenericParser extends ReflectionLoader { public GeneralGenericParser() { - init(); - } - - private void init() { - this.parsers = new HashMap<>(); - Set> classes = new Reflections(this.getClass().getPackageName()).getSubTypesOf(GenericParser.class); - classes.forEach(c -> { - try { - var ci = c.getDeclaredConstructor().newInstance(); - this.parsers.put(ci.getId(), ci); - } catch (Exception e) { - log.error(e.getMessage()); - } - }); + this.initReflect(GenericParser.class); } public void parseGenericRequest(int token, Protocol.UtilGenericRequest request, TcpConnection conn) { GetAccountInfoRequest req = GetAccountInfoRequest.parseFromInt(request.getRequestSubId()); - if( !this.parsers.containsKey(req) ) { + if( !this.getParsers().containsKey(req.getValue()) ) { log.warn("Unknown generic request: {}", req); return; } try { - this.parsers.get(req).parseGenericRequest(token, conn); + this.getParsers().get(req.getValue()).parseGenericRequest(token, conn); } catch (Exception e) { log.error(e.getMessage()); } diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/GoldBalance.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/GoldBalance.java index ab5c333..3dffc0e 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/GoldBalance.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/GoldBalance.java @@ -33,7 +33,7 @@ public class GoldBalance extends GenericParser{ } @Override - public GetAccountInfoRequest getId() { - return GOLD_BALANCE; + public int getId() { + return GOLD_BALANCE.getValue(); } } diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/HeroXP.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/HeroXP.java index 1dd3d5c..38b1391 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/HeroXP.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/HeroXP.java @@ -147,7 +147,7 @@ public class HeroXP extends GenericParser { } @Override - public GetAccountInfoRequest getId() { - return HERO_XP; + public int getId() { + return HERO_XP.getValue(); } } diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/MedalInfo.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/MedalInfo.java index d0ea379..5a56b19 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/MedalInfo.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/MedalInfo.java @@ -49,7 +49,7 @@ public class MedalInfo extends GenericParser { } @Override - public GetAccountInfoRequest getId() { - return MEDAL_INFO; + public int getId() { + return MEDAL_INFO.getValue(); } } diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/NotSoMassiveLoginReply.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/NotSoMassiveLoginReply.java index 08728f9..74374cd 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/NotSoMassiveLoginReply.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/NotSoMassiveLoginReply.java @@ -130,7 +130,7 @@ public class NotSoMassiveLoginReply extends GenericParser { } @Override - public GetAccountInfoRequest getId() { - return NOT_SO_MASSIVE_LOGIN; + public int getId() { + return NOT_SO_MASSIVE_LOGIN.getValue(); } } diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/PlayerRecords.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/PlayerRecords.java index 54b56ed..8c3de5f 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/PlayerRecords.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/PlayerRecords.java @@ -53,7 +53,7 @@ public class PlayerRecords extends GenericParser { } @Override - public GetAccountInfoRequest getId() { - return PLAYER_RECORD; + public int getId() { + return PLAYER_RECORD.getValue(); } } diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/ProfileNotices.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/ProfileNotices.java index f266823..19b98c6 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/ProfileNotices.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/ProfileNotices.java @@ -27,7 +27,7 @@ public class ProfileNotices extends GenericParser { } @Override - public GetAccountInfoRequest getId() { - return NOTICES; + public int getId() { + return NOTICES.getValue(); } } diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/ProfileProgress.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/ProfileProgress.java index 524cbee..fd5a1dd 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/ProfileProgress.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/ProfileProgress.java @@ -31,7 +31,7 @@ public class ProfileProgress extends GenericParser { } @Override - public GetAccountInfoRequest getId() { - return CAMPAIGN_INFO; + public int getId() { + return CAMPAIGN_INFO.getValue(); } } diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/RewardProgress.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/RewardProgress.java index 7ebf23c..3e7308e 100644 --- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/RewardProgress.java +++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/RewardProgress.java @@ -51,7 +51,7 @@ public class RewardProgress extends GenericParser { } @Override - public GetAccountInfoRequest getId() { - return REWARD_PROGRESS; + public int getId() { + return REWARD_PROGRESS.getValue(); } } diff --git a/src/main/java/com/alterdekim/hearthhack/reflect/ReflectionLoader.java b/src/main/java/com/alterdekim/hearthhack/reflect/ReflectionLoader.java index 1ff7ae8..d9c2a95 100644 --- a/src/main/java/com/alterdekim/hearthhack/reflect/ReflectionLoader.java +++ b/src/main/java/com/alterdekim/hearthhack/reflect/ReflectionLoader.java @@ -1,5 +1,6 @@ package com.alterdekim.hearthhack.reflect; +import com.alterdekim.hearthhack.component.processor.Processor; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.reflections.Reflections; @@ -8,14 +9,14 @@ import java.util.HashMap; import java.util.Map; import java.util.Set; +@Getter @Slf4j public class ReflectionLoader { - @Getter private Map parsers; public void initReflect(Class vClass) { this.parsers = new HashMap<>(); - Set> processorClasses = new Reflections(this.getClass().getPackageName()).getSubTypesOf(vClass); + Set> processorClasses = new Reflections(vClass.getPackageName()).getSubTypesOf(vClass); processorClasses.forEach(c -> { try { var ci = c.getDeclaredConstructor().newInstance();