| package com.xcong.excoin.netty.server; | 
|   | 
| import com.xcong.excoin.netty.ChatServer; | 
| import com.xcong.excoin.netty.initalizer.WebSocketServerInitializer; | 
| import io.netty.bootstrap.ServerBootstrap; | 
| import io.netty.channel.ChannelFuture; | 
| import io.netty.channel.EventLoopGroup; | 
| import io.netty.channel.nio.NioEventLoopGroup; | 
| import io.netty.channel.socket.nio.NioServerSocketChannel; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.stereotype.Component; | 
|   | 
| /** | 
|  * @author wzy | 
|  * @date 2019-05-06 | 
|  */ | 
| @Slf4j | 
| @Component("webSocketServer") | 
| public class WebSocketServer implements ChatServer { | 
|   | 
|   | 
|     private EventLoopGroup boss = new NioEventLoopGroup(); | 
|     private EventLoopGroup work = new NioEventLoopGroup(); | 
|   | 
|     private ChannelFuture channelFuture; | 
|   | 
|     @Autowired | 
|     private WebSocketServerInitializer webSocketServerInitializer; | 
|   | 
|     @Override | 
|     public void start() throws Exception { | 
|         log.info("[websocket服务器启动]"); | 
|         try { | 
|             ServerBootstrap b = new ServerBootstrap(); | 
|             b.group(boss, work) | 
|                     .channel(NioServerSocketChannel.class) | 
|                     .childHandler(webSocketServerInitializer); | 
|   | 
|             channelFuture = b.bind(9999).sync(); | 
|   | 
|             log.info("[websocket服务器启动完成]-->{}", channelFuture.channel().localAddress()); | 
|         } finally { | 
|             Runtime.getRuntime().addShutdownHook(new Thread() { | 
|                 @Override | 
|                 public void run() { | 
|                     shutdown(); | 
|                 } | 
|             }); | 
|         } | 
|     } | 
|   | 
|     @Override | 
|     public void shutdown() { | 
|         if (channelFuture != null) { | 
|             channelFuture.channel().close().syncUninterruptibly(); | 
|         } | 
|   | 
|         if (boss != null) { | 
|             boss.shutdownGracefully(); | 
|         } | 
|   | 
|         if (work != null) { | 
|             work.shutdownGracefully(); | 
|         } | 
|     } | 
|   | 
| } |