diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..cbc34df --- /dev/null +++ b/pom.xml @@ -0,0 +1,106 @@ + + + 4.0.0 + MC Core + + mc + core + 1.0-SNAPSHOT + + + UTF-8 + 1.8 + 1.7.21 + 2.5 + 4.1.22.Final + + + + + + org.slf4j + slf4j-api + ${slf4j.version} + + + org.apache.logging.log4j + log4j-core + ${log4j.version} + + + org.apache.logging.log4j + log4j-slf4j-impl + ${log4j.version} + + + + + org.projectlombok + lombok + 1.16.16 + + + + + io.netty + netty-all + ${netty.version} + + + + + + ${project.artifactId}-${project.version} + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + ${java.version} + ${java.version} + ${project.build.sourceEncoding} + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.15 + + -Dfile.encoding=${project.build.sourceEncoding} + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.4 + + + + true + dependency/ + + + + + + org.apache.maven.plugins + maven-dependency-plugin + 2.8 + + + copy-dependencies + package + + copy-dependencies + + + + + + + + \ No newline at end of file diff --git a/src/main/java/mc/core/Main.java b/src/main/java/mc/core/Main.java new file mode 100644 index 0000000..096ddc8 --- /dev/null +++ b/src/main/java/mc/core/Main.java @@ -0,0 +1,22 @@ +/* + * DmitriyMX + * 2018-03-25 + */ +package mc.core; + +import lombok.extern.slf4j.Slf4j; +import mc.core.netty.NettyServer; + +@Slf4j +public class Main { + public static void main(String[] args) { + log.info("Start server"); + Server server = new NettyServer(); + try { + server.start("127.0.0.1", 25565); + } catch (StartServerException e) { + log.error("Starting server error", e); + server.stop(); + } + } +} diff --git a/src/main/java/mc/core/Server.java b/src/main/java/mc/core/Server.java new file mode 100644 index 0000000..b98120e --- /dev/null +++ b/src/main/java/mc/core/Server.java @@ -0,0 +1,11 @@ +/* + * DmitriyMX + * 2018-03-25 + */ +package mc.core; + +public interface Server { + void start(String host, int port) throws StartServerException; + void stop(); + boolean isRunning(); +} diff --git a/src/main/java/mc/core/StartServerException.java b/src/main/java/mc/core/StartServerException.java new file mode 100644 index 0000000..9005c3e --- /dev/null +++ b/src/main/java/mc/core/StartServerException.java @@ -0,0 +1,11 @@ +/* + * DmitriyMX + * 2018-03-25 + */ +package mc.core; + +public class StartServerException extends Exception { + public StartServerException(Throwable cause) { + super(cause); + } +} diff --git a/src/main/java/mc/core/netty/NettyServer.java b/src/main/java/mc/core/netty/NettyServer.java new file mode 100644 index 0000000..cc3f334 --- /dev/null +++ b/src/main/java/mc/core/netty/NettyServer.java @@ -0,0 +1,67 @@ +/* + * DmitriyMX + * 2018-03-25 + */ +package mc.core.netty; + +import io.netty.bootstrap.ServerBootstrap; +import io.netty.channel.ChannelInitializer; +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.core.Server; +import mc.core.StartServerException; + +public class NettyServer implements Server { + private EventLoopGroup bossGroup, workerGroup; + + private ChannelInitializer buildChannelInitializer() { + return new ChannelInitializer() { + @Override + protected void initChannel(SocketChannel socketChannel) { + socketChannel.pipeline().addLast( + new LoggingHandler() + ); + } + }; + } + + private ServerBootstrap buildServerBootstrap() { + ServerBootstrap bootstrap = new ServerBootstrap(); + + bootstrap.group(bossGroup, workerGroup) + .channel(NioServerSocketChannel.class) + .childHandler(buildChannelInitializer()); + + return bootstrap; + } + + @Override + public void start(String host, int port) throws StartServerException { + bossGroup = new NioEventLoopGroup(1); + workerGroup = new NioEventLoopGroup(); + + ServerBootstrap serverBootstrap = buildServerBootstrap(); + + try { + serverBootstrap.bind(host, port).sync().channel().closeFuture().sync(); + } catch (InterruptedException e) { + throw new StartServerException(e); + } + } + + @Override + public void stop() { + workerGroup.shutdownGracefully(); + bossGroup.shutdownGracefully(); + } + + @Override + public boolean isRunning() { + return bossGroup != null + && workerGroup != null + && !(bossGroup.isShutdown() && workerGroup.isShutdown()); + } +} diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml new file mode 100644 index 0000000..2da8a36 --- /dev/null +++ b/src/main/resources/log4j2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file