package com.flightfeather.uav.socket
|
|
import io.netty.bootstrap.ServerBootstrap
|
import io.netty.channel.ChannelInitializer
|
import io.netty.channel.ChannelOption
|
import io.netty.channel.nio.NioEventLoopGroup
|
import io.netty.channel.socket.nio.NioServerSocketChannel
|
import io.netty.channel.socket.nio.NioSocketChannel
|
import io.netty.handler.codec.string.StringDecoder
|
import io.netty.handler.codec.string.StringEncoder
|
import java.nio.charset.Charset
|
|
/*********************************************************************************
|
* 走航监测数据socket长连接服务端
|
* 用于接收解析走航监测数据,前端监测设备目前包括车载走航、无人机走航以及无人船走航三种类型
|
* *******************************************************************************/
|
class UnderwaySocketServer {
|
|
private val bossGroup = NioEventLoopGroup()
|
private val workerGroup = NioEventLoopGroup()
|
|
fun startServer(port: Int) {
|
initialize()?.bind(port)?.sync()
|
}
|
|
fun stopServer() {
|
bossGroup.shutdownGracefully()
|
workerGroup.shutdownGracefully()
|
}
|
|
private fun initialize(): ServerBootstrap? {
|
|
try {
|
return ServerBootstrap()
|
.group(bossGroup, workerGroup)
|
.channel(NioServerSocketChannel::class.java)
|
.option(ChannelOption.SO_BACKLOG, 128)
|
.childOption(ChannelOption.SO_KEEPALIVE, true)
|
.childOption(ChannelOption.TCP_NODELAY, true)
|
.childHandler(object : ChannelInitializer<NioSocketChannel>() {
|
override fun initChannel(p0: NioSocketChannel?) {
|
p0?.pipeline()
|
// ?.addLast("decoder", StringDecoder())
|
?.addLast(UAVByteDataDecoder())
|
?.addLast("encoder", StringEncoder(Charset.forName("UTF-8")))
|
?.addLast(ServerHandler())
|
}
|
})
|
} catch (e: Throwable) {
|
e.printStackTrace()
|
}
|
|
return null
|
}
|
}
|