[2.13.0-arch-opt] update socket reconnect and fix httpdns reconnect logic
This commit is contained in:
@@ -11,15 +11,16 @@ import com.mogo.cloud.passport.IMoGoTokenCallback
|
||||
import com.mogo.cloud.passport.MoGoAiCloudClient
|
||||
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
|
||||
import com.mogo.commons.AbsMogoApplication
|
||||
import com.mogo.commons.utils.MogoAnalyticUtils
|
||||
import com.mogo.commons.constants.SharedPrefsConstants
|
||||
import com.mogo.commons.debug.DebugConfig
|
||||
import com.mogo.commons.module.status.MogoStatusManager
|
||||
import com.mogo.commons.network.NetConfigUtils
|
||||
import com.mogo.commons.utils.MogoAnalyticUtils
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_CLOUD_CONNECT_FAIL
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_CLOUD_CONNECT_LOST
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_CLOUD_CONNECT_SUCCESS
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_CLOUD_RECONNECT
|
||||
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_CONNECT_STATUS
|
||||
import com.mogo.eagle.core.data.map.MogoLocation
|
||||
@@ -30,28 +31,35 @@ import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
|
||||
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
|
||||
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.mogo.logger.scene.SceneConstant.Companion.M_MAIN
|
||||
import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr
|
||||
import com.mogo.eagle.core.utilcode.util.*
|
||||
import com.rousetime.android_startup.AndroidStartup
|
||||
import com.zhjt.service.chain.ChainLog
|
||||
import com.zhjt.service.chain.TracingConstants.Endpoint.Companion.PAD
|
||||
import kotlin.properties.Delegates
|
||||
|
||||
class HttpDnsStartUp : AndroidStartup<Boolean>() {
|
||||
|
||||
private val TAG = "MogoApplication"
|
||||
companion object {
|
||||
private const val TAG = "HttpDnsStartUp"
|
||||
}
|
||||
|
||||
// 配置云服务API
|
||||
private val clientConfig by lazy {
|
||||
MoGoAiCloudClientConfig.getInstance()
|
||||
}
|
||||
|
||||
// 缓存IP地址
|
||||
private var cacheIp: String? = null
|
||||
|
||||
private var context: Context? = null
|
||||
|
||||
private var gotToken = false
|
||||
|
||||
private var httpDnsSimpleLocation by Delegates.observable(getDefaultSimpleLocation()) { _, oldValue, newValue ->
|
||||
if (oldValue.cityCode != newValue.cityCode) {
|
||||
reConnectSocket(oldValue.cityCode, newValue.cityCode)
|
||||
}
|
||||
}
|
||||
|
||||
override fun callCreateOnMainThread() = true
|
||||
|
||||
override fun waitOnMainThread() = false
|
||||
@@ -121,7 +129,10 @@ class HttpDnsStartUp : AndroidStartup<Boolean>() {
|
||||
override fun getCurrentLocation(): HttpDnsSimpleLocation {
|
||||
val envConfig = CallerDevaToolsManager.getEnvConfig()
|
||||
if (envConfig != null) {
|
||||
return HttpDnsSimpleLocation(envConfig.cityCode, envConfig.lat, envConfig.lon)
|
||||
// 更新
|
||||
httpDnsSimpleLocation =
|
||||
HttpDnsSimpleLocation(envConfig.cityCode, envConfig.lat, envConfig.lon)
|
||||
return httpDnsSimpleLocation
|
||||
}
|
||||
var mogoLocation: MogoLocation? = null
|
||||
val locationClient =
|
||||
@@ -129,49 +140,25 @@ class HttpDnsStartUp : AndroidStartup<Boolean>() {
|
||||
if (locationClient != null) {
|
||||
mogoLocation = locationClient
|
||||
}
|
||||
val httpDnsSimpleLocation =
|
||||
if (mogoLocation != null && mogoLocation.latitude != 0.0 && mogoLocation.longitude != 0.0) {
|
||||
if (mogoLocation.cityCode.isNullOrEmpty()
|
||||
&& !CallerMapUIServiceManager.getGDLocationServer(context!!)?.lastCityCode.isNullOrEmpty()
|
||||
) {
|
||||
HttpDnsSimpleLocation(
|
||||
CallerMapUIServiceManager.getGDLocationServer(context!!)?.lastCityCode
|
||||
?: "010",
|
||||
mogoLocation.latitude,
|
||||
mogoLocation.longitude
|
||||
)
|
||||
} else {
|
||||
HttpDnsSimpleLocation(
|
||||
mogoLocation.cityCode,
|
||||
mogoLocation.latitude,
|
||||
mogoLocation.longitude
|
||||
)
|
||||
}
|
||||
if (mogoLocation != null && mogoLocation.latitude != 0.0 && mogoLocation.longitude != 0.0) {
|
||||
// 更新
|
||||
httpDnsSimpleLocation = if (mogoLocation.cityCode.isNullOrEmpty()
|
||||
&& !CallerMapUIServiceManager.getGDLocationServer(context!!)?.lastCityCode.isNullOrEmpty()
|
||||
) {
|
||||
HttpDnsSimpleLocation(
|
||||
CallerMapUIServiceManager.getGDLocationServer(context!!)?.lastCityCode
|
||||
?: "010",
|
||||
mogoLocation.latitude,
|
||||
mogoLocation.longitude
|
||||
)
|
||||
} else {
|
||||
val ciyCode =
|
||||
SharedPrefsMgr.getInstance(
|
||||
AbsMogoApplication.getApp()
|
||||
)
|
||||
.getString(SharedPrefsConstants.LOCATION_CITY_CODE)
|
||||
val latitude =
|
||||
SharedPrefsMgr.getInstance(
|
||||
AbsMogoApplication.getApp()
|
||||
)
|
||||
.getString(SharedPrefsConstants.LOCATION_LATITUDE)
|
||||
val longitude =
|
||||
SharedPrefsMgr.getInstance(
|
||||
AbsMogoApplication.getApp()
|
||||
)
|
||||
.getString(SharedPrefsConstants.LOCATION_LONGITUDE)
|
||||
try {
|
||||
HttpDnsSimpleLocation(
|
||||
ciyCode, latitude.toDouble(), longitude.toDouble()
|
||||
)
|
||||
} catch (e: NumberFormatException) {
|
||||
// e.printStackTrace();
|
||||
HttpDnsSimpleLocation("010", 1.0, 1.0)
|
||||
}
|
||||
HttpDnsSimpleLocation(
|
||||
mogoLocation.cityCode,
|
||||
mogoLocation.latitude,
|
||||
mogoLocation.longitude
|
||||
)
|
||||
}
|
||||
}
|
||||
return httpDnsSimpleLocation
|
||||
}
|
||||
}
|
||||
@@ -186,10 +173,7 @@ class HttpDnsStartUp : AndroidStartup<Boolean>() {
|
||||
clientConfig.token = token
|
||||
// 由于存在token过期问题,在更新后会回调至此处,增加二次判定
|
||||
if (!gotToken) {
|
||||
CallerLogger.d(
|
||||
SceneConstant.M_MAIN + TAG,
|
||||
"onTokenGot token : $token , sn :$sn"
|
||||
)
|
||||
CallerLogger.d("$M_MAIN$TAG", "onTokenGot token : $token , sn :$sn")
|
||||
CallerCloudListenerManager.invokeCloudTokenGot(token, sn)
|
||||
// 异步初始化NetConfig
|
||||
asyncInit()
|
||||
@@ -202,7 +186,7 @@ class HttpDnsStartUp : AndroidStartup<Boolean>() {
|
||||
|
||||
override fun onError(code: Int, msg: String) {
|
||||
CallerLogger.d(
|
||||
SceneConstant.M_MAIN + TAG,
|
||||
"$M_MAIN$TAG",
|
||||
"初始化MogoAiCloudSdk failed ,reason : $msg , 未能开启长链服务和初始化Modules服务"
|
||||
)
|
||||
}
|
||||
@@ -252,11 +236,8 @@ class HttpDnsStartUp : AndroidStartup<Boolean>() {
|
||||
private fun startSocketService() {
|
||||
CallerLogger.d(SceneConstant.M_MAIN + TAG, "startSocketService")
|
||||
val location = CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02()
|
||||
// 关闭长链服务
|
||||
MogoAiCloudSocketManager.getInstance(context).destroy()
|
||||
MogoAiCloudSocketManager.getInstance(context)
|
||||
.registerLifecycleListener(10020, object : IMogoLifecycleListener {
|
||||
|
||||
@ChainLog(
|
||||
linkChainLog = CHAIN_LINK_LOG_CONNECT_STATUS,
|
||||
linkCode = CHAIN_LINK_CLOUD,
|
||||
@@ -319,4 +300,41 @@ class HttpDnsStartUp : AndroidStartup<Boolean>() {
|
||||
MogoAiCloudSocketManager.getInstance(context)
|
||||
.init(context, DebugConfig.getSocketAppId(), lat, lon)
|
||||
}
|
||||
|
||||
@ChainLog(
|
||||
linkChainLog = CHAIN_LINK_LOG_CONNECT_STATUS,
|
||||
linkCode = CHAIN_LINK_CLOUD,
|
||||
endpoint = PAD,
|
||||
nodeAliasCode = CHAIN_ALIAS_CODE_CLOUD_RECONNECT,
|
||||
paramIndexes = [0, 1],
|
||||
clientPkFileName = "sn"
|
||||
)
|
||||
private fun reConnectSocket(oldCityCode: String, newCityCode: String) {
|
||||
MogoAiCloudSocketManager.getInstance(context).reConnect()
|
||||
}
|
||||
|
||||
private fun getDefaultSimpleLocation(): HttpDnsSimpleLocation {
|
||||
val ciyCode =
|
||||
SharedPrefsMgr.getInstance(
|
||||
AbsMogoApplication.getApp()
|
||||
)
|
||||
.getString(SharedPrefsConstants.LOCATION_CITY_CODE)
|
||||
val latitude =
|
||||
SharedPrefsMgr.getInstance(
|
||||
AbsMogoApplication.getApp()
|
||||
)
|
||||
.getString(SharedPrefsConstants.LOCATION_LATITUDE)
|
||||
val longitude =
|
||||
SharedPrefsMgr.getInstance(
|
||||
AbsMogoApplication.getApp()
|
||||
)
|
||||
.getString(SharedPrefsConstants.LOCATION_LONGITUDE)
|
||||
try {
|
||||
return HttpDnsSimpleLocation(
|
||||
ciyCode, latitude.toDouble(), longitude.toDouble()
|
||||
)
|
||||
} catch (e: NumberFormatException) {
|
||||
return HttpDnsSimpleLocation("010", 1.0, 1.0)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user