diff --git a/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/model/OrderModel.kt b/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/model/OrderModel.kt index a8e0105642..de890e01e5 100644 --- a/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/model/OrderModel.kt +++ b/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/model/OrderModel.kt @@ -2,25 +2,16 @@ package com.mogo.och.bus.passenger.model import android.annotation.SuppressLint import android.content.Context -import android.media.AudioAttributes -import android.media.AudioFocusRequest -import android.media.AudioManager -import android.os.Build -import androidx.annotation.RequiresApi -import com.mogo.commons.voice.AIAssist -import com.mogo.commons.voice.IMogoVoiceCmdCallBack import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.map.MogoLocation 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.telematic.IReceivedMsgListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager import com.mogo.eagle.core.function.call.telematic.CallerTelematicListenerManager import com.mogo.eagle.core.network.utils.GsonUtil 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 import com.mogo.eagle.core.utilcode.util.GsonUtils import com.mogo.och.bus.passenger.bean.PM2RoutesResponse @@ -30,12 +21,12 @@ import com.mogo.och.bus.passenger.callback.IDrivingInfoCallback import com.mogo.och.bus.passenger.callback.ISpeedCallback import com.mogo.och.bus.passenger.constant.BusPassengerConst import com.mogo.och.bus.passenger.network.BusPassengerServiceManager +import com.mogo.och.common.module.biz.lansocket.IOchLanPassengerStatusListener import com.mogo.och.common.module.biz.lansocket.LoginLanPassengerSocket import com.mogo.och.common.module.biz.login.ILoginCallback import com.mogo.och.common.module.biz.login.LoginStatusEnum import com.mogo.och.common.module.biz.login.LoginStatusManager import com.mogo.och.common.module.biz.login.OpenOrderStatusEnum -import com.mogo.och.common.module.constant.OchCommonConst import com.mogo.och.common.module.manager.autopilot.autopilot.IOchAutopilotStatusListener import com.mogo.och.common.module.manager.autopilot.autopilot.OchAutoPilotStatusListenerManager import com.mogo.och.common.module.manager.distance.IDistanceListener @@ -43,14 +34,11 @@ import com.mogo.och.common.module.manager.distance.TrajectoryAndDistanceManager import com.mogo.och.common.module.manager.loop.BizLoopManager import com.mogo.och.common.module.manager.loop.LoopInfo import com.mogo.och.common.module.manager.socket.cloud.AbnormalFactorsLoopManager -import com.mogo.och.common.module.manager.socket.cloud.OCHSocketMessageManager +import com.mogo.och.common.module.manager.socket.lan.ILanMessageListener import com.mogo.och.common.module.manager.socket.lan.LanSocketManager -import com.mogo.och.common.module.manager.socket.lan.bean.AppConnectMsg -import com.mogo.och.common.module.manager.socket.lan.bean.BaseDPMsg import com.mogo.och.common.module.manager.socket.lan.bean.DPMsgType import com.mogo.och.common.module.manager.socket.lan.bean.TaskDetailsMsg import com.mogo.och.common.module.network.OchCommonServiceCallback -import com.mogo.och.common.module.utils.DateTimeUtil import com.mogo.och.common.module.utils.OCHThreadPoolManager import com.mogo.och.common.module.utils.PinYinUtil import com.mogo.och.data.bean.BusRoutesResult @@ -62,7 +50,7 @@ object OrderModel { private val TAG = OrderModel::class.java.simpleName - val TAG_LOOP_QUERY_BIND_LINE = "${TAG}_TAG_LOOP_QUERY_BIND_LINE" + private val TAG_LOOP_QUERY_BIND_LINE = "${TAG}_TAG_LOOP_QUERY_BIND_LINE" private var mContext: Context? = null @@ -95,8 +83,9 @@ object OrderModel { TrajectoryAndDistanceManager.addDistanceListener(TAG, trajectoryListener) AbnormalFactorsLoopManager.startLoopAbnormalFactors(mContext!!) //司乘屏通信监听 - CallerTelematicListenerManager.addListener(TAG, mReceivedMsgListener) - + LanSocketManager.registerSocketMessageListener(DPMsgType.TYPE_COMMON.type,LanSocketManager.commonListener) + LanSocketManager.registerSocketMessageListener(DPMsgType.TYPE_TASK_DETAILS.type,taskDetailsMsgListener) + LoginLanPassengerSocket.addListener(TAG,driverSnListener) } fun releaseListeners(){ @@ -110,6 +99,10 @@ object OrderModel { AbnormalFactorsLoopManager.stopLoopAbnormalFactors() CallerTelematicListenerManager.removeListener(TAG) BizLoopManager.removeLoopFunction(TAG_LOOP_QUERY_BIND_LINE) + LanSocketManager.unRegisterSocketMessageListener(DPMsgType.TYPE_COMMON.type,LanSocketManager.commonListener) + LanSocketManager.unRegisterSocketMessageListener(DPMsgType.TYPE_TASK_DETAILS.type,taskDetailsMsgListener) + LoginLanPassengerSocket.removeListener(TAG) + cleanStation("release") } @@ -174,8 +167,34 @@ object OrderModel { } } - private val mReceivedMsgListener: IReceivedMsgListener = object : IReceivedMsgListener { - override fun onReceivedServerSn(sn: String?) { + private val taskDetailsMsgListener = object : ILanMessageListener { + override fun target(): Class { + return TaskDetailsMsg::class.java + } + + override fun onMsgReceived(taskDetailsMsg: TaskDetailsMsg?) { + taskDetailsMsg?.let { + if (it.msg?.isEmpty() == true){ + clearLocalRouteResult() + return + } + + val result = GsonUtils.fromJson(it.msg, BusTransferData::class.java) + mDrivingInfoCallback?.changeOperationStatus(result.loginStatus == 1) + if (result != null && result.routesResult == null) { + clearLocalRouteResult() + } + if (routesResult == null || + (result != null && result.routesResult?.writeVersion!! > routesResult!!.writeVersion) + ) { //已司机端传来的为准 + routesResult = result.routesResult + updatePassengerRouteInfo(routesResult) + } + } + } + } + private val driverSnListener = object :IOchLanPassengerStatusListener{ + override fun onDriverSnChagneListner(sn: String?) { CallerLogger.d( SceneConstant.M_BUS_P + TAG, "onReceivedServerSn = $sn" @@ -183,51 +202,6 @@ object OrderModel { mDriverStatusCallback?.updateDriverSn(sn) } - override fun onReceivedMsg(type: Int, byteArray: ByteArray) { - if (OchCommonConst.BUSINESS_STRING == type) { - val baseMsg = GsonUtils.fromJson(String(byteArray), BaseDPMsg::class.java) - CallerLogger.d( - SceneConstant.M_BUS_P + TAG, - "onReceivedMsg = " + GsonUtils.toJson(baseMsg) - ) - - if (baseMsg != null && baseMsg.type == DPMsgType.TYPE_COMMON.type) { - val msg = GsonUtils.fromJson(String(byteArray), AppConnectMsg::class.java) - - if (msg != null && msg.isPlay) { //播报 - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - speakTTS(msg.msg) - } - } - if (msg != null && msg.isViewShow) { //消息盒子显示内容 - OCHSocketMessageManager.pushAppOperationalMsgBox( - DateTimeUtil.getCurrentTimeStamp(), msg.msg, - OCHSocketMessageManager.OPERATION_SYSTEM - ) - } - }else if (baseMsg != null && baseMsg.type == DPMsgType.TYPE_TASK_DETAILS.type){ - val msg = GsonUtils.fromJson(String(byteArray), TaskDetailsMsg::class.java) - Logger.d(SceneConstant.M_BUS_P + TAG, "onReceivedMsg = " + GsonUtils.toJson(msg)) - - if (msg == null || msg.msg?.isEmpty() == true){ - clearLocalRouteResult() - return - } - - val result = GsonUtils.fromJson(msg.msg, BusTransferData::class.java) - mDrivingInfoCallback?.changeOperationStatus(result.loginStatus == 1) - if (result != null && result.routesResult == null) { - clearLocalRouteResult() - } - if (routesResult == null || - (result != null && result.routesResult?.writeVersion!! > routesResult!!.writeVersion) - ) { //已司机端传来的为准 - routesResult = result.routesResult - updatePassengerRouteInfo(routesResult) - } - } - } - } } @@ -472,36 +446,4 @@ object OrderModel { } } - - @RequiresApi(Build.VERSION_CODES.O) - private fun speakTTS(msg: String) { - - val mAudioManager = mContext?.getSystemService(Context.AUDIO_SERVICE) as AudioManager - val mAudioAttributes = AudioAttributes.Builder() - .setUsage(AudioAttributes.USAGE_MEDIA) //设置声音的用途 - .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) //设置声音的类型 - .build() - val mAudioFocusRequest = - AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK) //设置焦点类型 - .setAudioAttributes(mAudioAttributes) //设置声音属性 - .setAcceptsDelayedFocusGain(false) //设置接受延迟获取焦点,需要设置OnAudioFocusChangeListener来监听焦点的获取 - .build() - mAudioManager.requestAudioFocus(mAudioFocusRequest) //抢占焦点 - - AIAssist.getInstance(mContext) - .speakTTSVoiceWithLevel(msg, AIAssist.LEVEL0, object : IMogoVoiceCmdCallBack { - override fun onSpeakEnd(speakText: String?) { - mAudioManager.abandonAudioFocusRequest(mAudioFocusRequest) - } - - override fun onSpeakError(speakText: String?, errorMsg: String?) { - mAudioManager.abandonAudioFocusRequest(mAudioFocusRequest) - } - - override fun onSpeakSelectTimeOut(speakText: String?) { - mAudioManager.abandonAudioFocusRequest(mAudioFocusRequest) - } - }) - } - } \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/lansocket/IOchLanPassengerStatusListener.java b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/lansocket/IOchLanPassengerStatusListener.java new file mode 100644 index 0000000000..94831d48b0 --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/lansocket/IOchLanPassengerStatusListener.java @@ -0,0 +1,8 @@ +package com.mogo.och.common.module.biz.lansocket; + +public interface IOchLanPassengerStatusListener { + + default void onDriverSnChagneListner(String sn) { + } + +} diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/lansocket/LoginLanPassengerSocket.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/lansocket/LoginLanPassengerSocket.kt index 459407a4f0..f2d94e83ac 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/lansocket/LoginLanPassengerSocket.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/lansocket/LoginLanPassengerSocket.kt @@ -23,10 +23,11 @@ import com.mogo.och.common.module.manager.socket.lan.bean.EnvType import com.mogo.och.common.module.manager.socket.lan.bean.ProjectType import com.mogo.och.common.module.manager.socket.lan.bean.ScreenType import com.mogo.och.common.module.manager.socket.lan.bean.VehicleType +import com.mogo.och.common.module.utils.CallerBase import java.lang.StringBuilder import kotlin.properties.Delegates -object LoginLanPassengerSocket : IReceivedMsgListener { +object LoginLanPassengerSocket : IReceivedMsgListener, CallerBase() { private const val TAG = "LoginLanSocket" var driverSn: String by Delegates.observable("") { _, oldV, newV -> @@ -38,6 +39,9 @@ object LoginLanPassengerSocket : IReceivedMsgListener { if(newV.isNotEmpty()){ OchChainLogManager.writeChainLogNetLanSocketConnect("局域网socket链接状态","sn 变化 已连接 sn${newV}") } + M_LISTENERS.forEach { + it.value.onDriverSnChagneListner(newV) + } } } @@ -169,5 +173,7 @@ object LoginLanPassengerSocket : IReceivedMsgListener { driverSn = sn ?: "" } - + override fun doSomeAfterAddListener(tag: String, listener: IOchLanPassengerStatusListener) { + listener.onDriverSnChagneListner(driverSn) + } } \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/socket/lan/LanSocketManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/socket/lan/LanSocketManager.kt index dc9f0f392e..43937e2a18 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/socket/lan/LanSocketManager.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/socket/lan/LanSocketManager.kt @@ -1,16 +1,49 @@ package com.mogo.och.common.module.manager.socket.lan +import android.content.Context +import android.media.AudioAttributes +import android.media.AudioFocusRequest +import android.media.AudioManager +import android.os.Build +import androidx.annotation.RequiresApi +import com.mogo.commons.AbsMogoApplication +import com.mogo.commons.voice.AIAssist +import com.mogo.commons.voice.IMogoVoiceCmdCallBack import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.util.GsonUtils import com.mogo.och.common.module.constant.OchCommonConst import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager +import com.mogo.och.common.module.manager.socket.cloud.OCHSocketMessageManager +import com.mogo.och.common.module.manager.socket.lan.bean.AppConnectMsg import com.mogo.och.common.module.manager.socket.lan.bean.BaseDPMsg +import com.mogo.och.common.module.utils.DateTimeUtil object LanSocketManager : LanSocketManagerJava() { private const val TAG = "LanSocketManager" + val commonListener = object : ILanMessageListener { + override fun target(): Class { + return AppConnectMsg::class.java + } + + override fun onMsgReceived(first: AppConnectMsg?) { + first?.let { + if (it.isPlay) { //播报 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + speakTTS(it.msg) + } + } + if (it.isViewShow) { //消息盒子显示内容 + OCHSocketMessageManager.pushAppOperationalMsgBox( + DateTimeUtil.getCurrentTimeStamp(), it.msg, + OCHSocketMessageManager.OPERATION_SYSTEM + ) + } + } + } + } fun load(){ OchChainLogManager.writeChainLogInit("初始化信息","初始局域网监听和发送封装") @@ -37,4 +70,38 @@ object LanSocketManager : LanSocketManagerJava() { OchChainLogManager.writeChainLogLanSocket("收到数据","type:${type},byteArray:${String(byteArray)}","receive"); super.onReceivedMsg(type, byteArray) } + + + @RequiresApi(Build.VERSION_CODES.O) + private fun speakTTS(msg: String) { + + val mContext = AbsMogoApplication.getApp() + + val mAudioManager = mContext?.getSystemService(Context.AUDIO_SERVICE) as AudioManager + val mAudioAttributes = AudioAttributes.Builder() + .setUsage(AudioAttributes.USAGE_MEDIA) //设置声音的用途 + .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) //设置声音的类型 + .build() + val mAudioFocusRequest = + AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK) //设置焦点类型 + .setAudioAttributes(mAudioAttributes) //设置声音属性 + .setAcceptsDelayedFocusGain(false) //设置接受延迟获取焦点,需要设置OnAudioFocusChangeListener来监听焦点的获取 + .build() + mAudioManager.requestAudioFocus(mAudioFocusRequest) //抢占焦点 + + AIAssist.getInstance(mContext) + .speakTTSVoiceWithLevel(msg, AIAssist.LEVEL0, object : IMogoVoiceCmdCallBack { + override fun onSpeakEnd(speakText: String?) { + mAudioManager.abandonAudioFocusRequest(mAudioFocusRequest) + } + + override fun onSpeakError(speakText: String?, errorMsg: String?) { + mAudioManager.abandonAudioFocusRequest(mAudioFocusRequest) + } + + override fun onSpeakSelectTimeOut(speakText: String?) { + mAudioManager.abandonAudioFocusRequest(mAudioFocusRequest) + } + }) + } } \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/socket/lan/LanSocketManagerJava.java b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/socket/lan/LanSocketManagerJava.java index 7de9ec28fb..a4087f075d 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/socket/lan/LanSocketManagerJava.java +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/socket/lan/LanSocketManagerJava.java @@ -43,6 +43,15 @@ public class LanSocketManagerJava implements IReceivedMsgListener { } } + public void unRegisterSocketMessageListener(int msgType, ILanMessageListener mogoOnMessageListener){ + List listenerJavas = mListeners.get(msgType); + if (listenerJavas!=null) { + if(listenerJavas.contains(mogoOnMessageListener)){ + listenerJavas.remove(mogoOnMessageListener); + } + } + } + @Override public void onReceivedMsg(int type, @NonNull byte[] byteArray) { if (OchCommonConst.BUSINESS_STRING == type) { diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/FieldUtils.java b/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/FieldUtils.java index 9dc909d19c..57ebae214a 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/FieldUtils.java +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/FieldUtils.java @@ -5,11 +5,18 @@ import android.text.TextUtils; import java.lang.reflect.Field; import java.lang.reflect.Member; import java.lang.reflect.Modifier; +import java.util.HashMap; +import java.util.Map; public class FieldUtils { + private static Map errorField = new HashMap(); + public static Field getDeclaredField(final Class cls, final String fieldName, final boolean forceAccess) { + if(errorField.containsKey(cls)&&errorField.containsValue(fieldName)){ + return null; + } if (cls == null || TextUtils.isEmpty(fieldName)) { return null; } @@ -25,6 +32,7 @@ public class FieldUtils { } return field; } catch (final Exception e) { + errorField.put(cls,fieldName); e.printStackTrace(); } return null;