[Update]调试面板增加多屏的发送或接收数据的时间戳显示

This commit is contained in:
chenfufeng
2022-05-19 15:04:51 +08:00
parent d7b4689ff0
commit 9fdafbc904
7 changed files with 245 additions and 133 deletions

View File

@@ -75,6 +75,6 @@ dependencies {
implementation project(':core:mogo-core-utils')
implementation 'org.greenrobot:eventbus:3.2.0'
implementation 'com.android.support:multidex:1.0.3'
implementation 'com.mogo.cloud:telematic:1.3.57'
implementation 'com.mogo.cloud:telematic:1.3.59'
implementation 'com.jcraft:jsch:0.1.55'
}

View File

@@ -24,6 +24,8 @@ import com.mogo.eagle.core.function.autopilot.adapter.MoGoAdasListenerImpl
import com.mogo.eagle.core.function.autopilot.adapter.MoGoAdasMsgConnectStatusListenerImpl
import com.mogo.eagle.core.function.autopilot.adapter.MoGoHandAdasMsgManager
import com.mogo.eagle.core.function.autopilot.server.AsyncDataToAutopilotServer
import com.mogo.eagle.core.function.autopilot.telematic.IMsgHandler
import com.mogo.eagle.core.function.autopilot.telematic.TeleMsgHandler
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotCarConfigListenerManager
import com.mogo.eagle.core.function.call.map.CallerMapDataCollectorManager
@@ -65,10 +67,7 @@ class MoGoAutopilotProvider :
IMoGoAutopilotCarConfigListener {
private val TAG = "MoGoAutoPilotProvider"
private var mContext: Context? = null
@Volatile
private var isFirstDisc = true
@Volatile
private var wrTimeStamp = 0L
private lateinit var msgHandler: IMsgHandler
override val functionName: String
get() = TAG
@@ -79,6 +78,7 @@ class MoGoAutopilotProvider :
mContext = context
// 初始化ADAS 域控制器
CupidLogUtils.setEnableLog(false)
msgHandler = TeleMsgHandler()
// TODO 临时方案根据不同的身份标识连接不同的工控机IP
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {// 司机
// 注册地图采集功能
@@ -94,27 +94,7 @@ class MoGoAutopilotProvider :
NSDNettyManager.getInstance().startNSDNettyServerWithSN(context, object :
NettyServerListener<MogoProtocolMsg> {
override fun onMessageResponseServer(msg: MogoProtocolMsg?, channel: Channel?) {
msg?.let {
when (it.protocolType) {
REQ_CAR_NUMBER -> {
if (!AppConfigInfo.plateNumber.isNullOrEmpty()) {
val platNumberArray = AppConfigInfo.plateNumber!!.toByteArray()
NSDNettyManager.getInstance().sendMsgToSpecifiedClient(
MogoProtocolMsg(
REQ_CAR_NUMBER,
platNumberArray.size, platNumberArray
), channel
) {
invokeNettyConnResult("司机屏发送车牌号到乘客屏是否成功:${it.isSuccess}")
}
} else {
CallerAutoPilotManager.getCarConfig()
}
}
else -> {
}
}
}
msgHandler.handleMsgFromClient(msg, channel)
}
override fun onStartServer() {
@@ -128,19 +108,7 @@ class MoGoAutopilotProvider :
}
override fun onChannelConnect(channel: Channel?) {
val socketAddress = channel?.remoteAddress().toString()
CallerLogger.d("$M_ADAS_IMPL$TAG", "Client ip is:${socketAddress}")
val byteArray =
if (FunctionBuildConfig.isDemoMode) byteArrayOf(1) else byteArrayOf(0)
NSDNettyManager.getInstance().sendMsgToSpecifiedClient(
MogoProtocolMsg(
SYNC_MODE_STATUS,
byteArray.size,
byteArray
), channel
) {
CallerLogger.d("$M_ADAS_IMPL$TAG", "同步美化模式状态是否成功:${it.isSuccess}")
}
msgHandler.handleClientConn2Server(channel)
}
override fun onChannelDisConnect(channel: Channel?) {
@@ -170,7 +138,7 @@ class MoGoAutopilotProvider :
channel: Channel
) {
// 乘客端收到adas数据直接解析后续分发解析后的数据流程同司机端
handleMsgFromServer(msg, channel)
msgHandler.handleMsgFromServer(msg, channel)
}
override fun onClientStatusConnectChanged(
@@ -178,7 +146,7 @@ class MoGoAutopilotProvider :
sign: String?,
channel: Channel
) {
handleConnStatusWithServer(statusCode, sign)
msgHandler.handleClientConnStatus(statusCode, sign, channel)
}
})
}
@@ -191,7 +159,7 @@ class MoGoAutopilotProvider :
AdasManager.getInstance().setOnMultiDeviceListener { bytes ->
// 发送数据给乘客端
if (NSDNettyManager.getInstance().isServerStart) {
synWriteTime()
msgHandler.synWriteTime()
NSDNettyManager.getInstance()
.sendMsgToAllClients(MogoProtocolMsg(NORMAL_DATA, bytes.size, bytes))
} else {
@@ -446,7 +414,7 @@ class MoGoAutopilotProvider :
sign: String?,
channel: Channel
) {
handleMsgFromServer(msg, channel)
msgHandler.handleMsgFromServer(msg, channel)
}
override fun onClientStatusConnectChanged(
@@ -454,7 +422,7 @@ class MoGoAutopilotProvider :
sign: String?,
channel: Channel
) {
handleConnStatusWithServer(statusCode, sign)
msgHandler.handleClientConnStatus(statusCode, sign, channel)
}
})
}
@@ -475,74 +443,10 @@ class MoGoAutopilotProvider :
return MogoReport.Action.getDesc(actionCode)
}
private fun handleMsgFromServer(msg: MogoProtocolMsg?, channel: Channel) {
msg?.let {
when (it.protocolType) {
NORMAL_DATA -> {
try {
synWriteTime()
AdasManager.getInstance().decoderRaw(it.body)
} catch (e: Exception) {
e.printStackTrace()
CallerLogger.e("$M_ADAS_IMPL$TAG", "乘客屏解析数据过程中出现异常:${e.message}")
}
}
SYNC_MODE_STATUS -> {
FunctionBuildConfig.isDemoMode = when (it.body[0].toInt()) {
1 -> true
else -> false
}
setDemoMode(FunctionBuildConfig.isDemoMode)
}
REQ_CAR_NUMBER -> {
AppConfigInfo.plateNumber = String(msg.body)
invokeNettyConnResult("司机屏发送给乘客屏车牌号为:${AppConfigInfo.plateNumber}")
}
else -> {
}
}
}
}
private fun handleConnStatusWithServer(statusCode: Int, content: String?) {
when (statusCode) {
ConnectState.STATUS_CONNECT_SUCCESS -> {
if (!isFirstDisc) {
isFirstDisc = true
}
ToastUtils.showShort("连接司机屏成功!")
invokeNettyConnResult("乘客屏连接司机屏成功")
// 连接成功后,乘客屏没拿到车牌号就像司机屏请求
if (AppConfigInfo.plateNumber.isNullOrEmpty()) {
var byteArray = byteArrayOf(0)
NSDNettyManager.getInstance().sendMogoProtocolMsgToServer(
MogoProtocolMsg(REQ_CAR_NUMBER, byteArray.size, byteArray)
) {
invokeNettyConnResult("乘客屏请求车牌号数据发送是否成功:${it}")
}
}
}
ConnectState.STATUS_CONNECT_CLOSED -> {// 由于重连机制会回调多次
if (isFirstDisc) {
isFirstDisc = false
AppConfigInfo.plateNumber = ""
ToastUtils.showLong("断开和司机屏的连接!")
invokeNettyConnResult("断开和司机屏的连接!")
}
}
ConnectState.STATUS_CONNECT_ERROR -> {
AppConfigInfo.plateNumber = ""
ToastUtils.showLong("和司机端连接异常!")
invokeNettyConnResult("乘客屏和司机屏连接异常,错误为:$content")
}
else -> {}
}
}
override fun onAutopilotCarConfig(carConfigResp: MessagePad.CarConfigResp) {
// 乘客屏才监听
AppConfigInfo.plateNumber = carConfigResp.plateNumber
invokeNettyConnResult("乘客屏车牌号:${carConfigResp.plateNumber}")
invokeNettyConnResult("乘客屏车牌号:${carConfigResp.plateNumber},Mac地址为${carConfigResp.macAddress}")
}
@ChainLog(
@@ -557,16 +461,7 @@ class MoGoAutopilotProvider :
CallerLogger.d("$M_ADAS_IMPL$TAG", status)
}
/**
* 记录最新的司机屏发送数据的时间戳
* 或乘客屏解析数据的时间戳
*/
@Synchronized
private fun synWriteTime() {
wrTimeStamp = System.currentTimeMillis()
}
override fun getTeleTimeStamp(): Long {
return wrTimeStamp
return msgHandler.getTeleTimeStamp()
}
}

