yy1717
2024-02-28 27fc91fbe8f88b6885356e68828cfe1ce1db7601
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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
//        })
//
//    }
 
}