Archived
0

dummy server

This commit is contained in:
2021-04-24 21:29:51 +03:00
parent 1f6c05f272
commit a9b053765e
6 changed files with 126 additions and 0 deletions

View File

@@ -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'

View File

@@ -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);
}
}

View File

@@ -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();
}

View File

@@ -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<SocketChannel> 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<SocketChannel> provideChannelChannelInitializer(List<ChannelHandler> channelHandlerList) {
return new ChannelInitializer<>() {
@Override
protected void initChannel(SocketChannel socketChannel) {
final ChannelPipeline pipeline = socketChannel.pipeline();
channelHandlerList.forEach(pipeline::addLast);
}
};
}
@Provides
List<ChannelHandler> provideChannelHandlerList() {
return Collections.singletonList(new LoggingHandler());
}
}

View File

@@ -0,0 +1,6 @@
package mc.server.network;
public interface Server {
void start(String host, int port);
}

View File

@@ -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);
}
}
}
}