package cn.org.hentai.jtt1078.app; import cn.org.hentai.jtt1078.server.audio.Jt1078AudioEncoder; import cn.org.hentai.jtt1078.server.talk.Jt1078TalkHandler; import cn.org.hentai.jtt1078.server.talk.Jt1078TalkMessageDecoder; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.Channel; 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 lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import javax.annotation.PreDestroy; @Slf4j @Component public class TalkServer { @Value("${jt1078.talk.port}") private int port; private EventLoopGroup bossGroup; private EventLoopGroup workerGroup; public void start() throws Exception { bossGroup = new NioEventLoopGroup(); workerGroup = new NioEventLoopGroup(); ServerBootstrap bootstrap = new ServerBootstrap(); bootstrap.group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) .childHandler(new ChannelInitializer() { @Override protected void initChannel(SocketChannel ch) { ChannelPipeline p = ch.pipeline(); p.addLast(new Jt1078TalkMessageDecoder());//解码器 p.addLast(new Jt1078AudioEncoder());//音频编码器 p.addLast(new Jt1078TalkHandler());//语音对讲处理器 } }); Channel ch = bootstrap.bind(port).sync().channel(); log.info("🎤 Talk Server started on port {}", port); } @PreDestroy public void shutdown() { bossGroup.shutdownGracefully(); workerGroup.shutdownGracefully(); } }