| | |
| | | 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.SocketChannel |
| | | 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 |
| | | import java.nio.charset.Charset |
| | | |
| | | /** |
| | | * socket长连接服务端 |
| | |
| | | */ |
| | | class SocketServerClient { |
| | | |
| | | // val sessionMap = HashMap<String, IoSession> |
| | | private val bossGroup = NioEventLoopGroup() |
| | | private val workerGroup = NioEventLoopGroup() |
| | | |
| | | fun startServer(port: Int) { |
| | | initialize()?.bind(port)?.sync() |
| | | ?.channel()?.closeFuture()?.sync() |
| | | } |
| | | |
| | | fun stopServer() { |
| | | bossGroup.shutdownGracefully() |
| | | workerGroup.shutdownGracefully() |
| | | } |
| | | |
| | | private fun initialize(): ServerBootstrap? { |
| | | val bossGroup = NioEventLoopGroup() |
| | | val workerGroup = NioEventLoopGroup() |
| | | |
| | | try { |
| | | return ServerBootstrap() |
| | | .group(bossGroup, workerGroup) |
| | | .channel(NioServerSocketChannel::class.java) |
| | | .childHandler(object : ChannelInitializer<NioSocketChannel>() { |
| | | override fun initChannel(p0: NioSocketChannel?) { |
| | | p0?.pipeline()?.addLast(ServerHandler()) |
| | | } |
| | | }) |
| | | .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(ObdByteDataDecoder()) |
| | | ?.addLast("encoder", StringEncoder(Charset.forName("UTF-8"))) |
| | | ?.addLast(ServerHandler()) |
| | | } |
| | | }) |
| | | } catch (e: Throwable) { |
| | | e.printStackTrace() |
| | | } finally { |
| | | bossGroup.shutdownGracefully() |
| | | workerGroup.shutdownGracefully() |
| | | } |
| | | |
| | | return null |