package com.flightfeather.obd.socket
|
|
import io.netty.bootstrap.ServerBootstrap
|
import io.netty.buffer.ByteBuf
|
import io.netty.buffer.Unpooled
|
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.DelimiterBasedFrameDecoder
|
import io.netty.handler.codec.bytes.ByteArrayDecoder
|
import io.netty.handler.codec.bytes.ByteArrayEncoder
|
import io.netty.handler.codec.string.StringDecoder
|
import io.netty.handler.codec.string.StringEncoder
|
|
/**
|
* socket长连接服务端
|
* 2019.8.26
|
* @author riku
|
*/
|
class SocketServerClient {
|
|
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("encoder", StringEncoder())
|
?.addLast(ObdByteDataDecoder())
|
?.addLast(ServerHandler())
|
}
|
})
|
} catch (e: Throwable) {
|
e.printStackTrace()
|
}
|
|
return null
|
}
|
}
|