simple server
This commit is contained in:
8
pom.xml
8
pom.xml
@@ -15,6 +15,7 @@
|
|||||||
<slf4j.version>1.7.21</slf4j.version>
|
<slf4j.version>1.7.21</slf4j.version>
|
||||||
<log4j.version>2.5</log4j.version>
|
<log4j.version>2.5</log4j.version>
|
||||||
<spring.version>4.2.5.RELEASE</spring.version>
|
<spring.version>4.2.5.RELEASE</spring.version>
|
||||||
|
<netty.version>4.1.22.Final</netty.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
@@ -53,6 +54,13 @@
|
|||||||
</exclusions>
|
</exclusions>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Netty -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.netty</groupId>
|
||||||
|
<artifactId>netty-all</artifactId>
|
||||||
|
<version>${netty.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!-- COMPONENTS -->
|
<!-- COMPONENTS -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.projectlombok</groupId>
|
<groupId>org.projectlombok</groupId>
|
||||||
|
|||||||
@@ -8,4 +8,6 @@ public interface Config {
|
|||||||
int getMaxPlayers();
|
int getMaxPlayers();
|
||||||
String getDescriptionServer();
|
String getDescriptionServer();
|
||||||
String getFaviconBase64();
|
String getFaviconBase64();
|
||||||
|
String getHost();
|
||||||
|
int getPort();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,8 +14,11 @@ public class Main {
|
|||||||
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
|
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
|
||||||
Config config = context.getBean("config", Config.class);
|
Config config = context.getBean("config", Config.class);
|
||||||
|
|
||||||
log.info("Description: {}", config.getDescriptionServer());
|
Server server = context.getBean("server", Server.class);
|
||||||
log.info("Max online: {}", config.getMaxPlayers());
|
try {
|
||||||
log.info("Favicon (base64): {}", config.getFaviconBase64());
|
server.start(config.getHost(), config.getPort());
|
||||||
|
} catch (StartServerException e) {
|
||||||
|
log.error("Can't start server", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
9
src/main/java/mc/core/Server.java
Normal file
9
src/main/java/mc/core/Server.java
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
/*
|
||||||
|
* DmitriyMX <dimon550@gmail.com>
|
||||||
|
* 2018-04-08
|
||||||
|
*/
|
||||||
|
package mc.core;
|
||||||
|
|
||||||
|
public interface Server {
|
||||||
|
void start(String host, int port) throws StartServerException;
|
||||||
|
}
|
||||||
11
src/main/java/mc/core/StartServerException.java
Normal file
11
src/main/java/mc/core/StartServerException.java
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
/*
|
||||||
|
* DmitriyMX <dimon550@gmail.com>
|
||||||
|
* 2018-04-08
|
||||||
|
*/
|
||||||
|
package mc.core;
|
||||||
|
|
||||||
|
public class StartServerException extends Exception {
|
||||||
|
public StartServerException(Throwable cause) {
|
||||||
|
super(cause);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,6 +5,7 @@
|
|||||||
package mc.core.embedded;
|
package mc.core.embedded;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import mc.core.Config;
|
import mc.core.Config;
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
@@ -16,13 +17,18 @@ import java.util.Base64;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
@Getter
|
@Getter
|
||||||
public class ConfigFromSpring implements Config {
|
public class ConfigFromSpring implements Config {
|
||||||
|
@Setter
|
||||||
private String descriptionServer;
|
private String descriptionServer;
|
||||||
private String faviconBase64;
|
private String faviconBase64;
|
||||||
|
@Setter
|
||||||
private int maxPlayers;
|
private int maxPlayers;
|
||||||
|
@Setter
|
||||||
|
private String host;
|
||||||
|
@Setter
|
||||||
|
private int port;
|
||||||
|
|
||||||
public ConfigFromSpring(String descriptionServer, int maxPlayers, File faviconImageFile) {
|
public void setFaviconBase64(File faviconImageFile) {
|
||||||
this.descriptionServer = descriptionServer;
|
log.debug("faviconImageFile: {}", faviconImageFile.getAbsolutePath());
|
||||||
this.maxPlayers = maxPlayers;
|
|
||||||
try {
|
try {
|
||||||
faviconBase64 = new String(
|
faviconBase64 = new String(
|
||||||
Base64.getEncoder().encode(
|
Base64.getEncoder().encode(
|
||||||
@@ -30,7 +36,7 @@ public class ConfigFromSpring implements Config {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
log.warn("Con't load favicon", e);
|
log.warn("Can't load favicon", e);
|
||||||
faviconBase64 = null;
|
faviconBase64 = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
54
src/main/java/mc/core/netty/NettyServer.java
Normal file
54
src/main/java/mc/core/netty/NettyServer.java
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* DmitriyMX <dimon550@gmail.com>
|
||||||
|
* 2018-04-08
|
||||||
|
*/
|
||||||
|
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<SocketChannel>() {
|
||||||
|
@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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,8 +3,12 @@
|
|||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
|
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
|
||||||
<bean id="config" class="mc.core.embedded.ConfigFromSpring">
|
<bean id="config" class="mc.core.embedded.ConfigFromSpring">
|
||||||
<constructor-arg index="0" type="java.lang.String" value="MC Core"/>
|
<property name="descriptionServer" value="MC Core"/>
|
||||||
<constructor-arg index="1" type="int" value="100"/>
|
<property name="maxPlayers" value="100"/>
|
||||||
<constructor-arg index="2" type="java.io.File" value="icon.png"/>
|
<property name="faviconBase64" value="icon.png"/>
|
||||||
|
<property name="host" value="127.0.0.1"/>
|
||||||
|
<property name="port" value="25565"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
|
<bean id="server" class="mc.core.netty.NettyServer"/>
|
||||||
</beans>
|
</beans>
|
||||||
Reference in New Issue
Block a user