package com.fastbee.server;
|
|
|
import com.fastbee.server.config.NettyConfig;
|
import io.netty.bootstrap.AbstractBootstrap;
|
import io.netty.channel.ChannelFuture;
|
import io.netty.channel.EventLoopGroup;
|
import lombok.NoArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
|
import java.util.concurrent.ExecutorService;
|
|
/**
|
* 基础服务器启动类
|
*
|
* @Author guanshubiao
|
* @Date 2022/9/12 20:22
|
*/
|
@Slf4j
|
@NoArgsConstructor
|
public abstract class Server {
|
|
protected EventLoopGroup bossGroup;
|
protected EventLoopGroup workerGroup;
|
protected ExecutorService businessService;
|
protected boolean isRunning;
|
public NettyConfig config;
|
|
|
|
protected Server(NettyConfig config){
|
this.config = config;
|
}
|
|
/*初始化方法*/
|
protected abstract AbstractBootstrap initialize();
|
|
|
public synchronized boolean start() {
|
if (isRunning) {
|
log.warn("=>服务:{},在端口:{},已经运行", config.name, config.port);
|
return isRunning;
|
}
|
AbstractBootstrap bootstrap = initialize();
|
ChannelFuture future = bootstrap.bind(config.port).awaitUninterruptibly();
|
future.channel().closeFuture().addListener(event -> {
|
if (isRunning) {
|
stop();
|
}
|
});
|
if (isRunning = future.isSuccess()) {
|
log.info("=>服务:{},在端口:{},启动成功!", config.name, config.port);
|
return isRunning;
|
}
|
|
if (future.cause() != null) {
|
log.error("服务启动失败", future.cause());
|
}
|
return isRunning;
|
}
|
|
|
public synchronized void stop() {
|
|
isRunning = false;
|
bossGroup.shutdownGracefully();
|
if (workerGroup != null) {
|
workerGroup.shutdownGracefully();
|
}
|
if (businessService != null) {
|
businessService.shutdown();
|
}
|
log.warn("=>服务:{},在端口:{},已经停止!", config.name, config.port);
|
}
|
|
|
}
|