View File

@@ -0,0 +1,20 @@
package com.mogo.eagle.core.function.autopilot.telematic
import com.mogo.telematic.MogoProtocolMsg
import io.netty.channel.Channel
interface IMsgHandler {
fun handleMsgFromServer(msg: MogoProtocolMsg?, channel: Channel?)
fun handleMsgFromClient(msg: MogoProtocolMsg?, channel: Channel?)
fun handleClientConn2Server(channel: Channel?)
fun handleClientConnStatus(statusCode: Int, content: String?, channel: Channel)
fun handleServerConnStatus(statusCode: Int, content: String?, channel: Channel)
fun synWriteTime()
fun getTeleTimeStamp(): Long
}

View File

@@ -0,0 +1,197 @@
package com.mogo.eagle.core.function.autopilot.telematic
import com.mogo.eagle.core.data.app.AppConfigInfo
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.data.deva.chain.ChainConstant
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager.setDemoMode
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.telematic.MogoProtocolMsg
import com.mogo.telematic.NSDNettyManager
import com.mogo.telematic.client.status.ConnectState
import com.zhidao.support.adas.high.AdasManager
import com.zhidao.support.adas.high.chain.AdasChain
import com.zhjt.service.chain.ChainLog
import com.zhjt.service.chain.TracingConstants
import io.netty.channel.Channel
class TeleMsgHandler : IMsgHandler {
private val TAG = "TeleMsgHandler"
@Volatile
private var isFirstDisc = true
@Volatile
private var wrTimeStamp = 0L
@Volatile
private var hasQueryCarConfig = false
override fun handleMsgFromServer(msg: MogoProtocolMsg?, channel: Channel?) {
msg?.let {
when (it.protocolType) {
MogoProtocolMsg.NORMAL_DATA -> {
try {
synWriteTime()
AdasManager.getInstance().decoderRaw(it.body)
} catch (e: Exception) {
e.printStackTrace()
CallerLogger.e(
"${SceneConstant.M_ADAS_IMPL}$TAG",
"乘客屏解析数据过程中出现异常:${e.message}"
)
}
}
MogoProtocolMsg.SYNC_MODE_STATUS -> {
FunctionBuildConfig.isDemoMode = when (it.body[0].toInt()) {
1 -> true
else -> false
}
setDemoMode(FunctionBuildConfig.isDemoMode)
}
MogoProtocolMsg.REQ_CAR_NUMBER -> {
AppConfigInfo.plateNumber = String(msg.body)
invokeNettyConnResult("司机屏发送给乘客屏车牌号为:${AppConfigInfo.plateNumber}")
}
MogoProtocolMsg.REQ_MAC_ADDRESS -> {
val macAddress = String(msg.body)
invokeNettyConnResult("司机屏发送给乘客屏Mac地址为:$macAddress")
}
else -> {
}
}
}
}
override fun handleMsgFromClient(msg: MogoProtocolMsg?, channel: Channel?) {
msg?.let {
when (it.protocolType) {
MogoProtocolMsg.REQ_CAR_NUMBER -> {
if (!AppConfigInfo.plateNumber.isNullOrEmpty()) {
val platNumberArray = AppConfigInfo.plateNumber!!.toByteArray()
NSDNettyManager.getInstance().sendMsgToSpecifiedClient(
MogoProtocolMsg(
MogoProtocolMsg.REQ_CAR_NUMBER,
platNumberArray.size, platNumberArray
), channel
) {
invokeNettyConnResult("司机屏发送车牌号到乘客屏是否成功:${it.isSuccess}")
}
} else {
queryCarConfig()
}
}
MogoProtocolMsg.REQ_MAC_ADDRESS -> {
if (!AppConfigInfo.iPCMacAddress.isNullOrEmpty()) {
val macAddressArray = AppConfigInfo.iPCMacAddress!!.toByteArray()
NSDNettyManager.getInstance().sendMsgToSpecifiedClient(
MogoProtocolMsg(
MogoProtocolMsg.REQ_MAC_ADDRESS,
macAddressArray.size, macAddressArray
), channel
) {
invokeNettyConnResult("司机屏发送Mac地址到乘客屏是否成功${it.isSuccess}")
}
} else {
queryCarConfig()
}
}
else -> {
}
}
}
}
private fun queryCarConfig() {
if (!hasQueryCarConfig) {
hasQueryCarConfig = true
invokeNettyConnResult("乘客屏请求司机屏向工控机查询配置信息")
CallerAutoPilotManager.getCarConfig()
}
}
override fun handleClientConn2Server(channel: Channel?) {
val socketAddress = channel?.remoteAddress().toString()
CallerLogger.d("${SceneConstant.M_ADAS_IMPL}$TAG", "Client ip is:${socketAddress}")
val byteArray =
if (FunctionBuildConfig.isDemoMode) byteArrayOf(1) else byteArrayOf(0)
NSDNettyManager.getInstance().sendMsgToSpecifiedClient(
MogoProtocolMsg(
MogoProtocolMsg.SYNC_MODE_STATUS,
byteArray.size,
byteArray
), channel
) {
CallerLogger.d("${SceneConstant.M_ADAS_IMPL}$TAG", "同步美化模式状态是否成功:${it.isSuccess}")
}
}
override fun handleClientConnStatus(statusCode: Int, content: String?, channel: Channel) {
when (statusCode) {
ConnectState.STATUS_CONNECT_SUCCESS -> {
if (!isFirstDisc) {
isFirstDisc = true
}
ToastUtils.showShort("连接司机屏成功!")
invokeNettyConnResult("乘客屏连接司机屏成功")
val byteArray = byteArrayOf(0)
NSDNettyManager.getInstance().sendMogoProtocolMsgToServer(
MogoProtocolMsg(MogoProtocolMsg.REQ_CAR_NUMBER, byteArray.size, byteArray)
) {
invokeNettyConnResult("乘客屏请求车牌号数据发送是否成功:${it}")
}
NSDNettyManager.getInstance().sendMogoProtocolMsgToServer(
MogoProtocolMsg(MogoProtocolMsg.REQ_MAC_ADDRESS, byteArray.size, byteArray)
) {
invokeNettyConnResult("乘客屏请求MAC地址数据发送是否成功${it}")
}
}
ConnectState.STATUS_CONNECT_CLOSED -> {// 由于重连机制会回调多次
if (isFirstDisc) {
isFirstDisc = false
AppConfigInfo.plateNumber = ""
ToastUtils.showLong("断开和司机屏的连接!")
invokeNettyConnResult("断开和司机屏的连接!")
}
}
ConnectState.STATUS_CONNECT_ERROR -> {
AppConfigInfo.plateNumber = ""
ToastUtils.showLong("和司机端连接异常!")
invokeNettyConnResult("乘客屏和司机屏连接异常,错误为:$content")
}
else -> {}
}
}
override fun handleServerConnStatus(statusCode: Int, content: String?, channel: Channel) {
}
@ChainLog(
linkChainLog = AdasChain.CHAIN_LINK_LOG_CONNECT_STATUS,
linkCode = ChainConstant.CHAIN_LINK_ADAS,
endpoint = TracingConstants.Endpoint.PAD,
nodeAliasCode = ChainConstant.CHAIN_ALIAS_CODE_MULTI_CONNECT,
paramIndexes = [0],
clientPkFileName = "sn"
)
private fun invokeNettyConnResult(status: String) {
CallerLogger.d("${SceneConstant.M_ADAS_IMPL}$TAG", status)
}
/**
* 记录最新的司机屏发送数据的时间戳
* 或乘客屏解析数据的时间戳
*/
@Synchronized
override fun synWriteTime() {
wrTimeStamp = System.currentTimeMillis()
}
override fun getTeleTimeStamp(): Long {
return wrTimeStamp
}
}

