[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 com.alibaba.android.arouter.facade.annotation.Route
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.toAutoPilotLine
import com.mogo.eagle.core.data.autopilot.toRouteInfo
@@ -96,14 +97,15 @@ class MoGoAutopilotControlProvider :
override fun init(context: Context) {
CallerLogger.i("$M_D_C$TAG", "初始化工控机连接……")
mContext = context
// 初始化ADAS 域控制器
CupidLogUtils.setEnableLog(false)
msgHandler = TeleMsgHandler()
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {// 司机
// 注册地图采集功能
CallerMapDataCollectorManager.registerOnMapCollectTaskListener(this)
runCatching {
// 初始化ADAS 域控制器
CupidLogUtils.setEnableLog(false)
msgHandler = TeleMsgHandler()
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {// 司机
// 注册地图采集功能
CallerMapDataCollectorManager.registerOnMapCollectTaskListener(this)
// 配置默认关闭的连接topic
// 配置默认关闭的连接topic
// val messageTypes: MutableSet<MessageType> = HashSet()
// messageTypes.add(MessageType.TYPE_RECEIVE_POINT_CLOUD)
// val subscribeInterfaceOptions = SubscribeInterfaceOptions.newBuilder()
@@ -111,125 +113,131 @@ class MoGoAutopilotControlProvider :
// .setType(Constants.SUBSCRIBE_TYPE.UNSUBSCRIBE)
// .setMessageTypes(messageTypes).build()
// "192.168.1.102"
val options = AdasOptions.Builder()
.setIpcConnectionMode(AdasOptions.IPC_CONNECTION_MODE.FIXATION)
.setIpcFixationIP(AdasManager.getInstance().getIPCFixationIPList(mContext))
.setClient(false)
.setUnableLaunchAutopilotGear(FunctionBuildConfig.unableLaunchAutopilotGear)
// "192.168.1.102"
val options = AdasOptions.Builder()
.setIpcConnectionMode(AdasOptions.IPC_CONNECTION_MODE.FIXATION)
.setIpcFixationIP(AdasManager.getInstance().getIPCFixationIPList(mContext))
.setClient(false)
.setUnableLaunchAutopilotGear(FunctionBuildConfig.unableLaunchAutopilotGear)
// .setSubscribeInterfaceOptions(subscribeInterfaceOptions)//
.build()
.build()
AdasManager.getInstance().create(options, MoGoAdasMsgConnectStatusListenerImpl())
//////////////////////////////////注意先后顺序AdasManager.getInstance().create后才可以设置监听/////////////////////////////////////////////
// 监听ADAS-SDK获取到的工控机数据
AdasManager.getInstance().setOnAdasListener(MoGoAdasListenerImpl())
NSDNettyManager.getInstance().startNSDNettyServerWithSN(context, object :
NettyServerListener<MogoProtocolMsg> {
override fun onMessageResponseServer(msg: MogoProtocolMsg?, channel: Channel?) {
msgHandler.handleMsgFromClient(msg, channel)
}
override fun onStartServer() {
ToastUtils.showShort("司机端服务启动成功!")
if (timer == null) {
timer = Timer()
AdasManager.getInstance().create(options, MoGoAdasMsgConnectStatusListenerImpl())
//////////////////////////////////注意先后顺序AdasManager.getInstance().create后才可以设置监听/////////////////////////////////////////////
// 监听ADAS-SDK获取到的工控机数据
AdasManager.getInstance().setOnAdasListener(MoGoAdasListenerImpl())
NSDNettyManager.getInstance().startNSDNettyServerWithSN(context, object :
NettyServerListener<MogoProtocolMsg> {
override fun onMessageResponseServer(msg: MogoProtocolMsg?, channel: Channel?) {
msgHandler.handleMsgFromClient(msg, channel)
}
// 10s同步一次数据到乘客屏
timer!!.schedule(object : TimerTask() {
override fun run() {
// 同步是否开启美化模式
setDemoMode(FunctionBuildConfig.isDemoMode)
setIgnoreConditionDraw(FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData)
msgHandler.synMsgToAllClients()
override fun onStartServer() {
ToastUtils.showShort("司机端服务启动成功!")
if (timer == null) {
timer = Timer()
}
}, 1000, 10000)
invokeNettyConnResult("司机端服务启动成功!")
CallerTelematicStatusListenerManager.invokeServerStatusChanged(true)
}
override fun onStopServer() {
ToastUtils.showLong("司机端服务停止!")
timer?.cancel()
timer = null
invokeNettyConnResult("司机端服务停止!")
CallerTelematicStatusListenerManager.invokeServerStatusChanged(false)
}
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")
// 10s同步一次数据到乘客屏
timer!!.schedule(object : TimerTask() {
override fun run() {
// 同步是否开启美化模式
setDemoMode(FunctionBuildConfig.isDemoMode)
setIgnoreConditionDraw(FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData)
msgHandler.synMsgToAllClients()
}
}, 1000, 10000)
invokeNettyConnResult("司机端服务启动成功!")
CallerTelematicStatusListenerManager.invokeServerStatusChanged(true)
}
}
}, 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(
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()
override fun onStopServer() {
ToastUtils.showLong("司机端服务停止!")
timer?.cancel()
timer = null
invokeNettyConnResult("司机端服务停止!")
CallerTelematicStatusListenerManager.invokeServerStatusChanged(false)
}
} 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()
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(
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出现异常请立即处理!")
}
})
CallerAutopilotCarConfigListenerManager.addListener(TAG, this)
CallerLogger.i("$M_D_C$TAG", "initServer……")
// 同步数据给工控机的服务
AsyncDataToAutopilotServer.INSTANCE.initServer()
throwable.printStackTrace()
}
}
private fun directConnect() {