[6.0.0][Fix]解决偶现的崩溃问题

This commit is contained in:
chenfufeng
2023-08-31 16:15:15 +08:00
committed by zhongchao
parent 77ae53ce10
commit ea39952cde

View File

@@ -7,6 +7,7 @@ import bag_manager.BagManagerOuterClass
import chassis.SpecialVehicleTaskCmdOuterClass import chassis.SpecialVehicleTaskCmdOuterClass
import com.alibaba.android.arouter.facade.annotation.Route import com.alibaba.android.arouter.facade.annotation.Route
import com.mogo.cloud.passport.MoGoAiCloudClientConfig import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.commons.debug.DebugConfig
import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters
import com.mogo.eagle.core.data.autopilot.toAutoPilotLine import com.mogo.eagle.core.data.autopilot.toAutoPilotLine
import com.mogo.eagle.core.data.autopilot.toRouteInfo import com.mogo.eagle.core.data.autopilot.toRouteInfo
@@ -96,14 +97,15 @@ class MoGoAutopilotControlProvider :
override fun init(context: Context) { override fun init(context: Context) {
CallerLogger.i("$M_D_C$TAG", "初始化工控机连接……") CallerLogger.i("$M_D_C$TAG", "初始化工控机连接……")
mContext = context mContext = context
// 初始化ADAS 域控制器 runCatching {
CupidLogUtils.setEnableLog(false) // 初始化ADAS 域控制器
msgHandler = TeleMsgHandler() CupidLogUtils.setEnableLog(false)
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {// 司机 msgHandler = TeleMsgHandler()
// 注册地图采集功能 if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {// 司机
CallerMapDataCollectorManager.registerOnMapCollectTaskListener(this) // 注册地图采集功能
CallerMapDataCollectorManager.registerOnMapCollectTaskListener(this)
// 配置默认关闭的连接topic // 配置默认关闭的连接topic
// val messageTypes: MutableSet<MessageType> = HashSet() // val messageTypes: MutableSet<MessageType> = HashSet()
// messageTypes.add(MessageType.TYPE_RECEIVE_POINT_CLOUD) // messageTypes.add(MessageType.TYPE_RECEIVE_POINT_CLOUD)
// val subscribeInterfaceOptions = SubscribeInterfaceOptions.newBuilder() // val subscribeInterfaceOptions = SubscribeInterfaceOptions.newBuilder()
@@ -111,125 +113,131 @@ class MoGoAutopilotControlProvider :
// .setType(Constants.SUBSCRIBE_TYPE.UNSUBSCRIBE) // .setType(Constants.SUBSCRIBE_TYPE.UNSUBSCRIBE)
// .setMessageTypes(messageTypes).build() // .setMessageTypes(messageTypes).build()
// "192.168.1.102" // "192.168.1.102"
val options = AdasOptions.Builder() val options = AdasOptions.Builder()
.setIpcConnectionMode(AdasOptions.IPC_CONNECTION_MODE.FIXATION) .setIpcConnectionMode(AdasOptions.IPC_CONNECTION_MODE.FIXATION)
.setIpcFixationIP(AdasManager.getInstance().getIPCFixationIPList(mContext)) .setIpcFixationIP(AdasManager.getInstance().getIPCFixationIPList(mContext))
.setClient(false) .setClient(false)
.setUnableLaunchAutopilotGear(FunctionBuildConfig.unableLaunchAutopilotGear) .setUnableLaunchAutopilotGear(FunctionBuildConfig.unableLaunchAutopilotGear)
// .setSubscribeInterfaceOptions(subscribeInterfaceOptions)// // .setSubscribeInterfaceOptions(subscribeInterfaceOptions)//
.build() .build()
AdasManager.getInstance().create(options, MoGoAdasMsgConnectStatusListenerImpl()) AdasManager.getInstance().create(options, MoGoAdasMsgConnectStatusListenerImpl())
//////////////////////////////////注意先后顺序AdasManager.getInstance().create后才可以设置监听///////////////////////////////////////////// //////////////////////////////////注意先后顺序AdasManager.getInstance().create后才可以设置监听/////////////////////////////////////////////
// 监听ADAS-SDK获取到的工控机数据 // 监听ADAS-SDK获取到的工控机数据
AdasManager.getInstance().setOnAdasListener(MoGoAdasListenerImpl()) AdasManager.getInstance().setOnAdasListener(MoGoAdasListenerImpl())
NSDNettyManager.getInstance().startNSDNettyServerWithSN(context, object : NSDNettyManager.getInstance().startNSDNettyServerWithSN(context, object :
NettyServerListener<MogoProtocolMsg> { NettyServerListener<MogoProtocolMsg> {
override fun onMessageResponseServer(msg: MogoProtocolMsg?, channel: Channel?) { override fun onMessageResponseServer(msg: MogoProtocolMsg?, channel: Channel?) {
msgHandler.handleMsgFromClient(msg, channel) msgHandler.handleMsgFromClient(msg, channel)
}
override fun onStartServer() {
ToastUtils.showShort("司机端服务启动成功!")
if (timer == null) {
timer = Timer()
} }
// 10s同步一次数据到乘客屏
timer!!.schedule(object : TimerTask() { override fun onStartServer() {
override fun run() { ToastUtils.showShort("司机端服务启动成功!")
// 同步是否开启美化模式 if (timer == null) {
setDemoMode(FunctionBuildConfig.isDemoMode) timer = Timer()
setIgnoreConditionDraw(FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData)
msgHandler.synMsgToAllClients()
} }
}, 1000, 10000) // 10s同步一次数据到乘客屏
invokeNettyConnResult("司机端服务启动成功!") timer!!.schedule(object : TimerTask() {
CallerTelematicStatusListenerManager.invokeServerStatusChanged(true) override fun run() {
} // 同步是否开启美化模式
setDemoMode(FunctionBuildConfig.isDemoMode)
override fun onStopServer() { setIgnoreConditionDraw(FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData)
ToastUtils.showLong("司机端服务停止!") msgHandler.synMsgToAllClients()
timer?.cancel() }
timer = null }, 1000, 10000)
invokeNettyConnResult("司机端服务停止!") invokeNettyConnResult("司机端服务启动成功!")
CallerTelematicStatusListenerManager.invokeServerStatusChanged(false) CallerTelematicStatusListenerManager.invokeServerStatusChanged(true)
}
override fun onChannelConnect(channel: Channel?) {
msgHandler.handleClientConn2Server(channel)
}
override fun onChannelDisConnect(channel: Channel?) {
CallerLogger.d("$M_D_C$TAG", "onChannelDisConnect")
}
override fun onReceiveClientSign(channel: Channel?, sn: String?) {
sn?.let {
invokeNettyConnResult("连接成功的乘客屏sn为:$it")
} }
}
}, MoGoAiCloudClientConfig.getInstance().sn)
} else {
NSDNettyManager.getInstance()
.searchAndConnectServer(context, MoGoAiCloudClientConfig.getInstance().sn,
AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode),
object : NettyClientListener<MogoProtocolMsg> {
override fun onMessageResponseClient(
msg: MogoProtocolMsg?,
sign: String?,
channel: Channel
) {
// 乘客端收到adas数据直接解析后续分发解析后的数据流程同司机端
msgHandler.handleMsgFromServer(msg, channel)
}
override fun onClientStatusConnectChanged( override fun onStopServer() {
statusCode: Int, ToastUtils.showLong("司机端服务停止!")
sign: String?, timer?.cancel()
channel: Channel timer = null
) { invokeNettyConnResult("司机端服务停止!")
msgHandler.handleClientConnStatus(statusCode, sign, channel) CallerTelematicStatusListenerManager.invokeServerStatusChanged(false)
}
})
}
msgHandler.setListener(object : EventListener {
override fun connectDevice(isSupportMulti: Boolean) {
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
if (!isInit) {
isInit = true
// 转发工控机数据给乘客屏
listenDeviceData()
} }
} else {
if (!isInit) { override fun onChannelConnect(channel: Channel?) {
isInit = true msgHandler.handleClientConn2Server(channel)
UiThreadHandler.post { }
if (isSupportMulti) {
// 直连工控机 override fun onChannelDisConnect(channel: Channel?) {
directConnect() CallerLogger.d("$M_D_C$TAG", "onChannelDisConnect")
} else { }
val options = AdasOptions
.Builder() override fun onReceiveClientSign(channel: Channel?, sn: String?) {
.setClient(true) sn?.let {
.setUnableLaunchAutopilotGear(FunctionBuildConfig.unableLaunchAutopilotGear) invokeNettyConnResult("连接成功的乘客屏sn为:$it")
.build() }
AdasManager.getInstance() }
.create(options, MoGoAdasMsgConnectStatusListenerImpl()) }, MoGoAiCloudClientConfig.getInstance().sn)
// 监听ADAS-SDK获取到的工控机数据 } else {
AdasManager.getInstance().setOnAdasListener(MoGoAdasListenerImpl()) NSDNettyManager.getInstance()
// 接收司机屏发过来的感知、定位等数据 .searchAndConnectServer(context, MoGoAiCloudClientConfig.getInstance().sn,
listenDeviceData() AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode),
object : NettyClientListener<MogoProtocolMsg> {
override fun onMessageResponseClient(
msg: MogoProtocolMsg?,
sign: String?,
channel: Channel
) {
// 乘客端收到adas数据直接解析后续分发解析后的数据流程同司机端
msgHandler.handleMsgFromServer(msg, channel)
}
override fun onClientStatusConnectChanged(
statusCode: Int,
sign: String?,
channel: Channel
) {
msgHandler.handleClientConnStatus(statusCode, sign, channel)
}
})
}
msgHandler.setListener(object : EventListener {
override fun connectDevice(isSupportMulti: Boolean) {
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
if (!isInit) {
isInit = true
// 转发工控机数据给乘客屏
listenDeviceData()
}
} else {
if (!isInit) {
isInit = true
UiThreadHandler.post {
if (isSupportMulti) {
// 直连工控机
directConnect()
} else {
val options = AdasOptions
.Builder()
.setClient(true)
.setUnableLaunchAutopilotGear(FunctionBuildConfig.unableLaunchAutopilotGear)
.build()
AdasManager.getInstance()
.create(options, MoGoAdasMsgConnectStatusListenerImpl())
// 监听ADAS-SDK获取到的工控机数据
AdasManager.getInstance().setOnAdasListener(MoGoAdasListenerImpl())
// 接收司机屏发过来的感知、定位等数据
listenDeviceData()
}
} }
} }
} }
} }
})
CallerAutopilotCarConfigListenerManager.addListener(TAG, this)
CallerLogger.i("$M_D_C$TAG", "initServer……")
// 同步数据给工控机的服务
AsyncDataToAutopilotServer.INSTANCE.initServer()
}.onFailure { throwable ->
if (DebugConfig.isDebug()) {
ToastUtils.showLong("AutoPilot出现异常请立即处理!")
} }
}) throwable.printStackTrace()
CallerAutopilotCarConfigListenerManager.addListener(TAG, this) }
CallerLogger.i("$M_D_C$TAG", "initServer……")
// 同步数据给工控机的服务
AsyncDataToAutopilotServer.INSTANCE.initServer()
} }
private fun directConnect() { private fun directConnect() {