[2.13.0-arch-opt]v2x code style

This commit is contained in:
zhongchao
2023-02-17 20:25:19 +08:00
parent 6cd9b5d76c
commit df3e018c30
89 changed files with 651 additions and 1131 deletions

View File

@@ -6,7 +6,7 @@ import android.view.LayoutInflater
import android.widget.LinearLayout
import com.mogo.eagle.core.data.enums.DataSourceType
import com.mogo.eagle.core.data.enums.TrafficLightEnum
import com.mogo.eagle.core.function.api.v2x.IMoGoTrafficLightListener
import com.mogo.eagle.core.function.api.datacenter.union.IMoGoTrafficLightListener
import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.och.bus.passenger.R

View File

@@ -8,9 +8,10 @@ import android.widget.LinearLayout
import com.mogo.eagle.core.data.enums.DataSourceType
import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener
import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener.Companion.LimitingVelocityView_TAG
import com.mogo.eagle.core.function.api.v2x.ILimitingVelocityListener
import com.mogo.eagle.core.function.api.datacenter.union.ILimitingVelocityListener
import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager
import com.mogo.eagle.core.function.call.v2x.CallerLimitingVelocityListenerManager
import com.mogo.eagle.core.utilcode.util.ThreadUtils
import com.mogo.och.sweeper.R
import kotlinx.android.synthetic.main.sweeper_limiting_speed.view.*
@@ -34,11 +35,13 @@ class SweeperLimitingVelocityView(
}
override fun onLimitingVelocityChange(limitingVelocity: Int, sourceType: DataSourceType) {
if (limitingVelocity > 0) {
this.visibility = View.VISIBLE
tvLimitingVelocity.text = "$limitingVelocity"
} else {
this.visibility = View.GONE
ThreadUtils.runOnUiThread {
if (limitingVelocity > 0) {
this.visibility = View.VISIBLE
tvLimitingVelocity.text = "$limitingVelocity"
} else {
this.visibility = View.GONE
}
}
}

View File

@@ -10,16 +10,12 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout;
import com.mogo.eagle.core.data.enums.DataSourceType;
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisGearStateListener;
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLamplightListener;
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisSteeringStateListener;
import com.mogo.eagle.core.function.api.v2x.ILimitingVelocityListener;
import com.mogo.eagle.core.function.call.autopilot.CallerChassisGearStateListenerManager;
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLamplightListenerManager;
import com.mogo.eagle.core.function.call.autopilot.CallerChassisSteeringStateListenerManager;
import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager;
import com.mogo.eagle.core.function.call.v2x.CallerLimitingVelocityListenerManager;
import com.mogo.eagle.core.function.hmi.ui.widget.TapPositionView;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.eagle.core.utilcode.util.ThreadUtils;
@@ -89,7 +85,7 @@ public class SweeperTrafficDataView extends ConstraintLayout
*/
@Override
public void onAutopilotLightSwitchData(@org.jetbrains.annotations.Nullable Chassis.LightSwitch lightSwitch) {
ThreadUtils.runOnUiThread {
ThreadUtils.runOnUiThread(() -> {
//转向灯状态 0是正常 1是左转 2是右转
if (lightSwitch != null) {
CallerLogger.INSTANCE.d(TAG, "车辆转向灯:" + lightSwitch.toString());
@@ -101,7 +97,7 @@ public class SweeperTrafficDataView extends ConstraintLayout
sweeperTurnSignal.showDirection();
}
}
}
});
}
/**

View File

@@ -6,7 +6,7 @@ import android.view.LayoutInflater
import android.widget.LinearLayout
import com.mogo.eagle.core.data.enums.DataSourceType
import com.mogo.eagle.core.data.enums.TrafficLightEnum
import com.mogo.eagle.core.function.api.v2x.IMoGoTrafficLightListener
import com.mogo.eagle.core.function.api.datacenter.union.IMoGoTrafficLightListener
import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.och.sweeper.R

View File

@@ -30,8 +30,8 @@ import com.mogo.eagle.core.data.msgbox.MsgBoxBean;
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener;
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener;
import com.mogo.eagle.core.function.api.autopilot.IMoGoPlanningRottingListener;
import com.mogo.eagle.core.function.api.msgbox.IMsgBoxEventListener;
import com.mogo.eagle.core.function.api.v2x.ILimitingVelocityListener;
import com.mogo.eagle.core.function.api.datacenter.msgbox.IMsgBoxEventListener;
import com.mogo.eagle.core.function.api.datacenter.union.ILimitingVelocityListener;
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager;
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager;
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager;

View File

@@ -6,7 +6,7 @@ import android.view.LayoutInflater
import android.widget.LinearLayout
import com.mogo.eagle.core.data.enums.DataSourceType
import com.mogo.eagle.core.data.enums.TrafficLightEnum
import com.mogo.eagle.core.function.api.v2x.IMoGoTrafficLightListener
import com.mogo.eagle.core.function.api.datacenter.union.IMoGoTrafficLightListener
import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.och.taxi.passenger.R

View File

@@ -4,12 +4,11 @@ import android.os.*
import androidx.test.core.app.*
import androidx.test.ext.junit.runners.*
import androidx.test.filters.*
import com.mogo.eagle.core.data.v2x.V2XEvent
import com.mogo.eagle.core.function.hmi.ui.*
import com.mogo.eagle.core.function.main.*
import com.mogo.eagle.core.function.v2x.events.*
import com.mogo.eagle.core.function.v2x.internal.data.V2XRoadXData
import com.mogo.eagle.core.function.v2x.internal.event.V2XEvent
import com.mogo.eagle.core.function.v2x.internal.event.V2XEvent.RoadAI
import com.mogo.eagle.core.data.v2x.V2XRoadXData
import com.mogo.eagle.core.utilcode.util.GsonUtils
import kotlinx.coroutines.*
import org.junit.*
@@ -128,7 +127,7 @@ class RoadAITest {
.build())
.build())
.build()
val event = RoadAI(data = child)
val event = V2XEvent.RoadAI(data = child)
while (true) {
delay(1000)
V2XEventManager.onAck(event)

View File

@@ -22,7 +22,7 @@ import java.util.concurrent.TimeUnit
object OverViewDataManager {
const val TAG = "OverViewDataManager"
private const val TAG = "OverViewDataManager"
private val overviewDao by lazy {
OverviewDb.getDb(AbsMogoApplication.getApp()).overviewDao()

View File

@@ -1,5 +1,6 @@
package com.mogo.eagle.function.biz.v2x.overview.remote
import com.mogo.eagle.core.data.v2x.V2XEventResult
import io.reactivex.Observable
import retrofit2.http.GET
import retrofit2.http.Query

View File

@@ -1,20 +0,0 @@
package com.mogo.eagle.function.biz.v2x.overview.remote
import androidx.annotation.Keep
import com.google.gson.annotations.SerializedName
import com.mogo.eagle.core.data.BaseData
import com.mogo.eagle.core.data.v2x.V2XEvent
@Keep
data class V2XEventResult (
@SerializedName("result")
var result: Result?
): BaseData()
@Keep
data class Result(
@SerializedName("eventList")
var v2XEventList: List<V2XEvent>?
)

View File

@@ -13,7 +13,7 @@ import com.mogo.eagle.core.data.msgbox.V2XMsg
import com.mogo.eagle.core.data.trafficlight.*
import com.mogo.eagle.core.data.trafficlight.TrafficLightStatusHelper.getCurrentRoadTrafficLight
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener
import com.mogo.eagle.core.function.api.v2x.IMoGoTrafficLightListener
import com.mogo.eagle.core.function.api.datacenter.union.IMoGoTrafficLightListener
import com.mogo.eagle.core.function.api.v2x.IMoGoVipSetListener
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager

View File

@@ -19,7 +19,7 @@ import com.mogo.eagle.core.data.trafficlight.currentRoadTrafficLight
import com.mogo.eagle.core.data.trafficlight.isGreen
import com.mogo.eagle.core.data.trafficlight.isRed
import com.mogo.eagle.core.data.v2x.VipMessage
import com.mogo.eagle.core.function.api.v2x.IMoGoTrafficLightListener
import com.mogo.eagle.core.function.api.datacenter.union.IMoGoTrafficLightListener
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager

View File

@@ -0,0 +1,28 @@
package com.mogo.eagle.core.function.datacenter.aicloud
import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.mogo.cloud.socket.SocketManager
import com.mogo.commons.AbsMogoApplication
import com.mogo.eagle.core.data.constants.MogoServicePaths
import com.mogo.eagle.core.function.api.base.IMoGoFunctionServerProvider
@Route(path = MogoServicePaths.PATH_AI_CLOUD)
class AiCloudSocketBizProvider : IMoGoFunctionServerProvider {
override val functionName: String
get() = "AiCloudSocketBizProvider"
override fun init(context: Context?) {
SocketManager.getInstance().init(AbsMogoApplication.getApp(), 0.0, 0.0)
SocketManager.getInstance().registerOnMessageListener(401012, V2XMessageListener401012())
SocketManager.getInstance().registerOnMessageListener(401018, V2XMessageListener401018())
SocketManager.getInstance().registerOnMessageListener(402000, V2XMessageListener402000())
SocketManager.getInstance().registerOnMessageListener(404000, V2XMessageListener404000())
//SocketManager.getInstance().registerOnMessageListener(503000, V2XMessageListener503000())
SocketManager.getInstance().registerOnMessageListener(70001, V2XMessageListener70001())
}
override fun onDestroy() {
}
}

View File

@@ -0,0 +1,96 @@
package com.mogo.eagle.core.function.datacenter.aicloud
import com.mogo.cloud.socket.IMogoCloudSocketOnMessageListener
import com.mogo.eagle.core.data.v2x.*
import com.mogo.eagle.core.function.call.cloud.CallerCloudListenerManager
import roadwork.Road
internal class V2XMessageListener70001: IMogoCloudSocketOnMessageListener<V2XRoadXData> {
override fun target(msgType: Int): Class<V2XRoadXData> = V2XRoadXData::class.java
override fun onMsgReceived(msgType: Int, data: V2XRoadXData?) {
if (msgType != 70001) {
return
}
if (data == null) {
return
}
CallerCloudListenerManager.invokeSocketAck(V2XEvent.RoadEventX(data = data))
}
}
internal class V2XMessageListener401012: IMogoCloudSocketOnMessageListener<V2XMarkerCardResult> {
override fun target(msgType: Int): Class<V2XMarkerCardResult> = V2XMarkerCardResult::class.java
override fun onMsgReceived(msgType: Int, data: V2XMarkerCardResult?) {
if (msgType != 401012) {
return
}
if (data == null) {
return
}
CallerCloudListenerManager.invokeSocketAck(V2XEvent.Road(data = data))
}
}
internal class V2XMessageListener401018: IMogoCloudSocketOnMessageListener<V2XWarningTarget> {
override fun target(msgType: Int): Class<V2XWarningTarget> = V2XWarningTarget::class.java
override fun onMsgReceived(msgType: Int, data: V2XWarningTarget?) {
if (msgType != 401018) {
return
}
if (data == null) {
return
}
CallerCloudListenerManager.invokeSocketAck(V2XEvent.Warning(data = data))
}
}
internal class V2XMessageListener402000: IMogoCloudSocketOnMessageListener<V2XOptimalRoute> {
override fun target(msgType: Int): Class<V2XOptimalRoute> = V2XOptimalRoute::class.java
override fun onMsgReceived(msgType: Int, data: V2XOptimalRoute?) {
if (msgType != 402000) {
return
}
if (data == null) {
return
}
CallerCloudListenerManager.invokeSocketAck(V2XEvent.OptimalRoute(data = data))
}
}
internal class V2XMessageListener404000: IMogoCloudSocketOnMessageListener<V2XAdvanceWarning> {
override fun target(msgType: Int): Class<V2XAdvanceWarning> = V2XAdvanceWarning::class.java
override fun onMsgReceived(msgType: Int, data: V2XAdvanceWarning?) {
if (msgType != 404000) {
return
}
if (data == null) {
return
}
CallerCloudListenerManager.invokeSocketAck(V2XEvent.ForwardsWarning(data = data))
}
}
internal class V2XMessageListener503000: IMogoCloudSocketOnMessageListener<Road.RW_PB> {
override fun target(msgType: Int): Class<Road.RW_PB> = Road.RW_PB::class.java
override fun onMsgReceived(msgType: Int, data: Road.RW_PB?) {
if (msgType != 503000) {
return
}
if (data == null) {
return
}
CallerCloudListenerManager.invokeSocketAck(V2XEvent.RoadAI(data = data))
}
}

View File

@@ -1,5 +1,6 @@
package com.mogo.eagle.core.function.datacenter.autopilot.adapter
import android.content.Context
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.commons.debug.DebugConfig.*
import com.mogo.eagle.core.data.config.FunctionBuildConfig
@@ -27,12 +28,15 @@ class MoGoAdasMsgConnectStatusListenerImpl :
OnAdasConnectStatusListener,
IMoGoAutopilotStatusListener,
IMoGoCloudListener {
private val TAG = "ConnectStatus"
companion object{
private const val TAG = "ConnectStatus"
}
private var connectStatus = false
init {
CallerCloudListenerManager.registerCloudListener(TAG, this)
CallerCloudListenerManager.addListener(TAG, this)
}
override fun onConnectionIPCStatus(ipcConnectionStatus: Int, reason: String?) {

View File

@@ -1,7 +1,7 @@
package com.mogo.eagle.core.function.datacenter.autopilot.server
import com.mogo.eagle.core.data.trafficlight.TrafficLightResult
import com.mogo.eagle.core.function.api.v2x.IMoGoTrafficLightListener
import com.mogo.eagle.core.function.api.datacenter.union.IMoGoTrafficLightListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager

View File

@@ -2,7 +2,7 @@ package com.mogo.eagle.core.function.datacenter.v2x
import android.content.Context
import com.mogo.eagle.core.data.enums.DataSourceType
import com.mogo.eagle.core.function.api.v2x.ILimitingVelocityListener
import com.mogo.eagle.core.function.api.datacenter.union.ILimitingVelocityListener
import com.mogo.eagle.core.function.call.v2x.CallerLimitingVelocityListenerManager
/**

View File

@@ -6,7 +6,7 @@ import com.mogo.eagle.core.data.enums.DataSourceType
import com.mogo.eagle.core.data.enums.TrafficLightEnum
import com.mogo.eagle.core.data.trafficlight.*
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotIdentifyListener
import com.mogo.eagle.core.function.api.v2x.IMoGoTrafficLightListener
import com.mogo.eagle.core.function.api.datacenter.union.IMoGoTrafficLightListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager
import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager
import perception.TrafficLightOuterClass

View File

@@ -4,7 +4,7 @@ import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.mogo.eagle.core.data.constants.MogoServicePaths.PATH_MSG_BOX_MODULE
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.function.api.msgbox.IMsgBoxProvider
import com.mogo.eagle.core.function.api.datacenter.msgbox.IMsgBoxProvider
import com.mogo.eagle.core.function.msgbox.DataManager.saveAllMessages2Disk
@Route(path = PATH_MSG_BOX_MODULE)

View File

@@ -152,6 +152,9 @@ class BindingCarNetWorkManager private constructor() {
}
private fun updateCarVrIconRes(brandId: String?) {
if(!DebugConfig.isCarModelChange()){
return
}
if (brandId == null || brandId.isEmpty()) {
return
}

View File

@@ -43,7 +43,7 @@ class TraceManager : IMoGoCloudListener, IMoGoAutopilotCarConfigListener {
// 初始化Trace抓取服务
val pkgName = Utils.getApp().packageName
ChainTraceStarter.start(pkgName, DeviceUtils.getMacAddress(), false)
CallerCloudListenerManager.registerCloudListener(TAG, this)
CallerCloudListenerManager.addListener(TAG, this)
CallerAutopilotCarConfigListenerManager.addListener(TAG, this)
// Trace过程中进行日志抓取对日志进行配置

View File

@@ -23,7 +23,7 @@ class TtsManager : IMoGoCloudListener {
fun initTts(context: Context) {
val sn = SharedPrefsMgr.getInstance(context).getString("sn")
if (sn.isNullOrEmpty()) {
CallerCloudListenerManager.registerCloudListener(TraceManager.TAG, this)
CallerCloudListenerManager.addListener(TraceManager.TAG, this)
}
AIAssist.getInstance(context)
}

View File

@@ -9,7 +9,7 @@ import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.LinearLayoutManager
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.data.msgbox.MsgCategory
import com.mogo.eagle.core.function.api.msgbox.IMsgBoxListener
import com.mogo.eagle.core.function.api.datacenter.msgbox.IMsgBoxListener
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxListenerManager

View File

@@ -6,7 +6,7 @@ import android.view.LayoutInflater
import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.function.api.msgbox.IMsgBoxEventListener
import com.mogo.eagle.core.function.api.datacenter.msgbox.IMsgBoxEventListener
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager
import com.mogo.eagle.core.function.hmi.R
import kotlinx.android.synthetic.main.view_driver_msg_box_button.view.*

View File

@@ -9,8 +9,8 @@ import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.LinearLayoutManager
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.data.msgbox.MsgCategory
import com.mogo.eagle.core.function.api.msgbox.IMsgBoxEventListener
import com.mogo.eagle.core.function.api.msgbox.IMsgBoxListener
import com.mogo.eagle.core.function.api.datacenter.msgbox.IMsgBoxEventListener
import com.mogo.eagle.core.function.api.datacenter.msgbox.IMsgBoxListener
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxListenerManager
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager

View File

@@ -9,7 +9,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.data.msgbox.MsgBoxType
import com.mogo.eagle.core.data.msgbox.MsgCategory
import com.mogo.eagle.core.function.api.msgbox.IMsgBoxListener
import com.mogo.eagle.core.function.api.datacenter.msgbox.IMsgBoxListener
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxListenerManager
import com.mogo.eagle.core.function.hmi.R

View File

@@ -6,18 +6,15 @@ import android.util.AttributeSet
import android.view.*
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.LinearLayoutManager
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.data.msgbox.MsgBoxType
import com.mogo.eagle.core.data.msgbox.MsgCategory
import com.mogo.eagle.core.function.api.msgbox.IMsgBoxListener
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
import com.mogo.eagle.core.function.api.datacenter.msgbox.IMsgBoxListener
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxListenerManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.function.hmi.ui.msgbox.adapter.PassengerMsgBoxBubbleAdapter
import com.mogo.eagle.core.function.msgbox.MsgBoxConfig
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import kotlinx.android.synthetic.main.layout_passenger_msg_box_bubble.view.*

View File

@@ -6,7 +6,7 @@ import android.view.LayoutInflater
import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.function.api.msgbox.IMsgBoxEventListener
import com.mogo.eagle.core.function.api.datacenter.msgbox.IMsgBoxEventListener
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager
import com.mogo.eagle.core.function.hmi.R
import kotlinx.android.synthetic.main.view_passenger_msg_box_button.view.*

View File

@@ -7,18 +7,16 @@ import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.data.msgbox.MsgBoxType
import com.mogo.eagle.core.data.msgbox.MsgCategory
import com.mogo.eagle.core.function.api.msgbox.IMsgBoxEventListener
import com.mogo.eagle.core.function.api.msgbox.IMsgBoxListener
import com.mogo.eagle.core.function.api.datacenter.msgbox.IMsgBoxEventListener
import com.mogo.eagle.core.function.api.datacenter.msgbox.IMsgBoxListener
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxListenerManager
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.function.hmi.ui.msgbox.adapter.PassengerMsgBoxListAdapter
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.util.ResourceUtils.getDrawable
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import kotlinx.android.synthetic.main.layout_passenger_msg_box_list.view.*

View File

@@ -4,7 +4,6 @@ import android.content.Context
import android.util.AttributeSet
import android.util.TypedValue.COMPLEX_UNIT_PX
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.appcompat.content.res.AppCompatResources
import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo
@@ -17,7 +16,7 @@ import com.mogo.eagle.core.data.trafficlight.isRed
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotPlanningActionsListener
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener.Companion.STATUS_AUTOPILOT_RUNNING
import com.mogo.eagle.core.function.api.v2x.IMoGoTrafficLightListener
import com.mogo.eagle.core.function.api.datacenter.union.IMoGoTrafficLightListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerPlanningActionsListenerManager
import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager
@@ -25,8 +24,6 @@ import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.zhjt.service_biz.BizConfig
import kotlinx.android.synthetic.main.view_pnc_actions.view.*
import me.jessyan.autosize.AutoSize
import me.jessyan.autosize.utils.AutoSizeUtils
import mogo.telematics.pad.MessagePad
class PncActionsView @JvmOverloads constructor(
@@ -52,16 +49,25 @@ class PncActionsView @JvmOverloads constructor(
init {
LayoutInflater.from(context).inflate(R.layout.view_pnc_actions, this, true)
val a = context.obtainStyledAttributes(attrs, R.styleable.PncActionsView, defStyleAttr, 0)
bgResources = a.getResourceId(R.styleable.PncActionsView_background_resource, R.drawable.pnc_actions_bg)
topMargin = a.getResourceId(R.styleable.PncActionsView_pnc_top_margin,resources.getDimension(R.dimen.dp_30).toInt())
txtSize = a.getResourceId(R.styleable.PncActionsView_pnc_size,resources.getDimension(R.dimen.dp_34).toInt())
bgResources = a.getResourceId(
R.styleable.PncActionsView_background_resource,
R.drawable.pnc_actions_bg
)
topMargin = a.getResourceId(
R.styleable.PncActionsView_pnc_top_margin,
resources.getDimension(R.dimen.dp_30).toInt()
)
txtSize = a.getResourceId(
R.styleable.PncActionsView_pnc_size,
resources.getDimension(R.dimen.dp_34).toInt()
)
a.recycle()
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
(tvHmiPncActions.layoutParams as MarginLayoutParams).topMargin = topMargin
tvHmiPncActions.setTextSize(COMPLEX_UNIT_PX,txtSize.toFloat())
tvHmiPncActions.setTextSize(COMPLEX_UNIT_PX, txtSize.toFloat())
CallerAutoPilotStatusListenerManager.addListener(TAG, this)
CallerPlanningActionsListenerManager.addListener(TAG, this)
@@ -124,6 +130,9 @@ class PncActionsView @JvmOverloads constructor(
tvHmiPncActions.text = actions
}
}
} else {
this.background = null
tvHmiPncActions.text = ""
}
}

View File

@@ -2,14 +2,13 @@ package com.mogo.eagle.core.function.hmi.ui.widget
import android.content.Context
import android.util.AttributeSet
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.eagle.core.data.enums.DataSourceType
import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener
import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener.Companion.LimitingVelocityView_TAG
import com.mogo.eagle.core.function.api.v2x.ILimitingVelocityListener
import com.mogo.eagle.core.function.api.datacenter.union.ILimitingVelocityListener
import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager
import com.mogo.eagle.core.function.call.v2x.CallerLimitingVelocityListenerManager
import com.mogo.eagle.core.function.hmi.R
@@ -43,7 +42,6 @@ class LimitingVelocityView constructor(
if (limitingVelocity > 0) {
visibility = View.VISIBLE
tvLimitingVelocity.text = "$limitingVelocity"
Log.d("emArrow","limit : ${ DataSourceType.getName(sourceType)}")
tvLimitingSource.text = DataSourceType.getName(sourceType)
} else {
visibility = View.GONE

View File

@@ -13,7 +13,7 @@ import com.mogo.eagle.core.data.enums.DataSourceType
import com.mogo.eagle.core.data.enums.TrafficLightEnum
import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener
import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener.Companion.TrafficLightView_TAG
import com.mogo.eagle.core.function.api.v2x.IMoGoTrafficLightListener
import com.mogo.eagle.core.function.api.datacenter.union.IMoGoTrafficLightListener
import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager
import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager
import com.mogo.eagle.core.function.hmi.R

View File

@@ -8,12 +8,11 @@ import android.widget.FrameLayout
import com.mogo.eagle.core.data.enums.DataSourceType
import com.mogo.eagle.core.data.map.MogoLocation
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener
import com.mogo.eagle.core.function.api.v2x.ILimitingVelocityListener
import com.mogo.eagle.core.function.api.datacenter.union.ILimitingVelocityListener
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager
import com.mogo.eagle.core.function.call.v2x.CallerLimitingVelocityListenerManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import java.util.*
class SpeedPanelView @JvmOverloads constructor(
context: Context,

View File

@@ -22,10 +22,10 @@ import com.amap.api.maps.TextureMapView
import com.amap.api.maps.model.*
import com.mogo.eagle.core.data.map.Infrastructure
import com.mogo.eagle.core.data.map.MogoLocation
import com.mogo.eagle.core.data.v2x.V2XEvent
import com.mogo.eagle.core.data.v2x.V2XEventData
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener
import com.mogo.eagle.core.function.api.autopilot.IMoGoPlanningRottingListener
import com.mogo.eagle.core.function.api.v2x.IFuncBizProvider
import com.mogo.eagle.core.function.api.biz.IFuncBizProvider
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager.getGlobalPath
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerPlanningRottingListenerManager
@@ -300,8 +300,8 @@ class OverMapView @JvmOverloads constructor(
geoHashInfMap = map
}
override fun onV2XEvents(v2xEvents: List<V2XEvent>?) {
showV2XEventMarkers(v2xEvents)
override fun onV2XEvents(v2XEventData: List<V2XEventData>?) {
showV2XEventMarkers(v2XEventData)
}
})
// 主动查一次全局路径规划的数据
@@ -389,11 +389,11 @@ class OverMapView @JvmOverloads constructor(
/**
* 显示V2X事件的Marker
*/
private fun showV2XEventMarkers(v2XEvents: List<V2XEvent>?) {
if (v2XEvents == null || v2XEvents.isEmpty()) return
private fun showV2XEventMarkers(v2XEventData: List<V2XEventData>?) {
if (v2XEventData == null || v2XEventData.isEmpty()) return
clearV2XMarkers()
val markerOptionsList = ArrayList<MarkerOptions>()
for (v2xEvent in v2XEvents) {
for (v2xEvent in v2XEventData) {
val center = v2xEvent.center
if (center != null) {
val markerOption = MarkerOptions()

View File

@@ -8,10 +8,7 @@ import com.mogo.eagle.core.function.api.startup.IStartUpProvider
import com.mogo.eagle.core.function.startup.stageone.APMStartup
import com.mogo.eagle.core.function.startup.stageone.HttpDnsStartUp
import com.mogo.eagle.core.function.startup.stageone.ThreadOptStartup
import com.mogo.eagle.core.function.startup.stagetwo.AutopilotStartUp
import com.mogo.eagle.core.function.startup.stagetwo.DataCenterStartUp
import com.mogo.eagle.core.function.startup.stagetwo.ObuStartUp
import com.mogo.eagle.core.function.startup.stagetwo.MapBizStartUp
import com.mogo.eagle.core.function.startup.stagetwo.*
import com.rousetime.android_startup.StartupListener
import com.rousetime.android_startup.StartupManager
import com.rousetime.android_startup.model.CostTimesModel
@@ -20,7 +17,7 @@ import com.rousetime.android_startup.model.StartupConfig
import org.greenrobot.eventbus.EventBus
@Route(path = MogoServicePaths.PATH_STARTUP_PROVIDER)
class MogoStartUpProvider: IStartUpProvider {
class MogoStartUpProvider : IStartUpProvider {
private var context: Context? = null
@@ -39,8 +36,7 @@ class MogoStartUpProvider: IStartUpProvider {
}
override fun initStageOne() {
var config: StartupConfig? = null
config = if (DebugConfig.isDebug()) {
val config = if (DebugConfig.isDebug()) {
StartupConfig.Builder()
.setLoggerLevel(LoggerLevel.DEBUG)
.setOpenStatistics(true)
@@ -78,6 +74,7 @@ class MogoStartUpProvider: IStartUpProvider {
StartupManager.Builder()
.addStartup(DataCenterStartUp())
.addStartup(AutopilotStartUp())
.addStartup(AiCloudBizStartUp())
.addStartup(ObuStartUp())
.addStartup(MapBizStartUp())
.setConfig(config)

View File

@@ -0,0 +1,28 @@
package com.mogo.eagle.core.function.startup.stagetwo
import android.content.Context
import com.alibaba.android.arouter.launcher.ARouter
import com.mogo.eagle.core.data.constants.MogoServicePaths
import com.rousetime.android_startup.AndroidStartup
class AiCloudBizStartUp : AndroidStartup<Boolean>() {
override fun create(context: Context): Boolean {
ARouter.getInstance().build(MogoServicePaths.PATH_AI_CLOUD).navigation()
return true
}
override fun callCreateOnMainThread(): Boolean {
return true
}
override fun waitOnMainThread(): Boolean {
return false
}
override fun dependenciesByName(): List<String> {
val deps = arrayListOf<String>()
deps.add("com.mogo.eagle.core.function.startup.stagetwo.DataCenterStartUp")
return deps
}
}

View File

@@ -4,7 +4,6 @@ plugins {
id 'kotlin-android-extensions'
id 'kotlin-kapt'
id 'com.alibaba.arouter'
id 'com.google.protobuf'
}
android {
compileSdkVersion rootProject.ext.android.compileSdkVersion
@@ -36,19 +35,6 @@ android {
targetCompatibility JavaVersion.VERSION_1_8
}
protobuf {
protoc {
artifact = rootProject.ext.dependencies.protoc
}
generateProtoTasks {
all().each { task ->
task.builtins {
java {}
}
}
}
}
}
dependencies {
@@ -63,8 +49,6 @@ dependencies {
implementation rootProject.ext.dependencies.arouter
implementation rootProject.ext.dependencies.rxandroid
kapt rootProject.ext.dependencies.aroutercompiler
implementation rootProject.ext.dependencies.protobuf_java
implementation rootProject.ext.dependencies.protobuf_java_util
implementation rootProject.ext.dependencies.mogoaicloudtrafficlive

View File

@@ -7,16 +7,9 @@ import android.os.Handler
import android.os.Looper
import android.util.Log
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.mogo.cloud.passport.IMoGoTokenCallback
import com.mogo.cloud.passport.MoGoAiCloudClient
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.commons.constants.HostConst
import com.mogo.commons.module.ServiceConst.CARD_TYPE_ROAD_CONDITION
import com.mogo.commons.network.ParamsUtil
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_CLOUD_V2N
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_CLOUD
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_LOG_CLOUD_V2N
import com.mogo.eagle.core.data.enums.DataSourceType
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.data.enums.EventTypeEnumNew
import com.mogo.eagle.core.data.enums.EventTypeHelper
@@ -28,11 +21,11 @@ import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.data.msgbox.MsgBoxType
import com.mogo.eagle.core.data.msgbox.V2XMsg
import com.mogo.eagle.core.data.traffic.TrafficData
import com.mogo.eagle.core.data.v2x.V2XAdvanceWarning
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotIdentifyListener
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener
import com.mogo.eagle.core.function.api.map.angle.*
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
@@ -47,37 +40,30 @@ import com.mogo.eagle.core.function.v2x.events.consts.V2XConst.BROADCAST_SCENE_H
import com.mogo.eagle.core.function.v2x.events.receiver.SceneBroadcastReceiver
import com.mogo.eagle.core.function.v2x.events.scenario.impl.V2XScenarioManager
import com.mogo.eagle.core.function.v2x.events.utils.toRoadMarker
import com.mogo.eagle.core.function.v2x.events.utils.toV2XRoadEventEntity
import com.mogo.eagle.core.function.v2x.internal.V2XManager
import com.mogo.eagle.core.function.v2x.internal.callback.IV2XCallback
import com.mogo.eagle.core.function.v2x.internal.config.V2XConfig
import com.mogo.eagle.core.function.v2x.internal.data.*
import com.mogo.eagle.core.function.v2x.internal.event.V2XEvent
import com.mogo.eagle.core.function.v2x.road.V2XEventServiceApi
import com.mogo.eagle.core.network.MoGoRetrofitFactory
import com.mogo.eagle.core.data.v2x.V2XEvent
import com.mogo.eagle.core.data.v2x.V2XMarkerCardResult
import com.mogo.eagle.core.data.v2x.V2XWarningTarget
import com.mogo.eagle.core.function.api.cloud.IMoGoCloudListener
import com.mogo.eagle.core.function.call.cloud.CallerCloudListenerManager
import com.mogo.eagle.core.function.v2x.events.V2XPoiLoader.Companion.v2xPoiLoader
import com.mogo.eagle.core.function.v2x.events.utils.toV2XRoadEventEntity
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.Logger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_V2X
import com.mogo.eagle.core.utilcode.util.ThreadUtils
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.eagle.core.utilcode.util.Utils
import com.mogo.map.marker.MogoMarkersHandler.Companion.mogoMarkersHandler
import com.zhjt.service.chain.ChainLog
import com.zhjt.service.chain.TracingConstants
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.android.asCoroutineDispatcher
import kotlinx.coroutines.cancel
import kotlinx.coroutines.launch
import java.util.concurrent.TimeUnit
import java.util.concurrent.atomic.AtomicBoolean
import mogo.telematics.pad.MessagePad
object V2XEventManager : IMoGoChassisLocationGCJ02Listener, IMoGoTokenCallback, IV2XCallback,
IMoGoAutopilotIdentifyListener {
object V2XEventManager : IMoGoChassisLocationGCJ02Listener, IV2XCallback,
IMoGoAutopilotIdentifyListener, IMoGoCloudListener {
private const val TAG = "V2XEventManager"
@@ -87,57 +73,34 @@ object V2XEventManager : IMoGoChassisLocationGCJ02Listener, IMoGoTokenCallback,
private val hasInit by lazy { AtomicBoolean(false) }
var v2xEventDisposable: Disposable? = null
fun init(context: Context) {
BridgeApi.init(context)
if (hasInit.compareAndSet(false, true)) {
if (!V2XManager.hasInit()) {
V2XManager.init(V2XConfig.Builder().also {
it.aiCloudConfig(MoGoAiCloudClientConfig.getInstance())
it.context(context)
it.loggable(false)
it.distanceForTriggerRefresh(200f) //行驶超过200包含刷新道路周边信息短链请求
it.durationForTriggerRefresh(
60,
TimeUnit.SECONDS
) // 每隔1分钟根据自车定位刷新道路周边信息短链请求
it.executor(ThreadUtils.getIoPool()) //用到的线程池IO类型
it.staticParams(ParamsUtil.getStaticParams())
}.build())
V2XManager.start()
}
registerListener()
V2XManager.forceRefresh()
MoGoAiCloudClient.getInstance().addTokenCallbacks(this)
v2xPoiLoader.startLoopPoi()
// 注册广播接收场景弹窗使用的
SceneBroadcastReceiver.register(context)
}
}
private fun registerListener() {
V2XManager.addCallback(this)
CallerChassisLocationGCJ02ListenerManager.addListener(TAG, this)
CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 1,this)
v2xPoiLoader.addCallback(this)
CallerCloudListenerManager.addListener(TAG,this)
CallerAutopilotIdentifyListenerManager.addListener(TAG, this)
}
private fun unRegisterListener() {
V2XManager.removeCallback(this)
CallerChassisLocationGCJ02ListenerManager.removeListener(TAG)
v2xPoiLoader.removeCallback(this)
CallerCloudListenerManager.removeListener(TAG)
CallerAutopilotIdentifyListenerManager.removeListener(TAG)
mogoMarkersHandler.unregisterMarkerClickListener(CARD_TYPE_ROAD_CONDITION)
}
override fun onChassisLocationGCJ02(mogoLocation: MogoLocation?) {
BridgeApi.location.set(mogoLocation)
mogoLocation?.let {
if (V2XManager.hasInit()) {
V2XManager.onLocationChanged(
longitude = it.longitude,
latitude = mogoLocation.latitude
)
}
v2xPoiLoader.updateCheck(mogoLocation.longitude,mogoLocation.latitude)
refreshCarState(mogoLocation)
}
}
@@ -167,12 +130,6 @@ object V2XEventManager : IMoGoChassisLocationGCJ02Listener, IMoGoTokenCallback,
}
}
override fun onTokenGot(token: String?, sn: String?) {
if (V2XManager.hasInit()) {
V2XManager.updateSnAndToken(sn, token)
}
}
/**
* V2XEvent事件回调
*/
@@ -202,12 +159,11 @@ object V2XEventManager : IMoGoChassisLocationGCJ02Listener, IMoGoTokenCallback,
handleWarningTargetEvent(event.data)
}
is V2XEvent.RoadAI -> {
if(FunctionBuildConfig.isV2NFromCar){
if (FunctionBuildConfig.isV2NFromCar) {
return
}
handleRoadMarkerEvent(event.data.toRoadMarker())
}
is V2XEvent.RoadEventX -> {
handleRoadMarkerEvent(event.data.toRoadMarker())
}
@@ -220,7 +176,7 @@ object V2XEventManager : IMoGoChassisLocationGCJ02Listener, IMoGoTokenCallback,
@SuppressLint("NewApi")
override fun onAutopilotIdentifyPlanningObj(planningObjects: List<MessagePad.PlanningObject>?) {
super.onAutopilotIdentifyPlanningObj(planningObjects)
if(!FunctionBuildConfig.isV2NFromCar){
if (!FunctionBuildConfig.isV2NFromCar) {
return
}
planningObjects?.let {
@@ -277,6 +233,7 @@ object V2XEventManager : IMoGoChassisLocationGCJ02Listener, IMoGoTokenCallback,
}
}
//todo 可优化与obu解析类似
private fun handleAdvanceWarningEvent(event: V2XEvent.ForwardsWarning) {
scope.launch {
val message = event.data
@@ -422,69 +379,13 @@ object V2XEventManager : IMoGoChassisLocationGCJ02Listener, IMoGoTokenCallback,
}
fun queryWholeRoadEvents() {
if (v2xEventDisposable != null && !v2xEventDisposable!!.isDisposed) {
v2xEventDisposable!!.dispose()
}
val sn = MoGoAiCloudClientConfig.getInstance().sn
val lineId = getLineId()
if (lineId > 0) {
realQueryV2xEvents(lineId.toString(), sn)
} else {
UiThreadHandler.postDelayed({
realQueryV2xEvents(getLineId().toString(), sn)
}, 500)
}
}
private fun realQueryV2xEvents(lineId: String, sn: String) {
v2xEventDisposable = MoGoRetrofitFactory.getInstance(HostConst.getHost())
.create(V2XEventServiceApi::class.java)
.queryAllV2XEventsByLineId(lineId, sn)
.map {
if (it.code == 200 || it.code == 0) {
CallerLogger.d(M_V2X + TAG, "请求成功size为${it.result?.v2XEventList?.size}")
return@map it.result?.v2XEventList
} else {
CallerLogger.d(M_V2X + TAG, "请求失败code为${it.code}")
return@map ArrayList()
}
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
val size = it?.size ?: 0
if (size > 0) {
val msgBoxBean =
MsgBoxBean(MsgBoxType.V2X, V2XMsg("", "查询到当前全程共${size}个事件", ""))
msgBoxBean.sourceType = DataSourceType.SUMMARY
CallerMsgBoxManager.saveMsgBox(msgBoxBean)
}
}
}
private fun getLineId(): Long {
var lineId: Long = -1
val parameter = CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo()
.autopilotControlParameters
if (parameter != null) {
if (parameter.autoPilotLine != null) {
lineId = parameter.autoPilotLine!!.lineId
CallerLogger.d(M_V2X + TAG, "lineId为:$lineId")
} else {
CallerLogger.d(M_V2X + TAG, "parameter.autoPilotLine为null")
}
} else {
CallerLogger.d(M_V2X + TAG, "parameter为null")
}
return lineId
v2xPoiLoader.queryWholeRoadEvents()
}
override fun onFail(msg: String) {
CallerLogger.e("$M_V2X$TAG", "Error: $msg")
}
override fun onError(code: Int, msg: String?) {}
fun onDestroy() {
if (hasInit.compareAndSet(true, false)) {
try {
@@ -494,6 +395,7 @@ object V2XEventManager : IMoGoChassisLocationGCJ02Listener, IMoGoTokenCallback,
} finally {
unRegisterListener()
}
v2xPoiLoader.stopLoopPoi()
}
}

View File

@@ -0,0 +1,184 @@
package com.mogo.eagle.core.function.v2x.events
import android.os.Handler
import android.os.Looper
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.eagle.core.data.enums.DataSourceType
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.data.msgbox.MsgBoxType
import com.mogo.eagle.core.data.msgbox.V2XMsg
import com.mogo.eagle.core.data.v2x.V2XEvent
import com.mogo.eagle.core.data.v2x.V2XMarkerResponse
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager
import com.mogo.eagle.core.function.v2x.internal.callback.IV2XCallback
import com.mogo.eagle.core.function.v2x.internal.http.V2XRefreshModel
import com.mogo.eagle.core.function.v2x.internal.http.callback.IV2XRefreshCallback
import com.mogo.eagle.core.function.v2x.internal.utils.DistanceUtils
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.UiThreadHandler
import java.util.concurrent.CopyOnWriteArrayList
import java.util.concurrent.TimeUnit
import java.util.concurrent.atomic.AtomicReference
class V2XPoiLoader private constructor() {
companion object {
private const val TAG = "V2XPoiLoader"
val v2xPoiLoader by lazy(LazyThreadSafetyMode.SYNCHRONIZED) {
V2XPoiLoader()
}
}
private val lastLongitude by lazy { AtomicReference(0.0) }
private val lastLatitude by lazy { AtomicReference(0.0) }
private val realLongitude by lazy { AtomicReference(0.0) }
private val realLatitude by lazy { AtomicReference(0.0) }
private val handler by lazy {
Handler(Looper.getMainLooper())
}
private val cbs by lazy {
CopyOnWriteArrayList<IV2XCallback>()
}
/**
* 添加相关信息接口回调
* @param cb 要添加的回调接口
*/
fun addCallback(cb: IV2XCallback) {
if (cbs.contains(cb)) {
return
}
cbs += cb
}
/**
* 移除相关信息接口回调
* @param cb 要移除的回调接口
*/
fun removeCallback(cb: IV2XCallback) {
if (!cbs.contains(cb)) {
return
}
cbs.remove(cb)
}
fun updateCheck(longitude: Double, latitude: Double) {
realLongitude.set(longitude)
realLatitude.set(latitude)
val oldLon = lastLongitude.get()
val oldLat = lastLatitude.get()
var update = false
try {
if (oldLon == 0.0 || oldLat == 0.0) {
handler.removeCallbacks(refreshTask)
handler.post(refreshTask)
update = true
return
}
if (DistanceUtils.calculateLineDistance(oldLon, oldLat, longitude, latitude) >= 200f) {
handler.removeCallbacks(refreshTask)
handler.post(refreshTask)
update = true
}
} finally {
if (update) {
lastLatitude.set(latitude)
lastLongitude.set(longitude)
}
}
}
/**
* 开启loop Poi事件
*/
fun startLoopPoi() {
handler.removeCallbacks(refreshTask)
handler.post(refreshTask)
}
private val refreshTask = object : Runnable {
override fun run() {
V2XRefreshModel.querySnapshot(
longitude = realLongitude.get(), latitude = realLatitude.get(),
refreshCallback
)
handler.postDelayed(this, TimeUnit.SECONDS.toMillis(60))
}
}
fun stopLoopPoi() {
handler.removeCallbacks(refreshTask)
lastLatitude.set(0.0)
lastLongitude.set(0.0)
}
private val refreshCallback = object : IV2XRefreshCallback<V2XMarkerResponse> {
override fun onSuccess(result: V2XMarkerResponse) {
cbs.forEach {
it.onAck(V2XEvent.Marker(result))
}
}
override fun onFail(msg: String?) {
cbs.forEach {
it.onFail(msg ?: "")
}
}
}
/**
* 查询全览路径上的事件信息
*/
fun queryWholeRoadEvents() {
V2XRefreshModel.roadEventDispose()
val sn = MoGoAiCloudClientConfig.getInstance().sn
val lineId = getLineId()
if (lineId > 0) {
realQueryV2xEvents(lineId.toString(), sn)
} else {
UiThreadHandler.postDelayed({
realQueryV2xEvents(getLineId().toString(), sn)
}, 500)
}
}
private fun getLineId(): Long {
var lineId: Long = -1
val parameter = CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo()
.autopilotControlParameters
if (parameter != null) {
if (parameter.autoPilotLine != null) {
lineId = parameter.autoPilotLine!!.lineId
CallerLogger.d(SceneConstant.M_V2X + TAG, "lineId为:$lineId")
} else {
CallerLogger.d(SceneConstant.M_V2X + TAG, "parameter.autoPilotLine为null")
}
} else {
CallerLogger.d(SceneConstant.M_V2X + TAG, "parameter为null")
}
return lineId
}
private fun realQueryV2xEvents(lineId: String, sn: String) {
V2XRefreshModel.getRoadEvents(lineId, sn) {
val size = it?.size ?: 0
if (size > 0) {
val msgBoxBean =
MsgBoxBean(MsgBoxType.V2X, V2XMsg("", "查询到当前全程共${size}个事件", ""))
msgBoxBean.sourceType = DataSourceType.SUMMARY
CallerMsgBoxManager.saveMsgBox(msgBoxBean)
}
}
}
}

View File

@@ -6,7 +6,7 @@ import com.alibaba.android.arouter.facade.template.IProvider;
import com.mogo.eagle.core.data.map.entity.V2XRoadEventEntity;
import com.mogo.map.marker.IMogoMarker;
import com.mogo.map.marker.IMogoMarkerClickListener;
import com.mogo.eagle.core.function.v2x.internal.data.V2XMarkerCardResult;
import com.mogo.eagle.core.data.v2x.V2XMarkerCardResult;
import java.util.concurrent.CopyOnWriteArrayList;

View File

@@ -19,11 +19,8 @@ import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager;
import com.mogo.eagle.core.function.v2x.events.consts.MoGoV2XServicePaths;
import com.mogo.eagle.core.function.v2x.events.manager.IMoGoV2XMarkerManager;
import com.mogo.eagle.core.function.v2x.events.marker.V2XMarkerAdapter;
import com.mogo.eagle.core.function.v2x.events.utils.EntityUtilsKt;
import com.mogo.eagle.core.function.v2x.events.utils.MapUtils;
import com.mogo.eagle.core.function.v2x.internal.data.V2XMarkerCardResult;
import com.mogo.eagle.core.function.v2x.internal.data.V2XMarkerExploreWay;
import com.mogo.eagle.core.function.v2x.internal.data.V2XMarkerLocation;
import com.mogo.eagle.core.data.v2x.V2XMarkerCardResult;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.map.marker.IMogoMarker;
import com.mogo.map.marker.IMogoMarkerClickListener;

View File

@@ -23,7 +23,7 @@ import com.mogo.eagle.core.function.call.hmi.CallerHmiManager;
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager;
import com.mogo.eagle.core.function.v2x.events.scenario.impl.AbsV2XScenario;
import com.mogo.eagle.core.function.v2x.events.scenario.view.IV2XMarker;
import com.mogo.eagle.core.function.v2x.internal.data.V2XWarningTarget;
import com.mogo.eagle.core.data.v2x.V2XWarningTarget;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import java.math.BigDecimal;

View File

@@ -18,8 +18,8 @@ import com.mogo.eagle.core.function.v2x.events.manager.IMoGoPersonWarnPolylineMa
import com.mogo.eagle.core.function.v2x.events.manager.IMoGoStopPolylineManager;
import com.mogo.eagle.core.function.v2x.events.manager.IMoGoWarnPolylineManager;
import com.mogo.eagle.core.function.v2x.events.scenario.view.IV2XMarker;
import com.mogo.eagle.core.function.v2x.internal.data.V2XLocation;
import com.mogo.eagle.core.function.v2x.internal.data.V2XWarningTarget;
import com.mogo.eagle.core.data.v2x.V2XLocation;
import com.mogo.eagle.core.data.v2x.V2XWarningTarget;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.eagle.core.utilcode.mogo.thread.WorkThreadHandler;
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;

View File

@@ -5,8 +5,9 @@ import com.mogo.eagle.core.data.enums.EventTypeEnumNew.Companion.isRoadEvent
import com.mogo.eagle.core.data.map.entity.MarkerExploreWay
import com.mogo.eagle.core.data.map.entity.MarkerLocation
import com.mogo.eagle.core.data.map.entity.V2XRoadEventEntity
import com.mogo.eagle.core.data.v2x.V2XMarkerCardResult
import com.mogo.eagle.core.data.v2x.V2XRoadXData
import com.mogo.eagle.core.function.v2x.events.scenario.scene.airoad.AiRoadMarker
import com.mogo.eagle.core.function.v2x.internal.data.*
import com.mogo.eagle.core.utilcode.util.CoordinateTransform
import mogo.telematics.pad.MessagePad
import roadwork.Road

View File

@@ -1,257 +0,0 @@
package com.mogo.eagle.core.function.v2x.internal
import android.os.Handler
import android.os.Looper
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.cloud.socket.SocketManager
import com.mogo.eagle.core.function.v2x.internal.callback.IV2XCallback
import com.mogo.eagle.core.function.v2x.internal.config.V2XConfig
import com.mogo.eagle.core.function.v2x.internal.data.V2XMarkerResponse
import com.mogo.eagle.core.function.v2x.internal.event.V2XEvent
import com.mogo.eagle.core.function.v2x.internal.http.V2XRefreshModel
import com.mogo.eagle.core.function.v2x.internal.http.callback.IV2XRefreshCallback
import com.mogo.eagle.core.function.v2x.internal.logger.V2XLogger
import com.mogo.eagle.core.function.v2x.internal.socket.*
import com.mogo.eagle.core.function.v2x.internal.socket.V2XMessageListener_401012
import com.mogo.eagle.core.function.v2x.internal.socket.V2XMessageListener_401018
import com.mogo.eagle.core.function.v2x.internal.socket.V2XMessageListener_402000
import com.mogo.eagle.core.function.v2x.internal.socket.V2XMessageListener_404000
import com.mogo.eagle.core.function.v2x.internal.utils.DistanceUtils
import java.util.concurrent.CopyOnWriteArrayList
import java.util.concurrent.atomic.AtomicBoolean
import java.util.concurrent.atomic.AtomicReference
object V2XManager {
internal const val TAG = "V2XManager"
private val config: AtomicReference<V2XConfig> by lazy {
AtomicReference<V2XConfig>(null)
}
private val cbs by lazy {
CopyOnWriteArrayList<IV2XCallback>()
}
private val lastLongitude by lazy {
AtomicReference(0.0)
}
private val lastLatitude by lazy {
AtomicReference(0.0)
}
private val realLongitude by lazy { AtomicReference(0.0) }
private val realLatitude by lazy { AtomicReference(0.0) }
/**
* 标识此参数是否启动
*/
private val started by lazy {
AtomicBoolean(false)
}
private val refreshCallback = object : IV2XRefreshCallback<V2XMarkerResponse> {
override fun onSuccess(result: V2XMarkerResponse) {
cbs.forEach {
it.onAck(V2XEvent.Marker(result))
}
}
override fun onFail(msg: String?) {
cbs.forEach {
it.onFail(msg ?: "")
}
}
}
private val refreshTask = object : Runnable {
override fun run() {
V2XRefreshModel.querySnapshot(longitude = realLongitude.get(), latitude = realLatitude.get(), refreshCallback)
handler.postDelayed(this, config.get().durationForTriggerRefresh)
}
}
private val handler by lazy {
Handler(Looper.getMainLooper())
}
/**
* 根据所配置的参数初始化V2X相关功能注: 此方法不要重复调用,非首次调用会抛异常)
* @param config 相关配置类
*/
fun init(config: V2XConfig) {
V2XLogger.d(TAG, "-- init --")
if (V2XManager.config.get() != null) {
throw IllegalStateException("V2XManager has been initialized, don't initialize repeatably.")
}
V2XManager.config.set(config)
V2XLogger.loggable = config.loggable
}
/**
* - 开启V2X功能, 此方法调用前,要确保满足以下两个条件:
* 1.初始化方法[init]已调用
* 2.确保[MoGoAiCloudClientConfig.sn]和[MoGoAiCloudClientConfig.token]两个值存在,如果其中有一个值不存在,不会启动相关功能
* - 此函数的功能如下:
* 1.建立长链接[SocketManager.init]
* 2.位置上报服务[LocationManager.init]和[LocationManager.start]
* 3.短链[V2XRefreshModel.querySnapshot]定时轮循,轮循时长取[V2XConfig.durationForTriggerRefresh]
*/
fun start() {
V2XLogger.d(TAG, "-- start --")
val config = config.get() ?: throw IllegalStateException("V2XManager has not been initialized, please invoke V2XManager#init(config: X2XConfig) firstly.")
if (started.get()) {
V2XLogger.d(TAG, "-- has been started --")
return
}
if (config.aiCloudConfig.sn?.isBlank() == true) {
V2XLogger.e(TAG, "sn is null or blank, please ensure sn exists and then invoke V2XManager#start() again.")
cbs.forEach {
it.onFail("sn is null or blank, please ensure sn exists and then invoke V2XManager#start() again.")
}
return
}
if (config.aiCloudConfig.token?.isBlank() == true) {
V2XLogger.e(TAG, "token is null or blank, please ensure token exists and then invoke V2Manager#start() again.")
cbs.forEach {
it.onFail("token is null or blank, please ensure token exists and then invoke V2Manager#start() again.")
}
return
}
if (started.compareAndSet(false, true)) {
V2XLogger.d(TAG, "-- start real --")
SocketManager.getInstance().init(config.context,0.0,0.0)
SocketManager.getInstance().registerOnMessageListener(401012, V2XMessageListener_401012(cbs))
SocketManager.getInstance().registerOnMessageListener(401018, V2XMessageListener_401018(cbs))
SocketManager.getInstance().registerOnMessageListener(402000, V2XMessageListener_402000(cbs))
SocketManager.getInstance().registerOnMessageListener(404000, V2XMessageListener_404000(cbs))
//SocketManager.getInstance().registerOnMessageListener(503000, V2XMessageListener_503000(cbs))
SocketManager.getInstance().registerOnMessageListener(70001, V2XMessageListener_70001(cbs))
handler.post(refreshTask)
}
}
/**
* @param sn 更新后的sn
* @param token 更新后的token
*/
fun updateSnAndToken(sn: String?, token: String?) {
val config = config.get() ?: throw IllegalStateException("V2XManager has not been initialized, please invoke V2XManager#init(config: X2XConfig) firstly.")
sn ?: return
token ?: return
if (started.get()) {
return
}
config.aiCloudConfig.sn = sn
config.aiCloudConfig.token = token
start()
}
/**
* 停止V2X功能
* 1. 断开长链接[SocketManager.release]
* 2. 停止位置上报[LocationManager.stop]
* 3. 取消短链定时轮循任务
*/
fun stop() {
V2XLogger.d(TAG, "-- stop --")
if (config.get() == null) {
throw IllegalStateException("V2XManager has not been initialized, please invoke V2XManager#init(config: X2XConfig) firstly.")
}
if (started.compareAndSet(true, false)) {
V2XLogger.d(TAG, "-- stop real --")
SocketManager.getInstance().release()
handler.removeCallbacks(refreshTask)
lastLatitude.set(0.0)
lastLongitude.set(0.0)
}
}
/**
* 添加相关信息接口回调
* @param cb 要添加的回调接口
*/
fun addCallback(cb: IV2XCallback) {
V2XLogger.d(TAG, "-- addCallback --")
if (cbs.contains(cb)) {
return
}
cbs += cb
}
/**
* 移除相关信息接口回调
* @param cb 要移除的回调接口
*/
fun removeCallback(cb: IV2XCallback) {
V2XLogger.d(TAG, "-- removeCallback --")
if (!cbs.contains(cb)) {
return
}
cbs.remove(cb)
}
/**
* 当自车位置变量时调用
* @param longitude 自车所在精度
* @param latitude 自车所在纬度
*/
fun onLocationChanged(longitude: Double, latitude: Double) {
if (config.get() == null) {
throw IllegalStateException("V2XManager has not been initialized, please invoke V2XManager#init(config: X2XConfig) firstly.")
}
if (!started.get()) {
return
}
//V2XLogger.d(TAG, "--- onLocationChanged --[longitude: $longitude, latitude: $latitude]")
realLongitude.set(longitude)
realLatitude.set(latitude)
val oldLon = lastLongitude.get()
val oldLat = lastLatitude.get()
var update = false
try {
if (oldLon == 0.0 || oldLat == 0.0) {
V2XLogger.d(TAG, "--- onLocationChanged -- first --[longitude: $longitude, latitude: $latitude]")
handler.removeCallbacks(refreshTask)
handler.post(refreshTask)
update = true
return
}
if (DistanceUtils.calculateLineDistance(oldLon, oldLat, longitude, latitude) >= config.get().distanceForTriggerRefresh) {
V2XLogger.d(TAG, "--- onLocationChanged -- trigger --[longitude: $longitude, latitude: $latitude]")
handler.removeCallbacks(refreshTask)
handler.post(refreshTask)
update = true
}
} finally {
if (update) {
lastLatitude.set(latitude)
lastLongitude.set(longitude)
}
}
}
/**
* 是否已经初始化
* @return true: 已初始化过 false: 未初始化
*/
fun hasInit() = getConfig() != null
/**
* 强制刷新道路事件
*/
fun forceRefresh() {
if (hasInit()) {
handler.removeCallbacks(refreshTask)
handler.post(refreshTask)
}
}
internal fun getConfig() = config.get()
}

View File

@@ -1,6 +1,6 @@
package com.mogo.eagle.core.function.v2x.internal.callback
import com.mogo.eagle.core.function.v2x.internal.event.V2XEvent
import com.mogo.eagle.core.data.v2x.V2XEvent
interface IV2XCallback {

View File

@@ -1,174 +0,0 @@
package com.mogo.eagle.core.function.v2x.internal.config
import android.content.Context
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.eagle.core.function.v2x.internal.executor.Executors
import java.util.concurrent.Executor
import java.util.concurrent.TimeUnit
import kotlin.IllegalStateException
/**
* V2X相关配置
*/
class V2XConfig private constructor(builder: Builder) {
/**
* - 应用上下文
* - 必选项
* - 通过[Builder.context]设置
*/
val context : Context by lazy {
builder.context?.applicationContext ?: throw IllegalStateException("context must not be null.")
}
/**
* - 云平台配置参数
* - 必选项
* - 通过[Builder.aiCloudConfig]设置
*/
val aiCloudConfig by lazy {
builder.aiCloudConfig ?: throw IllegalStateException("aiCloudConfig must not be null.")
}
/**
* - 网络请求使用的线程池IO类型
* - 可选项
* - 通过[Builder.executor]设置
*/
val executor: Executor by lazy {
builder.executor ?: Executors.IO
}
/**
* - 是否开启日志
* - 可选项
* - 通过[Builder.loggable]设置,开发阶段可以打开,应用发布后记得关闭
*/
val loggable: Boolean by lazy {
builder.loggable
}
/**
* - 公共参数, 默认为空
* - 可选项
* - 通过[Builder.staticParams]设置
*/
val staticParams by lazy {
builder.staticParams ?: HashMap<String, Any>()
}
/**
* - 基础Url, 默认值为`http://dzt-launcherSnapshot.zhidaozhixing.com`
* - 可选项
* - 通过[Builder.baseUrl]设置
*/
val baseUrl by lazy {
builder.baseUrl ?: "http://dzt-launcherSnapshot.zhidaozhixing.com"
}
/**
* - 多长时间请求一次自车周边信息,单位为毫秒,默认值为`6_000`毫秒
* - 可选项
* - 通过[Builder.durationForTriggerRefresh]设置
*/
val durationForTriggerRefresh by lazy {
val duration = builder.durationForTriggerRefresh
if (duration == null || duration <= 0) TimeUnit.SECONDS.toMillis(60) else duration
}
/**
* - 自车行驶超过此长度,会刷新自车周边信息,单位为`米`
* - 可选项
* - 通过[Builder.distanceForTriggerRefresh]设置
*/
val distanceForTriggerRefresh: Float by lazy {
val distance = builder.distanceForTriggerRefresh
if (distance == null || distance <= 0) 200f else distance
}
internal fun newBuilder() = Builder(this)
class Builder {
internal var context: Context? = null
internal var executor: Executor? = null
internal var loggable: Boolean = false
internal var staticParams: Map<String, Any?>? = null
internal var aiCloudConfig: MoGoAiCloudClientConfig? = null
internal var durationForTriggerRefresh: Long? = null
internal var baseUrl: String? = null
internal var distanceForTriggerRefresh: Float? = null
constructor()
internal constructor(config: V2XConfig) {
context = config.context
executor = config.executor
loggable = config.loggable
baseUrl = config.baseUrl
staticParams = config.staticParams
aiCloudConfig = config.aiCloudConfig
durationForTriggerRefresh = config.durationForTriggerRefresh
distanceForTriggerRefresh = config.distanceForTriggerRefresh
}
/**
* 应用上下文,此参数为必选项,不设置会抛异常
*/
fun context(context: Context) = apply { this.context = context }
/**
* 是否开启日志
*/
fun loggable(loggable: Boolean) = apply { this.loggable = loggable }
/**
* 公共参数列表
*/
fun staticParams(params: Map<String, Any?>) = apply { this.staticParams = params }
/**
* 网络请求线程池,如未设置,会使用内置的线程池[Executors.IO]
*/
fun executor(executor: Executor): Builder = apply {
if (this.executor != null) {
throw IllegalArgumentException("io executor has been initialized, don't set repeatedly.")
}
this.executor = executor
}
/**
* 刷新周边信息的时间间隔
* @param duration 时长
* @param unit 时间单位
*/
fun durationForTriggerRefresh(duration: Long, unit: TimeUnit = TimeUnit.SECONDS) = apply { this.durationForTriggerRefresh = unit.toMillis(duration) }
/**
* @param distance 超过此距离会触发刷新周边道路信息,单位为米
*/
fun distanceForTriggerRefresh(distance: Float) = apply { this.distanceForTriggerRefresh = distance }
/**
* 云平台配置信息,此参数为必选项,不设置会抛异常
* @param config 云平台配置
*/
fun aiCloudConfig(config: MoGoAiCloudClientConfig) = apply { this.aiCloudConfig = config }
/**
* 云平台baseUrl
* @param baseUrl 云平台baseUrl
*/
fun baseUrl(baseUrl: String) = apply { this.baseUrl = baseUrl }
fun build() : V2XConfig = V2XConfig(this)
}
}

View File

@@ -1,75 +0,0 @@
package com.mogo.eagle.core.function.v2x.internal.event
import com.mogo.eagle.core.function.v2x.internal.data.*
import roadwork.Road.RW_PB
sealed class V2XEvent {
/**
* 长链-路口碰撞预警、盲区预警等通用Bean
*/
class ForwardsWarning(val type: Int = 404000, val data: V2XAdvanceWarning): V2XEvent() {
override fun toString(): String {
return "ForwardsWarning(type=$type, data=$data)"
}
}
/**
* 长链-最优推荐线种
*/
class OptimalRoute(val type: Int = 402000, val data: V2XOptimalRoute): V2XEvent() {
override fun toString(): String {
return "OptimalRoute(type=$type, data=$data)"
}
}
/**
* 长链-预警目标物
*/
class Warning(val type: Int = 401018, val data: V2XWarningTarget): V2XEvent() {
override fun toString(): String {
return "Warning(type=$type, data=$data)"
}
}
/**
* 长链-道路事件
*/
class Road(val type: Int = 401012, val data: V2XMarkerCardResult): V2XEvent() {
override fun toString(): String {
return "Road(type=$type, data=$data)"
}
}
/**
* 长链-道路事件云识别
*/
class RoadAI(val type: Int = 503000, val data: RW_PB): V2XEvent() {
override fun toString(): String {
return "RoadAI(type=$type, data=$data)"
}
}
/**
* 短链-道路标记事件
*/
class Marker(val data: V2XMarkerResponse): V2XEvent() {
override fun toString(): String {
return "Marker(data=$data)"
}
}
/**
* 长链-道路事件扩展数据结构
*/
class RoadEventX(val type: Int = 70001, val data: V2XRoadXData): V2XEvent() {
override fun toString(): String {
return "RoadEventX(type=$type, data=$data)"
}
}
}

View File

@@ -1,35 +0,0 @@
package com.mogo.eagle.core.function.v2x.internal.executor
import java.util.concurrent.*
import java.util.concurrent.atomic.AtomicLong
import kotlin.math.max
import kotlin.math.min
internal object Executors {
private val group: ThreadGroup by lazy {
ThreadGroup("v2x-group")
}
private val CPU_CORE_COUNT by lazy {
Runtime.getRuntime().availableProcessors()
}
private val DEFAULT_CORE_COUNT by lazy {
(max(2, min(CPU_CORE_COUNT - 1, 6)) * 3) + 1
}
private const val DEFAULT_MAX_COUNT_4_IO = 128
val IO by lazy {
val idGenerator = AtomicLong(0)
ThreadPoolExecutor(
DEFAULT_CORE_COUNT, DEFAULT_MAX_COUNT_4_IO, 30, TimeUnit.SECONDS, LinkedBlockingDeque()
) { r ->
Thread(group, r).apply {
name = "io-thread-${idGenerator.getAndIncrement()}"
}
}
}
}

View File

@@ -4,14 +4,25 @@ import com.elegant.network.utils.GsonUtil
import com.elegant.network.utils.SignUtil
import com.elegant.utils.CommonUtils
import com.mogo.cloud.network.RetrofitFactory
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.commons.AbsMogoApplication
import com.mogo.commons.constants.HostConst
import com.mogo.eagle.core.function.v2x.internal.V2XManager
import com.mogo.eagle.core.function.v2x.internal.config.V2XConfig
import com.mogo.eagle.core.function.v2x.internal.data.V2XLocation
import com.mogo.eagle.core.function.v2x.internal.data.V2XMarkerResponse
import com.mogo.commons.network.ParamsUtil
import com.mogo.eagle.core.data.enums.DataSourceType
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.data.msgbox.MsgBoxType
import com.mogo.eagle.core.data.msgbox.V2XMsg
import com.mogo.eagle.core.data.v2x.V2XEventData
import com.mogo.eagle.core.data.v2x.V2XLocation
import com.mogo.eagle.core.data.v2x.V2XMarkerResponse
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager
import com.mogo.eagle.core.function.v2x.events.V2XPoiLoader
import com.mogo.eagle.core.function.v2x.internal.http.api.V2XApiService
import com.mogo.eagle.core.function.v2x.internal.http.body.V2XRefreshEntity
import com.mogo.eagle.core.function.v2x.internal.http.callback.IV2XRefreshCallback
import com.mogo.eagle.core.network.MoGoRetrofitFactory
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.DeviceUtils
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
@@ -21,17 +32,18 @@ internal class V2XRefreshModel {
companion object {
private const val TAG = "V2XRefreshModel"
fun querySnapshot(
longitude: Double,
latitude: Double,
callback: IV2XRefreshCallback<V2XMarkerResponse>?
): Disposable? {
val config = V2XManager.getConfig()
val retrofit = RetrofitFactory.getInstance(HostConst.getEagleHost()) ?: return null
return retrofit
.create(V2XApiService::class.java)
.querySnapshotSync(buildParams(longitude, latitude, config))
.subscribeOn(Schedulers.from(config.executor))
.querySnapshotSync(buildParams(longitude, latitude))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ data ->
if (data == null) {
@@ -51,9 +63,8 @@ internal class V2XRefreshModel {
private fun buildParams(
longitude: Double,
latitude: Double,
config: V2XConfig
): Map<String, Any> = mutableMapOf<String, Any>().apply {
putAll(config.staticParams.let {
putAll(ParamsUtil.getStaticParams().let {
val handled = mutableMapOf<String, Any>()
it.asIterable().forEach { itx ->
val value = itx.value
@@ -63,10 +74,10 @@ internal class V2XRefreshModel {
}
handled
})
this["netType"] = CommonUtils.getNetworkType(config.context)
this["netType"] = CommonUtils.getNetworkType(AbsMogoApplication.getApp())
this["cellId"] = DeviceUtils.getCellId() ?: ""
this["sn"] = config.aiCloudConfig.sn
this["ticket"] = config.aiCloudConfig.token
this["sn"] = MoGoAiCloudClientConfig.getInstance().sn
this["ticket"] = MoGoAiCloudClientConfig.getInstance().token
this["sig"] = SignUtil.createSign(this, "JGjZx6")
this["data"] = GsonUtil.jsonFromObject(V2XRefreshEntity().apply {
limit = 999
@@ -79,6 +90,34 @@ internal class V2XRefreshModel {
viewPush = true
})
}
private var v2xEventDisposable: Disposable? = null
fun roadEventDispose(){
if (v2xEventDisposable != null && !v2xEventDisposable!!.isDisposed) {
v2xEventDisposable!!.dispose()
}
}
fun getRoadEvents(lineId: String, sn: String, onSuccess:((List<V2XEventData>?) -> Unit)){
v2xEventDisposable = MoGoRetrofitFactory.getInstance(HostConst.getHost())
.create(V2XApiService::class.java)
.queryAllV2XEventsByLineId(lineId, sn)
.map {
if (it.code == 200 || it.code == 0) {
CallerLogger.d(SceneConstant.M_V2X + TAG, "请求成功size为${it.result?.v2XEventList?.size}")
return@map it.result?.v2XEventList
} else {
CallerLogger.d(SceneConstant.M_V2X + TAG, "请求失败code为${it.code}")
return@map ArrayList()
}
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
onSuccess.invoke(it)
}
}
}

View File

@@ -1,14 +1,18 @@
package com.mogo.eagle.core.function.v2x.internal.http.api
import com.mogo.eagle.core.function.v2x.internal.data.V2XMarkerResponse
import com.mogo.eagle.core.data.v2x.V2XEventResult
import com.mogo.eagle.core.data.v2x.V2XMarkerResponse
import io.reactivex.Maybe
import retrofit2.http.FieldMap
import retrofit2.http.FormUrlEncoded
import retrofit2.http.POST
import io.reactivex.Observable
import retrofit2.http.*
internal interface V2XApiService {
@FormUrlEncoded
@POST("eagle-eye-dns/yycp-launcherSnapshot/launcherSnapshot/querySnapshotSync")
fun querySnapshotSync(@FieldMap parameters: Map<String, @JvmSuppressWildcards Any>): Maybe<V2XMarkerResponse?>
@GET("/eagleEye-mis/config/queryV2NInformation")
fun queryAllV2XEventsByLineId(@Query("lineId") lineId: String, @Query("sn") sn: String): Observable<V2XEventResult>
}

View File

@@ -1,7 +1,7 @@
package com.mogo.eagle.core.function.v2x.internal.http.body
import androidx.annotation.Keep
import com.mogo.eagle.core.function.v2x.internal.data.V2XLocation
import com.mogo.eagle.core.data.v2x.V2XLocation
/**
* 刷新地图信息接口

View File

@@ -1,24 +0,0 @@
package com.mogo.eagle.core.function.v2x.internal.logger
import android.util.Log
internal object V2XLogger {
var loggable: Boolean = false
fun v(tag: String, msg: String) = if (loggable) Log.v(tag, msg) else 0
fun d(tag: String, msg: String) = if (loggable) Log.d(tag, msg) else 0
fun i(tag: String, msg: String) = if (loggable) Log.i(tag, msg) else 0
fun w(tag: String, msg: String) = if (loggable) Log.w(tag, msg) else 0
fun e(tag: String, msg: String, t: Throwable? = null) = if (loggable) {
if (t == null) {
Log.e(tag, msg)
} else {
Log.e(tag, msg, t)
}
} else 0
}

View File

@@ -1,27 +0,0 @@
package com.mogo.eagle.core.function.v2x.internal.socket
import com.mogo.cloud.socket.IMogoCloudSocketOnMessageListener
import com.mogo.eagle.core.function.v2x.internal.V2XManager
import com.mogo.eagle.core.function.v2x.internal.callback.IV2XCallback
import com.mogo.eagle.core.function.v2x.internal.data.V2XMarkerCardResult
import com.mogo.eagle.core.function.v2x.internal.event.V2XEvent
import com.mogo.eagle.core.function.v2x.internal.logger.V2XLogger
internal class V2XMessageListener_401012(val cbs: Iterable<IV2XCallback>?): IMogoCloudSocketOnMessageListener<V2XMarkerCardResult> {
override fun target(msgType: Int): Class<V2XMarkerCardResult> = V2XMarkerCardResult::class.java
override fun onMsgReceived(msgType: Int, data: V2XMarkerCardResult?) {
if (msgType != 401012) {
return
}
if (data == null) {
V2XLogger.i(V2XManager.TAG, "V2XMessageListener_401012message is null!")
return
}
V2XLogger.i(V2XManager.TAG, "V2XMessageListener_401012:$data")
cbs?.forEach {
it.onAck(V2XEvent.Road(data = data))
}
}
}

View File

@@ -1,27 +0,0 @@
package com.mogo.eagle.core.function.v2x.internal.socket
import com.mogo.cloud.socket.IMogoCloudSocketOnMessageListener
import com.mogo.eagle.core.function.v2x.internal.V2XManager
import com.mogo.eagle.core.function.v2x.internal.callback.IV2XCallback
import com.mogo.eagle.core.function.v2x.internal.event.V2XEvent
import com.mogo.eagle.core.function.v2x.internal.data.V2XWarningTarget
import com.mogo.eagle.core.function.v2x.internal.logger.V2XLogger
internal class V2XMessageListener_401018(val cbs: Iterable<IV2XCallback>?): IMogoCloudSocketOnMessageListener<V2XWarningTarget> {
override fun target(msgType: Int): Class<V2XWarningTarget> = V2XWarningTarget::class.java
override fun onMsgReceived(msgType: Int, data: V2XWarningTarget?) {
if (msgType != 401018) {
return
}
if (data == null) {
V2XLogger.i(V2XManager.TAG, "V2XMessageListener_401018message is null!")
return
}
V2XLogger.i(V2XManager.TAG, "V2XMessageListener_401018:$data")
cbs?.forEach {
it.onAck(V2XEvent.Warning(data = data))
}
}
}

View File

@@ -1,27 +0,0 @@
package com.mogo.eagle.core.function.v2x.internal.socket
import com.mogo.cloud.socket.IMogoCloudSocketOnMessageListener
import com.mogo.eagle.core.function.v2x.internal.V2XManager
import com.mogo.eagle.core.function.v2x.internal.callback.IV2XCallback
import com.mogo.eagle.core.function.v2x.internal.data.V2XOptimalRoute
import com.mogo.eagle.core.function.v2x.internal.event.V2XEvent
import com.mogo.eagle.core.function.v2x.internal.logger.V2XLogger
internal class V2XMessageListener_402000(val cbs: Iterable<IV2XCallback>?): IMogoCloudSocketOnMessageListener<V2XOptimalRoute> {
override fun target(msgType: Int): Class<V2XOptimalRoute> = V2XOptimalRoute::class.java
override fun onMsgReceived(msgType: Int, data: V2XOptimalRoute?) {
if (msgType != 402000) {
return
}
if (data == null) {
V2XLogger.i(V2XManager.TAG, "V2XMessageListener_402000message is null!")
return
}
V2XLogger.i(V2XManager.TAG, "V2XMessageListener_402000:$data")
cbs?.forEach {
it.onAck(V2XEvent.OptimalRoute(data = data))
}
}
}

View File

@@ -1,27 +0,0 @@
package com.mogo.eagle.core.function.v2x.internal.socket
import com.mogo.cloud.socket.IMogoCloudSocketOnMessageListener
import com.mogo.eagle.core.function.v2x.internal.V2XManager
import com.mogo.eagle.core.function.v2x.internal.callback.IV2XCallback
import com.mogo.eagle.core.function.v2x.internal.data.V2XAdvanceWarning
import com.mogo.eagle.core.function.v2x.internal.event.V2XEvent
import com.mogo.eagle.core.function.v2x.internal.logger.V2XLogger
internal class V2XMessageListener_404000(val cbs: Iterable<IV2XCallback>?): IMogoCloudSocketOnMessageListener<V2XAdvanceWarning> {
override fun target(msgType: Int): Class<V2XAdvanceWarning> = V2XAdvanceWarning::class.java
override fun onMsgReceived(msgType: Int, data: V2XAdvanceWarning?) {
if (msgType != 404000) {
return
}
if (data == null) {
V2XLogger.i(V2XManager.TAG, "V2XMessageListener_404000message is null!")
return
}
V2XLogger.i(V2XManager.TAG, "V2XMessageListener_404000:$data")
cbs?.forEach {
it.onAck(V2XEvent.ForwardsWarning(data = data))
}
}
}

View File

@@ -1,27 +0,0 @@
package com.mogo.eagle.core.function.v2x.internal.socket
import com.mogo.cloud.socket.IMogoCloudSocketOnMessageListener
import com.mogo.eagle.core.function.v2x.internal.V2XManager
import com.mogo.eagle.core.function.v2x.internal.callback.IV2XCallback
import com.mogo.eagle.core.function.v2x.internal.event.V2XEvent.RoadAI
import com.mogo.eagle.core.function.v2x.internal.logger.V2XLogger
import roadwork.Road.RW_PB
internal class V2XMessageListener_503000(val cbs: Iterable<IV2XCallback>?): IMogoCloudSocketOnMessageListener<RW_PB> {
override fun target(msgType: Int): Class<RW_PB> = RW_PB::class.java
override fun onMsgReceived(msgType: Int, data: RW_PB?) {
if (msgType != 503000) {
return
}
if (data == null) {
V2XLogger.i(V2XManager.TAG, "V2XMessageListener_503000message is null!")
return
}
V2XLogger.i(V2XManager.TAG, "V2XMessageListener_503000:$data")
cbs?.forEach {
it.onAck(RoadAI(data = data))
}
}
}

View File

@@ -1,27 +0,0 @@
package com.mogo.eagle.core.function.v2x.internal.socket
import com.mogo.cloud.socket.IMogoCloudSocketOnMessageListener
import com.mogo.eagle.core.function.v2x.internal.V2XManager
import com.mogo.eagle.core.function.v2x.internal.callback.IV2XCallback
import com.mogo.eagle.core.function.v2x.internal.data.V2XRoadXData
import com.mogo.eagle.core.function.v2x.internal.event.V2XEvent
import com.mogo.eagle.core.function.v2x.internal.logger.V2XLogger
internal class V2XMessageListener_70001(val cbs: Iterable<IV2XCallback>?): IMogoCloudSocketOnMessageListener<V2XRoadXData> {
override fun target(msgType: Int): Class<V2XRoadXData> = V2XRoadXData::class.java
override fun onMsgReceived(msgType: Int, data: V2XRoadXData?) {
if (msgType != 70001) {
return
}
if (data == null) {
V2XLogger.i(V2XManager.TAG, "V2XMessageListener_70001message is null!")
return
}
V2XLogger.i(V2XManager.TAG, "V2XMessageListener_70001:$data")
cbs?.forEach {
it.onAck(V2XEvent.RoadEventX(data = data))
}
}
}

View File

@@ -1,11 +0,0 @@
package com.mogo.eagle.core.function.v2x.road
import io.reactivex.Observable
import retrofit2.http.GET
import retrofit2.http.Query
interface V2XEventServiceApi {
@GET("/eagleEye-mis/config/queryV2NInformation")
fun queryAllV2XEventsByLineId(@Query("lineId") lineId: String, @Query("sn") sn: String): Observable<V2XEventResult>
}

View File

@@ -4,6 +4,7 @@ plugins {
id 'kotlin-android-extensions'
id 'kotlin-kapt'
id 'com.alibaba.arouter'
id 'com.google.protobuf'
}
android {
compileSdkVersion rootProject.ext.android.compileSdkVersion
@@ -46,6 +47,19 @@ android {
targetCompatibility JavaVersion.VERSION_1_8
}
protobuf {
protoc {
artifact = rootProject.ext.dependencies.protoc
}
generateProtoTasks {
all().each { task ->
task.builtins {
java {}
}
}
}
}
}
dependencies {
@@ -61,6 +75,9 @@ dependencies {
implementation rootProject.ext.dependencies.androidxroomktx
kapt rootProject.ext.dependencies.androidxroomcompiler
implementation rootProject.ext.dependencies.protobuf_java
implementation rootProject.ext.dependencies.protobuf_java_util
if (Boolean.valueOf(USE_MAVEN_PACKAGE)) {
implementation rootProject.ext.dependencies.mogo_core_res
} else {

View File

@@ -54,6 +54,12 @@ public class MogoServicePaths {
@Keep
public static final String PATH_AUTO_PILOT = "/auto_pilot/api";
/**
* AiCloud socket 数据透出业务模块
*/
@Keep
public static final String PATH_AI_CLOUD = "/ai_cloud/api";
/**
* 业务Biz 模块
*/
@@ -93,7 +99,6 @@ public class MogoServicePaths {
@Keep
public static final String PATH_DATA_CENTER_MODULE = "/data_center/api";
@Keep
public static final String PATH_IDENTIFY = "/map/identify";

View File

@@ -1,4 +1,4 @@
package com.mogo.eagle.core.function.v2x.internal.data
package com.mogo.eagle.core.data.v2x
import androidx.annotation.Keep
import java.io.Serializable

View File

@@ -1,4 +1,4 @@
package com.mogo.eagle.core.function.v2x.internal.data
package com.mogo.eagle.core.data.v2x
open class V2XBaseData {

View File

@@ -1,59 +1,70 @@
package com.mogo.eagle.core.data.v2x
import androidx.annotation.Keep
sealed class V2XEvent {
import com.google.gson.annotations.SerializedName
/**
* 长链-路口碰撞预警、盲区预警等通用Bean
*/
class ForwardsWarning(val type: Int = 404000, val data: V2XAdvanceWarning): V2XEvent() {
override fun toString(): String {
return "ForwardsWarning(type=$type, data=$data)"
}
}
@Keep
data class V2XEvent(
@SerializedName("receiveTime")
var receiveTime: Long,
/**
* 长链-最优推荐线种
*/
class OptimalRoute(val type: Int = 402000, val data: V2XOptimalRoute): V2XEvent() {
override fun toString(): String {
return "OptimalRoute(type=$type, data=$data)"
}
}
@SerializedName("detectTime")
var detectTime: Long,
/**
* 长链-预警目标物
*/
class Warning(val type: Int = 401018, val data: V2XWarningTarget): V2XEvent() {
override fun toString(): String {
return "Warning(type=$type, data=$data)"
}
}
@SerializedName("id")
var id: String?,
/**
* 长链-道路事件
*/
class Road(val type: Int = 401012, val data: V2XMarkerCardResult): V2XEvent() {
override fun toString(): String {
return "Road(type=$type, data=$data)"
}
}
@SerializedName("center")
var center: Center?,
/**
* 长链-道路事件云识别
*/
class RoadAI(val type: Int = 503000, val data: roadwork.Road.RW_PB): V2XEvent() {
@SerializedName("centerRoad")
var centerRoad: CenterRoad?,
override fun toString(): String {
return "RoadAI(type=$type, data=$data)"
}
}
@SerializedName("radius")
var radius: Double,
/**
* 短链-道路标记事件
*/
class Marker(val data: V2XMarkerResponse): V2XEvent() {
@SerializedName("poiType")
var poiType: String?,
override fun toString(): String {
return "Marker(data=$data)"
}
}
@SerializedName("coordinateType")
var coordinateType:Int? = null
)
/**
* 长链-道路事件扩展数据结构
*/
class RoadEventX(val type: Int = 70001, val data: V2XRoadXData): V2XEvent() {
@Keep
data class Center(
@SerializedName("lat")
var lat: Double,
@SerializedName("lon")
var lon: Double
)
@Keep
data class CenterRoad(
@SerializedName("bearing")
var bearing: Double,
@SerializedName("laneNo")
var laneNo: Long,
@SerializedName("roadId")
var roadId: String?,
@SerializedName("roadName")
var roadName: String?,
@SerializedName("tileId")
var tileId: Long
)
override fun toString(): String {
return "RoadEventX(type=$type, data=$data)"
}
}
}

View File

@@ -1,4 +1,4 @@
package com.mogo.eagle.core.function.v2x.road
package com.mogo.eagle.core.data.v2x
import androidx.annotation.Keep
@@ -15,11 +15,11 @@ data class V2XEventResult (
@Keep
data class Result(
@SerializedName("eventList")
var v2XEventList: List<V2XEvent>?
var v2XEventList: List<V2XEventData>?
)
@Keep
data class V2XEvent(
data class V2XEventData(
@SerializedName("receiveTime")
var receiveTime: Long,
@@ -33,7 +33,7 @@ data class V2XEvent(
var center: Center?,
@SerializedName("centerRoad")
var centerRoad: CenterRoad?,
var centerRoad: CenterRoadData?,
@SerializedName("radius")
var radius: Double,
@@ -55,7 +55,7 @@ data class Center(
)
@Keep
data class CenterRoad(
data class CenterRoadData(
@SerializedName("bearing")
var bearing: Double,

View File

@@ -1,4 +1,4 @@
package com.mogo.eagle.core.function.v2x.internal.data
package com.mogo.eagle.core.data.v2x
import androidx.annotation.Keep
import java.io.Serializable

View File

@@ -1,4 +1,4 @@
package com.mogo.eagle.core.function.v2x.internal.data
package com.mogo.eagle.core.data.v2x
import androidx.annotation.Keep
import com.mogo.eagle.core.data.map.entity.MarkerExploreWay

View File

@@ -1,8 +1,7 @@
package com.mogo.eagle.core.function.v2x.internal.data
package com.mogo.eagle.core.data.v2x
import androidx.annotation.Keep
import com.elegant.network.BaseResp
import com.mogo.eagle.core.function.v2x.internal.data.V2XMarkerCardResult
import java.io.Serializable
@Keep

View File

@@ -1,7 +1,6 @@
package com.mogo.eagle.core.function.v2x.internal.data
package com.mogo.eagle.core.data.v2x
import androidx.annotation.Keep
import com.mogo.eagle.core.function.v2x.internal.data.V2XLocation
import java.io.Serializable
/**

View File

@@ -1,4 +1,4 @@
package com.mogo.eagle.core.function.v2x.internal.data
package com.mogo.eagle.core.data.v2x
import androidx.annotation.Keep

View File

@@ -1,7 +1,6 @@
package com.mogo.eagle.core.function.v2x.internal.data
package com.mogo.eagle.core.data.v2x
import androidx.annotation.Keep
import com.mogo.eagle.core.function.v2x.internal.data.V2XLocation
import java.io.Serializable
/**

View File

@@ -1,7 +1,7 @@
package com.mogo.eagle.core.function.api.v2x
package com.mogo.eagle.core.function.api.biz
import com.mogo.eagle.core.data.map.Infrastructure
import com.mogo.eagle.core.data.v2x.V2XEvent
import com.mogo.eagle.core.data.v2x.V2XEventData
interface IFuncBizProvider {
/**
@@ -12,5 +12,5 @@ interface IFuncBizProvider {
/**
* 根据lineId获取整条道路的V2X事件
*/
fun onV2XEvents(v2xEvents: List<V2XEvent>?) {}
fun onV2XEvents(v2XEventData: List<V2XEventData>?) {}
}

View File

@@ -1,6 +1,25 @@
package com.mogo.eagle.core.function.api.cloud
interface IMoGoCloudListener {
import com.mogo.eagle.core.data.v2x.V2XEvent
fun tokenGot(token: String, sn: String)
interface IMoGoCloudListener{
fun tokenGot(token: String, sn: String){}
/**
* 获取到V2X事件成功回调
* @param event
* - 参数说明:目前此参数支持以下类型
* - [V2XEvent.ForwardsWarning]: 路口碰撞预警、盲区预警等预警事件, 数据实体取自[V2XEvent.ForwardsWarning.data]
* - [V2XEvent.Road]: 道路事件, 数据实体取自[V2XEvent.Road.data]
* - [V2XEvent.Warning]: 预警目标物事件, 数据实体取自[V2XEvent.Warning.data]
* - [V2XEvent.Marker]: 道路标记事件, 数据实体取自[V2XEvent.Marker.data]
*/
fun onAck(event: V2XEvent){}
/**
* V2X事件获取过程中出现的异常信息用于问题排查
* @param msg 异常信息
*/
fun onFail(msg: String){}
}

View File

@@ -1,4 +1,4 @@
package com.mogo.eagle.core.function.api.msgbox
package com.mogo.eagle.core.function.api.datacenter.msgbox
import com.mogo.eagle.core.data.msgbox.MsgBoxBean

View File

@@ -1,4 +1,4 @@
package com.mogo.eagle.core.function.api.msgbox
package com.mogo.eagle.core.function.api.datacenter.msgbox
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.data.msgbox.MsgCategory

View File

@@ -1,4 +1,4 @@
package com.mogo.eagle.core.function.api.msgbox
package com.mogo.eagle.core.function.api.datacenter.msgbox
import android.content.Context
import com.mogo.eagle.core.data.msgbox.MsgBoxBean

View File

@@ -1,4 +1,4 @@
package com.mogo.eagle.core.function.api.v2x
package com.mogo.eagle.core.function.api.datacenter.union
import com.mogo.eagle.core.data.enums.DataSourceType

View File

@@ -1,4 +1,4 @@
package com.mogo.eagle.core.function.api.v2x
package com.mogo.eagle.core.function.api.datacenter.union
import com.mogo.eagle.core.data.enums.DataSourceType
import com.mogo.eagle.core.data.enums.TrafficLightEnum

View File

@@ -16,7 +16,7 @@ import com.mogo.eagle.core.utilcode.util.TimeUtils
*/
object CallerChassisLocationGCJ02ListenerManager : CallerBase<IMoGoChassisLocationGCJ02Listener>() {
val TAG = "CallerChassisLocationGCJ20ListenerManager"
private const val TAG = "CallerChassisLocationGCJ20ListenerManager"
@Volatile
private var mGnssInfo: MogoLocation? = null
@@ -36,6 +36,8 @@ object CallerChassisLocationGCJ02ListenerManager : CallerBase<IMoGoChassisLocati
setListenerHz(tag, callBackHz)
}
//todo 宏宇 添加HZ的移除操作
fun getChassisLocationGCJ02(): MogoLocation? {
return mGnssInfo
}

View File

@@ -2,8 +2,8 @@ package com.mogo.eagle.core.function.call.biz
import androidx.annotation.MainThread
import com.mogo.eagle.core.data.map.Infrastructure
import com.mogo.eagle.core.data.v2x.V2XEvent
import com.mogo.eagle.core.function.api.v2x.IFuncBizProvider
import com.mogo.eagle.core.data.v2x.V2XEventData
import com.mogo.eagle.core.function.api.biz.IFuncBizProvider
import com.mogo.eagle.core.function.call.base.CallerBase
object CallerFuncBizListenerManager: CallerBase<IFuncBizProvider>() {
@@ -24,10 +24,10 @@ object CallerFuncBizListenerManager: CallerBase<IFuncBizProvider>() {
}
@MainThread
fun invokeV2XEvents(v2xEvents: List<V2XEvent>?) {
fun invokeV2XEvents(v2XEventData: List<V2XEventData>?) {
M_LISTENERS.forEach {
val listener = it.value
listener.onV2XEvents(v2xEvents)
listener.onV2XEvents(v2XEventData)
}
}
}

View File

@@ -1,61 +1,26 @@
package com.mogo.eagle.core.function.call.cloud
import com.mogo.eagle.core.data.v2x.V2XEvent
import com.mogo.eagle.core.function.api.cloud.IMoGoCloudListener
import java.util.concurrent.ConcurrentHashMap
import com.mogo.eagle.core.function.call.base.CallerBase
object CallerCloudListenerManager {
private val M_CLOUD_LISTENER: ConcurrentHashMap<String, IMoGoCloudListener> =
ConcurrentHashMap()
/**
* 添加监听
* @param tag 标记,用来注销监听使用
* @param listener 监听回调
*/
fun registerCloudListener(
tag: String,
listener: IMoGoCloudListener
) {
if (M_CLOUD_LISTENER.containsKey(tag)) {
return
}
M_CLOUD_LISTENER[tag] = listener
}
/**
* 删除监听
* @param tag 标记,用来注销监听使用
*/
fun unRegisterCloudListener(tag: String) {
if (!M_CLOUD_LISTENER.containsKey(tag)) {
return
}
M_CLOUD_LISTENER.remove(tag)
}
/**
* 删除监听
* @param listener 要删除的监听对象
*/
fun unRegisterCloudListener(listener: IMoGoCloudListener) {
if (!M_CLOUD_LISTENER.containsValue(listener)) {
return
}
M_CLOUD_LISTENER.forEach {
if (it.value == listener) {
M_CLOUD_LISTENER.remove(it.key)
}
}
}
object CallerCloudListenerManager : CallerBase<IMoGoCloudListener>() {
/**
* 分发获取到的设备sn
*/
fun invokeCloudTokenGot(token: String, sn: String) {
M_CLOUD_LISTENER.forEach {
M_LISTENERS.forEach {
val listener = it.value
listener.tokenGot(token, sn)
}
}
fun invokeSocketAck(event: V2XEvent) {
M_LISTENERS.forEach {
val listener = it.value
listener.onAck(event)
}
}
}

View File

@@ -14,9 +14,6 @@ import com.mogo.eagle.core.utilcode.util.UiThreadHandler
* 小地图调用者管理这里对外及其他模块提供小地图功能的调用用啥写啥不要过度设计不允许直接将Provider暴露出去
*/
object CallerSmpManager : CallerBase<Any>() {
// private val mogoSmallMapProvider: IMogoSmallMapProvider
// get() = ARouter.getInstance().build(MoGoFragmentPaths.PATH_FRAGMENT_SMP)
// .navigation() as IMogoSmallMapProvider
private val v2xProvider: IV2XEventProvider
get() = ARouter.getInstance().build(MogoServicePaths.PATH_V2X_MODULE)

View File

@@ -1,10 +1,8 @@
package com.mogo.eagle.core.function.call.msgbox
import androidx.annotation.Nullable
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.function.api.msgbox.IMsgBoxEventListener
import com.mogo.eagle.core.function.api.datacenter.msgbox.IMsgBoxEventListener
import com.mogo.eagle.core.function.call.base.CallerBase
import java.util.concurrent.ConcurrentHashMap
/**
* @author XuXinChao

View File

@@ -2,7 +2,7 @@ package com.mogo.eagle.core.function.call.msgbox
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.data.msgbox.MsgCategory
import com.mogo.eagle.core.function.api.msgbox.IMsgBoxListener
import com.mogo.eagle.core.function.api.datacenter.msgbox.IMsgBoxListener
import com.mogo.eagle.core.function.call.base.CallerBase
/**

View File

@@ -3,7 +3,7 @@ package com.mogo.eagle.core.function.call.msgbox
import android.content.Context
import com.mogo.eagle.core.data.constants.MogoServicePaths
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.function.api.msgbox.IMsgBoxProvider
import com.mogo.eagle.core.function.api.datacenter.msgbox.IMsgBoxProvider
import com.mogo.eagle.core.function.call.base.CallerBase
object CallerMsgBoxManager {

View File

@@ -1,7 +1,7 @@
package com.mogo.eagle.core.function.call.v2x
import com.mogo.eagle.core.data.enums.DataSourceType
import com.mogo.eagle.core.function.api.v2x.ILimitingVelocityListener
import com.mogo.eagle.core.function.api.datacenter.union.ILimitingVelocityListener
import com.mogo.eagle.core.function.call.base.CallerBase
/**

View File

@@ -3,7 +3,7 @@ package com.mogo.eagle.core.function.call.v2x
import com.mogo.eagle.core.data.enums.DataSourceType
import com.mogo.eagle.core.data.enums.TrafficLightEnum
import com.mogo.eagle.core.data.trafficlight.TrafficLightResult
import com.mogo.eagle.core.function.api.v2x.IMoGoTrafficLightListener
import com.mogo.eagle.core.function.api.datacenter.union.IMoGoTrafficLightListener
import com.mogo.eagle.core.function.call.base.CallerBase
object CallerTrafficLightListenerManager : CallerBase<IMoGoTrafficLightListener>() {