From a9b053765e0a9f9cd9d1504072e60629db63109e Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Sat, 24 Apr 2021 21:29:51 +0300 Subject: [PATCH] dummy server --- build.gradle | 5 ++ src/main/java/mc/server/Main.java | 7 ++ .../java/mc/server/di/NetworkComponent.java | 10 +++ src/main/java/mc/server/di/NetworkModule.java | 71 +++++++++++++++++++ src/main/java/mc/server/network/Server.java | 6 ++ .../mc/server/network/netty/NettyServer.java | 27 +++++++ 6 files changed, 126 insertions(+) create mode 100644 src/main/java/mc/server/di/NetworkComponent.java create mode 100644 src/main/java/mc/server/di/NetworkModule.java create mode 100644 src/main/java/mc/server/network/Server.java create mode 100644 src/main/java/mc/server/network/netty/NettyServer.java diff --git a/build.gradle b/build.gradle index 23c4b67..7e6b85d 100644 --- a/build.gradle +++ b/build.gradle @@ -38,6 +38,11 @@ dependencies { implementation libs.dagger2.implementation annotationProcessor libs.dagger2.annotationProcessor + + implementation platform('io.projectreactor:reactor-bom:2020.0.6') + implementation 'io.projectreactor:reactor-core' + + implementation 'io.netty:netty-all:4.1.22.Final' } application.mainClassName = 'mc.server.Main' \ No newline at end of file diff --git a/src/main/java/mc/server/Main.java b/src/main/java/mc/server/Main.java index bde95b3..bd5f9f7 100644 --- a/src/main/java/mc/server/Main.java +++ b/src/main/java/mc/server/Main.java @@ -1,11 +1,18 @@ package mc.server; import lombok.extern.slf4j.Slf4j; +import mc.server.di.DaggerNetworkComponent; +import mc.server.di.NetworkComponent; +import mc.server.network.Server; @Slf4j public class Main { public static void main(String[] args) { log.info("hello"); + + NetworkComponent networkComponent = DaggerNetworkComponent.create(); + Server server = networkComponent.getServer(); + server.start("127.0.0.1", 25565); } } diff --git a/src/main/java/mc/server/di/NetworkComponent.java b/src/main/java/mc/server/di/NetworkComponent.java new file mode 100644 index 0000000..ae73ed9 --- /dev/null +++ b/src/main/java/mc/server/di/NetworkComponent.java @@ -0,0 +1,10 @@ +package mc.server.di; + +import dagger.Component; +import mc.server.network.Server; + +@Component(modules = NetworkModule.class) +public interface NetworkComponent { + + Server getServer(); +} diff --git a/src/main/java/mc/server/di/NetworkModule.java b/src/main/java/mc/server/di/NetworkModule.java new file mode 100644 index 0000000..aae8cb4 --- /dev/null +++ b/src/main/java/mc/server/di/NetworkModule.java @@ -0,0 +1,71 @@ +package mc.server.di; + +import dagger.Module; +import dagger.Provides; +import io.netty.bootstrap.ServerBootstrap; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.SocketChannel; +import io.netty.channel.socket.nio.NioServerSocketChannel; +import io.netty.handler.logging.LoggingHandler; +import mc.server.network.Server; +import mc.server.network.netty.NettyServer; + +import javax.inject.Named; +import java.util.Collections; +import java.util.List; + +@Module +public class NetworkModule { + + @Provides + Server provideServer(ServerBootstrap serverBootstrap) { + return new NettyServer(serverBootstrap); + } + + @Provides + ServerBootstrap provideServerBootstrap( + @Named("boss-group") EventLoopGroup bossGroup, + @Named("worker-group") EventLoopGroup workerGroup, + ChannelInitializer channelChannelInitializer + ) { + ServerBootstrap bootstrap = new ServerBootstrap(); + + bootstrap.group(bossGroup, workerGroup) + .channel(NioServerSocketChannel.class) + .childHandler(channelChannelInitializer); + + return bootstrap; + } + + @Provides + @Named("boss-group") + EventLoopGroup provideBossGroup() { + return new NioEventLoopGroup(1); + } + + @Provides + @Named("worker-group") + EventLoopGroup provideWorkerGroup() { + return new NioEventLoopGroup(); + } + + @Provides + ChannelInitializer provideChannelChannelInitializer(List channelHandlerList) { + return new ChannelInitializer<>() { + @Override + protected void initChannel(SocketChannel socketChannel) { + final ChannelPipeline pipeline = socketChannel.pipeline(); + channelHandlerList.forEach(pipeline::addLast); + } + }; + } + + @Provides + List provideChannelHandlerList() { + return Collections.singletonList(new LoggingHandler()); + } +} diff --git a/src/main/java/mc/server/network/Server.java b/src/main/java/mc/server/network/Server.java new file mode 100644 index 0000000..f1464f8 --- /dev/null +++ b/src/main/java/mc/server/network/Server.java @@ -0,0 +1,6 @@ +package mc.server.network; + +public interface Server { + + void start(String host, int port); +} diff --git a/src/main/java/mc/server/network/netty/NettyServer.java b/src/main/java/mc/server/network/netty/NettyServer.java new file mode 100644 index 0000000..4c3d19e --- /dev/null +++ b/src/main/java/mc/server/network/netty/NettyServer.java @@ -0,0 +1,27 @@ +package mc.server.network.netty; + +import io.netty.bootstrap.ServerBootstrap; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import mc.server.network.Server; + +@Slf4j +@RequiredArgsConstructor +public class NettyServer implements Server { + + private final ServerBootstrap serverBootstrap; + + @Override + public void start(String host, int port) { + log.info("Network starting: {}:{}", host, port); + + try { + serverBootstrap.bind(host, port) + .sync().channel().closeFuture().sync(); + } catch (InterruptedException e) { + if (log.isTraceEnabled()) { + log.trace("{}: {}", e.getClass().getSimpleName(), e.getMessage(), e); + } + } + } +}