@@ -1,14 +1,25 @@
package com.mogo.eagle.core.function.business.ai
import android.content.Context
import android.os.Handler
import com.mogo.aicloud.services.socket.IMogoOnMessageListener
import com.mogo.aicloud.services.socket.MogoAiCloudSocketManager
import com.mogo.commons.debug.DebugConfig
import com.mogo.commons.module.status.MogoStatusManager
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.data.deva.chain.ChainConstant
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ROMA_CLICK
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ROMA_CLICK_END
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ROMA_CLOUD_ERROR
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ROMA_MAP_END
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ROMA_MAP_START
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ROMA_REQUEST
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ROMA_REQUEST_ERROR
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ROMA_REQUEST_OK
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ROMA_ROUTE_MODE
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
import com.mogo.eagle.core.function.api.autopilot.IMoGoPlanningRottingListener
import com.mogo.eagle.core.function.api.map.roma.IMoGoRomaListener
import com.mogo.eagle.core.function.business.ai.net.AiCloudIdentifyNetWorkModel.Companion.aiCloudIdentifyNetWorkModel
import com.mogo.eagle.core.function.business.identify.MapIdentifySubscriber
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
@@ -18,18 +29,17 @@ import com.mogo.eagle.core.function.call.map.CallerMapRomaListener
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager.updateLongSightLevel
import com.mogo.eagle.core.function.utils.MapBizTrace
import com.mogo.eagle.core.utilcode.util.GsonUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.map.MogoMapUIController
import com.mogo.map.listener.IMogoMapListener
import com.mogo.map.listener.MogoMapListenerHandler
import com.mogo.map.uicontroller.VisualAngleMode
import com.zhjt.service.chain.ChainLog
import mogo.telematics.pad.MessagePad
import mogo.yycp.api.proto.SocketDownData
import java.util.concurrent.atomic.AtomicBoolean
class AiCloudIdentifyDataManager : IMogoMap Listener ,
IMoGoPlanningRotting Listener , IMoGoAutopilotStatus Listener {
class AiCloudIdentifyDataManager : IMoGoPlanningRotting Listener ,
IMoGoAutopilotStatus Listener , IMoGoRoma Listener {
companion object {
private const val TAG = " AiCloudIdentifyData "
@@ -45,10 +55,29 @@ class AiCloudIdentifyDataManager : IMogoMapListener,
private var showAiCloud = AtomicBoolean ( false )
private var aiCloudDataChange = AtomicBoolean ( false )
private val handler = Handler {
if ( it . what == 1 ) {
if ( ! aiCloudDataChange . get ( ) ) {
MapBizTrace . log (
CHAIN _CODE _ROMA _MAP _START , CHAIN _CODE _ROMA _CLOUD _ERROR , TAG , GsonUtils . toJson (
mutableMapOf (
" msg " to " 云端5秒内无感知数据下发 " ,
" socketStatus " to MogoStatusManager . getInstance ( ) . isSocketOnLine ,
" cityCode " to CallerChassisLocationWGS84ListenerManager . getChassisLocationWGS84 ( ) . cityCode
)
)
)
}
}
true
}
fun initServer ( mContext : Context ) {
MogoMapListenerHandler . mogoMapListenerHandler . registerHostMapListener ( TAG , this )
CallerAutoPilotStatusListenerManager . addListener ( TAG , this )
CallerPlanningRottingListenerManager . addListener ( TAG , this )
CallerPlanningRottingListenerManager . addListener ( TAG , this )
CallerMapRomaListener . addListener ( TAG , this )
MogoAiCloudSocketManager . getInstance ( mContext )
. registerOnMessageListener (
0x040003 , //低频数据
@@ -66,6 +95,9 @@ class AiCloudIdentifyDataManager : IMogoMapListener,
override fun onMsgReceived ( obj : SocketDownData . SocketDownDataProto ? ) {
obj ?. let {
obj . data ?. let {
if ( it . allListList != null && it . allListList . size > 0 ) {
aiCloudDataChange . set ( true )
}
if ( showAiCloud . get ( ) ) {
if ( it . allListList == null || it . allListList . size == 0 ) {
MapIdentifySubscriber . instance . clearAiCloudRoma ( )
@@ -79,8 +111,13 @@ class AiCloudIdentifyDataManager : IMogoMapListener,
} )
}
fun trigger ( romaStatus : Boolean , connectError : ( ( Boolean ) -> Unit ) ? ) {
MapBizTrace . log ( TAG , " trigger " )
fun trigger ( romaStatus : Boolean ) {
MapBizTrace . log (
" " ,
CHAIN _CODE _ROMA _CLICK ,
TAG ,
GsonUtils . toJson ( mutableMapOf ( " trigger " to romaStatus ) )
)
// 乘客司机屏屏各自单独控制漫游
if ( romaStatus ) {
// 开启roma, 当前非漫游, 开启
@@ -103,52 +140,105 @@ class AiCloudIdentifyDataManager : IMogoMapListener,
MapIdentifySubscriber . instance . clearAiCloudRoma ( )
// 主动关闭roma, 回到中景视角
if ( manual ) {
MapBizTrace . logEnd ( CHAIN _CODE _ROMA _CLICK , CHAIN _CODE _ROMA _CLICK _END , TAG , " " )
MogoMapUIController . getInstance ( )
. changeMapVisualAngle ( VisualAngleMode . MODE _MEDIUM _SIGHT , null )
}
}
fun requestRangeOfIdentify ( dataReceive : Boolean ) {
val status = MogoStatusManager . getInstance ( ) . isSocketOnLine
val gnss = CallerChassisLocationWGS84ListenerManager . getChassisLocationWGS84 ( ) . gnssInfo
MapBizTrace . log ( TAG , " 开启请求, data: $dataReceive , socketStatus: $status , lon: ${gnss.longitude} , lat: ${gnss.latitude} , heading: ${gnss.heading} " )
aiCloudIdentifyNetWorkModel . requestIdentifyRange ( dataReceive , gnss . longitude , gnss . latitude , {
MapBizTrace . log (
TAG ,
" requestIdentifyRange ok startRange: $START _METRE, endRange: $END _METRE , dataReceive: $dataReceive "
// false, 改变父节点信息
MapBizTrace . log (
if ( dataReceive ) CHAIN _CODE _ROMA _CLICK else " " , CHAIN _CODE _ROMA _REQUEST , TAG ,
GsonUtils . toJson (
mutableMapOf (
" dataReceive " to dataReceive ,
" lon " to gnss . longitude ,
" lat " to gnss . latitude ,
" heading " to gnss . heading ,
" socketStatus " to MogoStatusManager . getInstance ( ) . isSocketOnLine ,
" cityCode " to CallerChassisLocationWGS84ListenerManager . getChassisLocationWGS84 ( ) . cityCode
)
)
if ( dataReceive ) {
// 请求地图开始漫游
MogoMapUIController . getInstance ( ) . setRomaMode ( FunctionBuildConfig . romaModeStyl e )
CallerMapRomaListener . invokeMapRoma ( tru e )
} else {
)
aiCloudIdentifyNetWorkModel . requestIdentifyRange (
dataReceiv e,
gnss . longitud e,
gnss . latitude ,
{
// false, 改变父节点信息
MapBizTrace . log (
if ( dataReceive ) CHAIN _CODE _ROMA _REQUEST else " " ,
CHAIN _CODE _ROMA _REQUEST _OK ,
TAG ,
GsonUtils . toJson (
mutableMapOf (
" dataResult " to dataReceive ,
" startRange " to START _METRE ,
" endRange " to END _METRE ,
)
)
)
if ( dataReceive ) {
// 请求地图开始漫游
MogoMapUIController . getInstance ( ) . setRomaMode ( FunctionBuildConfig . romaModeStyle )
CallerMapRomaListener . invokeMapRoma ( true )
} else {
CallerMapRomaListener . invokeMapRoma ( false )
}
} ,
{ errorMsg ->
// false, 改变父节点信息
MapBizTrace . logEnd (
if ( dataReceive ) CHAIN _CODE _ROMA _REQUEST else " " ,
CHAIN _CODE _ROMA _REQUEST _ERROR ,
TAG ,
GsonUtils . toJson (
mutableMapOf (
" errorMsg " to errorMsg ,
" dataResult " to dataReceive ,
" startRange " to START _METRE ,
" endRange " to END _METRE
)
)
)
updateLongSightLevel ( false )
CallerMapRomaListener . invokeMapRoma ( false )
}
} , {
MapBizTrace . log (
TAG ,
" requestIdentifyRange error : $it , startRange: $START _METRE, endRange: $END _METRE, dataReceive: $dataReceive "
)
updateLongSightLevel ( false )
CallerMapRomaListener . invokeMapRoma ( false )
if ( DebugConfig . isDebug ( ) ) {
ToastUtils . showShort ( " 漫游请求异常, msg: $it " )
}
} )
if ( DebugConfig . isDebug ( ) ) {
ToastUtils . showShort ( " 漫游请求异常, msg: $errorMsg " )
}
} )
}
override fun onMapVisualAngleChanged ( visualAngleMode : VisualAngleMode ) {
super . onMapVisualAngleChanged ( visualAngleMode )
when {
// 解除漫游限制
visualAngleMode . isRoma -> {
MapBizTrace . log ( TAG , " onMapVisualAngleChanged, invoke roma , socketStatus: ${ MogoStatusManager.getInstance().isSocketOnLine} " )
//status 0: 进入漫游模式成功 1; 进入漫游模式失败 2: 正常结束漫游 3: 切换视角结束漫游
override fun mapRomaStatus ( status : Int , msg : String ) {
super . mapRomaStatus ( status , msg )
MapBizTrace . log (
CHAIN _CODE _ROMA _REQUEST _OK ,
CHAIN _CODE _ROMA _MAP _START ,
TAG ,
GsonUtils . toJson ( mutableMapOf ( " mapStatus " to status , " mapRomaMsg " to msg ) )
)
when ( status ) {
0 -> {
showAiCloud . set ( true )
FunctionBuildConfig . isDrawIdentifyData = false
// 5秒没有触发 则预警日志写入
handler . sendEmptyMessageDelayed ( 1 , 5 _000L )
}
else -> {
1 -> {
if ( DebugConfig . isDebug ( ) ) {
ToastUtils . showShort ( " 进入漫游模式失败, msg: $msg " )
}
}
2 , 3 -> {
if ( showAiCloud . get ( ) ) {
MapBizTrace . log( TAG , " onMapVisualAngleChanged, invoke close roma " )
MapBizTrace . logEnd (
CHAIN _CODE _ROMA _MAP _START , CHAIN _CODE _ROMA _MAP _END , TAG , GsonUtils . toJson (
mutableMapOf ( " romaEnd " to " 地图结束回调,状态: $status " )
)
)
showAiCloud . set ( false )
closeRoma ( false )
FunctionBuildConfig . isDrawIdentifyData = true
@@ -181,7 +271,12 @@ class AiCloudIdentifyDataManager : IMogoMapListener,
}
private fun updateRomaStyle ( auto : Boolean , route : String ? = null ) {
MapBizTrace . log ( TAG , " updateRomaStyle auto status: $auto , route: ${route?:"reset null"} " )
MapBizTrace . log (
" " ,
CHAIN _CODE _ROMA _ROUTE _MODE ,
TAG ,
" updateRomaStyle auto status: $auto , route: ${route ?: "reset null"} "
)
route ?. let {
CallerMapUIServiceManager . getMapUIController ( ) ?. setRoamTrajectory ( route )
}