From e7b5120661e5da0351293555632891bc80de0a66 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Tue, 15 Jun 2021 23:56:53 +0300 Subject: [PATCH] refactoring --- ...rocessor.java => ProtocolHandlersBus.java} | 4 +- .../handler/ProtocolInboundHandler.java | 4 +- server-new/src/main/java/mc/server/Main.java | 61 ++++--------------- .../src/main/java/mc/server/NettyServer.java | 6 +- .../java/mc/server/di/ProcessorModule.java | 33 ++++++++++ .../java/mc/server/di/ServerComponent.java | 9 ++- .../main/java/mc/server/di/ServerModule.java | 10 +-- .../mc/server/processor/PacketProcessor.java | 8 +++ .../server/processor/ProcessorHandshake.java | 19 ++++++ .../mc/server/processor/ProcessorStatus.java | 49 +++++++++++++++ 10 files changed, 138 insertions(+), 65 deletions(-) rename protocol-new/src/main/java/mc/protocol/handler/{PacketProcessor.java => ProtocolHandlersBus.java} (82%) create mode 100644 server-new/src/main/java/mc/server/di/ProcessorModule.java create mode 100644 server-new/src/main/java/mc/server/processor/PacketProcessor.java create mode 100644 server-new/src/main/java/mc/server/processor/ProcessorHandshake.java create mode 100644 server-new/src/main/java/mc/server/processor/ProcessorStatus.java diff --git a/protocol-new/src/main/java/mc/protocol/handler/PacketProcessor.java b/protocol-new/src/main/java/mc/protocol/handler/ProtocolHandlersBus.java similarity index 82% rename from protocol-new/src/main/java/mc/protocol/handler/PacketProcessor.java rename to protocol-new/src/main/java/mc/protocol/handler/ProtocolHandlersBus.java index 8413988..4d7f7aa 100644 --- a/protocol-new/src/main/java/mc/protocol/handler/PacketProcessor.java +++ b/protocol-new/src/main/java/mc/protocol/handler/ProtocolHandlersBus.java @@ -6,11 +6,11 @@ import mc.protocol.packets.ClientSidePacket; import mc.protocol.utils.Table; @SuppressWarnings({ "rawtypes", "unchecked" }) -public class PacketProcessor { +public class ProtocolHandlersBus { private final Table, Handler> table = new Table<>(); - public

PacketProcessor addHandler(State state, Class

packetClass, Handler

handler) { + public

ProtocolHandlersBus addHandler(State state, Class

packetClass, Handler

handler) { table.put(state, packetClass, handler); return this; } diff --git a/protocol-new/src/main/java/mc/protocol/handler/ProtocolInboundHandler.java b/protocol-new/src/main/java/mc/protocol/handler/ProtocolInboundHandler.java index a45ddfd..e5ef4e9 100644 --- a/protocol-new/src/main/java/mc/protocol/handler/ProtocolInboundHandler.java +++ b/protocol-new/src/main/java/mc/protocol/handler/ProtocolInboundHandler.java @@ -17,12 +17,12 @@ public class ProtocolInboundHandler extends SimpleChannelInboundHandler processor.setup(serverComponent.getProtocolHandlersBus())); - Config config = configComponent.getConfig(); NettyServer server = serverComponent.getNettyServer(); - log.info("Server starting: {}:{}", config.getString("server.host"), config.getInt("server.port")); - server.start(config.getString("server.host"), config.getInt("server.port")); + String host = configComponent.getConfig().getString("server.host"); + int port = configComponent.getConfig().getInt("server.port"); + + log.info("Server starting: {}:{}", host, port); + server.start(host, port); } //TODO нужно продумать как этот метод сделать доступным для расширенных версий сервера @@ -114,37 +108,4 @@ public class Main { URL url = Objects.requireNonNull(Main.class.getResource("/logback-default.xml")); return Paths.get(url.toURI()); } - - private static void setupPacketProcessor(ServerComponent serverComponent, ConfigComponent configComponent) { - PacketProcessor packetProcessor = serverComponent.getPacketProcessor(); - - packetProcessor.addHandler(State.HANDSHAKING, HandshakePacket.class, - (ctx, packet) -> ctx.channel().attr(ProtocolAttributes.STATE).set(packet.getNextState())); - - setupStatusPacketProcessor(packetProcessor, configComponent); - } - - private static void setupStatusPacketProcessor(PacketProcessor packetProcessor, ConfigComponent configComponent) { - Config config = configComponent.getConfig(); - - packetProcessor - .addHandler(State.STATUS, KeepAlivePacket.class, (ctx, packet) -> { - ctx.writeAndFlush(packet); - ctx.close(); - }) - .addHandler(State.STATUS, StatusServerRequestPacket.class, (ctx, packet) -> { - ServerInfo serverInfo = new ServerInfo(); - serverInfo.version().name(ProtocolConstant.PROTOCOL_NAME); - serverInfo.version().protocol(ProtocolConstant.PROTOCOL_NUMBER); - serverInfo.players().max(config.getInt("players.max-online")); - serverInfo.players().online(config.getInt("players.fake-online.value")); - serverInfo.players().sample(Collections.emptyList()); - serverInfo.description(TextSerializer.fromPlain(config.getString("motd"))); - - StatusServerResponse response = new StatusServerResponse(); - response.setInfo(ServerInfoSerializer.toStringPlain(serverInfo)); - - ctx.writeAndFlush(response); - }); - } } diff --git a/server-new/src/main/java/mc/server/NettyServer.java b/server-new/src/main/java/mc/server/NettyServer.java index adb11fc..4dcc4d8 100644 --- a/server-new/src/main/java/mc/server/NettyServer.java +++ b/server-new/src/main/java/mc/server/NettyServer.java @@ -9,7 +9,7 @@ import io.netty.handler.logging.LogLevel; import io.netty.handler.logging.LoggingHandler; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import mc.protocol.handler.PacketProcessor; +import mc.protocol.handler.ProtocolHandlersBus; import mc.protocol.handler.ProtocolInboundHandler; import mc.protocol.handler.codec.ProtocolDecoder; import mc.protocol.handler.codec.ProtocolEncoder; @@ -21,7 +21,7 @@ import javax.annotation.Nonnull; @RequiredArgsConstructor public class NettyServer { - private final PacketProcessor packetProcessor; + private final ProtocolHandlersBus protocolHandlersBus; public void start(String host, int port) { try { @@ -46,7 +46,7 @@ public class NettyServer { .addLast("logger", new LoggingHandler(LogLevel.DEBUG)) .addLast("packet_decoder", new ProtocolDecoder()) .addLast("packet_encoder", new ProtocolEncoder()) - .addLast("packet_handler", new ProtocolInboundHandler(packetProcessor)); + .addLast("packet_handler", new ProtocolInboundHandler(protocolHandlersBus)); } }); diff --git a/server-new/src/main/java/mc/server/di/ProcessorModule.java b/server-new/src/main/java/mc/server/di/ProcessorModule.java new file mode 100644 index 0000000..cd257c5 --- /dev/null +++ b/server-new/src/main/java/mc/server/di/ProcessorModule.java @@ -0,0 +1,33 @@ +package mc.server.di; + +import com.typesafe.config.Config; +import dagger.Module; +import dagger.Provides; +import dagger.multibindings.IntoSet; +import lombok.RequiredArgsConstructor; +import mc.server.processor.PacketProcessor; +import mc.server.processor.ProcessorHandshake; +import mc.server.processor.ProcessorStatus; + +import javax.inject.Singleton; + +@Module +@RequiredArgsConstructor +public class ProcessorModule { + + private final Config config; + + @Provides + @IntoSet + @Singleton + PacketProcessor provideProcessorHadshake() { + return new ProcessorHandshake(); + } + + @Provides + @IntoSet + @Singleton + PacketProcessor provideProcessorStatus() { + return new ProcessorStatus(config); + } +} diff --git a/server-new/src/main/java/mc/server/di/ServerComponent.java b/server-new/src/main/java/mc/server/di/ServerComponent.java index cd1b738..e68ff74 100644 --- a/server-new/src/main/java/mc/server/di/ServerComponent.java +++ b/server-new/src/main/java/mc/server/di/ServerComponent.java @@ -1,15 +1,18 @@ package mc.server.di; import dagger.Component; -import mc.protocol.handler.PacketProcessor; +import mc.protocol.handler.ProtocolHandlersBus; import mc.server.NettyServer; +import mc.server.processor.PacketProcessor; import javax.inject.Singleton; +import java.util.Set; -@Component(modules = ServerModule.class) +@Component(modules = {ServerModule.class, ProcessorModule.class}) @Singleton public interface ServerComponent { - PacketProcessor getPacketProcessor(); + ProtocolHandlersBus getProtocolHandlersBus(); NettyServer getNettyServer(); + Set getProcessors(); } diff --git a/server-new/src/main/java/mc/server/di/ServerModule.java b/server-new/src/main/java/mc/server/di/ServerModule.java index 82467d9..b08e87a 100644 --- a/server-new/src/main/java/mc/server/di/ServerModule.java +++ b/server-new/src/main/java/mc/server/di/ServerModule.java @@ -2,7 +2,7 @@ package mc.server.di; import dagger.Module; import dagger.Provides; -import mc.protocol.handler.PacketProcessor; +import mc.protocol.handler.ProtocolHandlersBus; import mc.server.NettyServer; import javax.inject.Singleton; @@ -12,13 +12,13 @@ public class ServerModule { @Provides @Singleton - PacketProcessor providePacketProcessor() { - return new PacketProcessor(); + ProtocolHandlersBus providePacketProcessor() { + return new ProtocolHandlersBus(); } @Provides @Singleton - NettyServer provideNettyServer(PacketProcessor packetProcessor) { - return new NettyServer(packetProcessor); + NettyServer provideNettyServer(ProtocolHandlersBus protocolHandlersBus) { + return new NettyServer(protocolHandlersBus); } } diff --git a/server-new/src/main/java/mc/server/processor/PacketProcessor.java b/server-new/src/main/java/mc/server/processor/PacketProcessor.java new file mode 100644 index 0000000..aa6fcf2 --- /dev/null +++ b/server-new/src/main/java/mc/server/processor/PacketProcessor.java @@ -0,0 +1,8 @@ +package mc.server.processor; + +import mc.protocol.handler.ProtocolHandlersBus; + +public interface PacketProcessor { + + void setup(ProtocolHandlersBus protocolHandlersBus); +} diff --git a/server-new/src/main/java/mc/server/processor/ProcessorHandshake.java b/server-new/src/main/java/mc/server/processor/ProcessorHandshake.java new file mode 100644 index 0000000..145a2ec --- /dev/null +++ b/server-new/src/main/java/mc/server/processor/ProcessorHandshake.java @@ -0,0 +1,19 @@ +package mc.server.processor; + +import io.netty.channel.ChannelHandlerContext; +import mc.protocol.ProtocolAttributes; +import mc.protocol.State; +import mc.protocol.handler.ProtocolHandlersBus; +import mc.protocol.packets.handshaking.client.HandshakePacket; + +public class ProcessorHandshake implements PacketProcessor { + + @Override + public void setup(ProtocolHandlersBus protocolHandlersBus) { + protocolHandlersBus.addHandler(State.HANDSHAKING, HandshakePacket.class, this::handshake); + } + + private void handshake(ChannelHandlerContext ctx, HandshakePacket packet) { + ctx.channel().attr(ProtocolAttributes.STATE).set(packet.getNextState()); + } +} diff --git a/server-new/src/main/java/mc/server/processor/ProcessorStatus.java b/server-new/src/main/java/mc/server/processor/ProcessorStatus.java new file mode 100644 index 0000000..687dcfb --- /dev/null +++ b/server-new/src/main/java/mc/server/processor/ProcessorStatus.java @@ -0,0 +1,49 @@ +package mc.server.processor; + +import com.typesafe.config.Config; +import io.netty.channel.ChannelHandlerContext; +import lombok.RequiredArgsConstructor; +import mc.protocol.ProtocolConstant; +import mc.protocol.State; +import mc.protocol.handler.ProtocolHandlersBus; +import mc.protocol.model.ServerInfo; +import mc.protocol.model.ServerInfoSerializer; +import mc.protocol.model.text.TextSerializer; +import mc.protocol.packets.KeepAlivePacket; +import mc.protocol.packets.status.client.StatusServerRequestPacket; +import mc.protocol.packets.status.server.StatusServerResponse; + +import java.util.Collections; + +@RequiredArgsConstructor +public class ProcessorStatus implements PacketProcessor { + + private final Config config; + + @Override + public void setup(ProtocolHandlersBus protocolHandlersBus) { + protocolHandlersBus + .addHandler(State.STATUS, KeepAlivePacket.class, this::keepAlive) + .addHandler(State.STATUS, StatusServerRequestPacket.class, this::statusRequest); + } + + private void keepAlive(ChannelHandlerContext ctx, KeepAlivePacket packet) { + ctx.writeAndFlush(packet); + ctx.close(); + } + + private void statusRequest(ChannelHandlerContext ctx, StatusServerRequestPacket packet) { + ServerInfo serverInfo = new ServerInfo(); + serverInfo.version().name(ProtocolConstant.PROTOCOL_NAME); + serverInfo.version().protocol(ProtocolConstant.PROTOCOL_NUMBER); + serverInfo.players().max(config.getInt("players.max-online")); + serverInfo.players().online(config.getInt("players.fake-online.value")); + serverInfo.players().sample(Collections.emptyList()); + serverInfo.description(TextSerializer.fromPlain(config.getString("motd"))); + + StatusServerResponse response = new StatusServerResponse(); + response.setInfo(ServerInfoSerializer.toStringPlain(serverInfo)); + + ctx.writeAndFlush(response); + } +}