package com.anyun.exam.lib.net
|
|
import android.os.SystemClock
|
import android.util.Log
|
import com.anyun.exam.lib.Rtcm
|
import com.anyun.exam.lib.util.ByteUtil
|
import io.netty.channel.ChannelHandlerContext
|
import io.netty.channel.SimpleChannelInboundHandler
|
import io.netty.util.AttributeKey
|
|
|
|
class MessageHandler : SimpleChannelInboundHandler<ByteArray>() {
|
val KEY = AttributeKey.valueOf<NtripTcpClient>("TcpClient")
|
|
// private var actionManager = ActionManager()
|
private val parser = ParseNtripPackage()
|
|
override fun channelRead0(ctx: ChannelHandlerContext, message: ByteArray) {
|
// val message = msg as JT808_2016_MessageBase
|
val tcpClient = ctx.channel().attr(KEY).get()
|
|
// Log.d(Constant.LOGTAG,"${Thread.currentThread().id} 收到数据<${tcpClient.host}:${tcpClient.port}>: ${message.size} - ${ByteUtil.byte2hex(message)}")
|
|
if (tcpClient.dataStatus == NettyTcpClient.WAIT_AUTH) {
|
val httpHead = String(message)
|
Log.d(Constant.LOGTAG, "http head: ${httpHead}")
|
|
if (httpHead.startsWith("HTTP/1.1 200 OK") || httpHead.startsWith("ICY 200 OK")) {
|
Log.d(Constant.LOGTAG, "鉴权成功")
|
tcpClient.isAuthentication = true
|
} else if (httpHead.startsWith("Error")) {
|
tcpClient.isAuthentication = false
|
}
|
}
|
if (message.size == 2) {
|
if (tcpClient.isAuthentication) {
|
Log.d(Constant.LOGTAG, "开始接收RTCM数据")
|
tcpClient.dataStatus = NettyTcpClient.BODY
|
parser.reset()
|
} else {
|
tcpClient.close(true)
|
}
|
}
|
if (tcpClient.dataStatus == NettyTcpClient.BODY) {
|
parser.parse(tcpClient, message)
|
// Rtcm.sendRtcm(message)
|
}
|
}
|
|
// private var recvExecutorService: TcpRecvAction = SpringContextUtil.getBean(TcpRecvAction::class.java)
|
|
override fun channelActive(ctx: ChannelHandlerContext) {
|
val tcpClient = ctx.channel().attr(KEY).get()
|
Log.d(Constant.LOGTAG, "channelActive")
|
//鉴权标志改为false
|
tcpClient.isAuthentication = false
|
tcpClient.dataStatus = NettyTcpClient.WAIT_AUTH
|
|
tcpClient.sendNtripRequest("Demo", "YJP_500100_ANYUN", "adm", "adm")
|
}
|
|
override fun channelInactive(ctx: ChannelHandlerContext) {
|
val tcpClient = ctx.channel().attr(KEY).get()
|
Log.d(Constant.LOGTAG, "channelInactive")
|
}
|
// override fun channelRead(ctx: ChannelHandlerContext, msg: Any) {
|
// val message = msg as JT808_2016_MessageBase
|
// val tcpClient = ctx.channel().attr(KEY).get()
|
// Timber.d( "收到数据:${Int16Coder.instance.encode(message.messageId)}")
|
// //后续处理过程
|
// actionManager.execute(ActionArgs().apply {
|
// this.context = tcpClient.context
|
// this.message = message
|
// this.tcpClient = tcpClient
|
// })
|
//
|
// }
|
|
}
|