View File

@@ -1333,7 +1333,7 @@ class DebugSettingView @JvmOverloads constructor(
AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) -> {
AppConfigInfo.isDriver = false
AppConfigInfo.isConnectedNetty = CallerTelematicManager.getClientConnStatus()
AppConfigInfo.serverIp = CallerTelematicManager.getServerIp()
AppConfigInfo.serverSn = CallerTelematicManager.getServerToken()
}
else -> {
}
@@ -1465,7 +1465,7 @@ class DebugSettingView @JvmOverloads constructor(
else -> {
"乘客端${
when {
AppConfigInfo.serverIp.isNotEmpty() -> "(目标ip为:${AppConfigInfo.serverIp})"
AppConfigInfo.serverSn.isNotEmpty() -> "(司机屏SN是:${AppConfigInfo.serverSn})"
else -> ""
}
}连接"

View File

@@ -62,7 +62,7 @@ object AppConfigInfo {
// Netty该端是否连接上另一端
var isConnectedNetty = false
var serverIp = ""
var serverSn = ""
var teleTimeStamp = 0L
@@ -136,7 +136,7 @@ object AppConfigInfo {
else -> {
"乘客端${
when {
serverIp.isNotEmpty() -> "(目标ip为:${serverIp})"
serverSn.isNotEmpty() -> "(司机屏SN是:${serverSn})"
else -> ""
}
}连接"

View File

@@ -63,23 +63,23 @@ SERVICE_CHAIN_VERSION=1.1.0
LOGLIB_VERSION=1.3.0
######## MogoAiCloudSDK Version ########
# 网络请求LOGLIB_VERSION
MOGO_NETWORK_VERSION=1.3.58
MOGO_NETWORK_VERSION=1.3.59
# 鉴权
MOGO_PASSPORT_VERSION=1.3.58
MOGO_PASSPORT_VERSION=1.3.59
# 常链接
MOGO_SOCKET_VERSION=1.3.58
MOGO_SOCKET_VERSION=1.3.59
# 数据采集
MOGO_REALTIME_VERSION=1.3.58
MOGO_REALTIME_VERSION=1.3.59
# 探路,道路事件发布,获取
MOGO_TANLU_VERSION=1.3.58
MOGO_TANLU_VERSION=1.3.59
# 直播推流
MOGO_LIVE_VERSION=1.3.58
MOGO_LIVE_VERSION=1.3.59
# 直播拉流
MOGO_TRAFFICLIVE_VERSION=1.3.58
MOGO_TRAFFICLIVE_VERSION=1.3.59
# 定位服务
MOGO_LOCATION_VERSION=1.3.58
MOGO_LOCATION_VERSION=1.3.59
# 远程通讯模块
MOGO_TELEMATIC_VERSION=1.3.58
MOGO_TELEMATIC_VERSION=1.3.59
######## MogoAiCloudSDK Version ########
# 自研地图
MAP_SDK_VERSION=2.1.1.2
@@ -155,7 +155,7 @@ MOGO_OCH_TAXI_VERSION=2.0.66
# mogoAiCloud sdk services
MOGO_AICLOUD_SERVICES_SDK_VERSION=2.1.16.10
# v2x-sdk
MOGO_V2X_SDK_VERSION=1.3.58
MOGO_V2X_SDK_VERSION=1.3.59
################# 旧版本架构模块版本 #################