修改了网络库名称
This commit is contained in:
1
foudations/mogo-network/.gitignore
vendored
Normal file
1
foudations/mogo-network/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/build
|
||||
60
foudations/mogo-network/build.gradle
Normal file
60
foudations/mogo-network/build.gradle
Normal file
@@ -0,0 +1,60 @@
|
||||
apply plugin: 'com.android.library'
|
||||
apply plugin: 'kotlin-android'
|
||||
apply plugin: 'kotlin-android-extensions'
|
||||
// 对kotlin生成doc
|
||||
apply plugin: 'org.jetbrains.dokka'
|
||||
apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString()
|
||||
|
||||
android {
|
||||
compileSdkVersion rootProject.ext.android.compileSdkVersion
|
||||
|
||||
defaultConfig {
|
||||
minSdkVersion rootProject.ext.android.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.android.targetSdkVersion
|
||||
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
|
||||
consumerProguardFiles "consumer-rules.pro"
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
dokka {
|
||||
outputFormat = 'javadoc'
|
||||
outputDirectory = "$rootDir/ApiDoc/foudations/commons"
|
||||
|
||||
configuration {
|
||||
// Do not output deprecated members
|
||||
skipDeprecated = true
|
||||
// Emit warnings about not documented members.
|
||||
reportUndocumented = true
|
||||
// Do not create index pages for empty packages
|
||||
skipEmptyPackages = true
|
||||
|
||||
noJdkLink = true
|
||||
noStdlibLink = true
|
||||
noAndroidSdkLink = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation fileTree(dir: "libs", include: ["*.jar"])
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
||||
|
||||
if (Boolean.valueOf(RELEASE)) {
|
||||
api "com.mogo.cloud:passport:${MOGO_PASSPORT_VERSION}"
|
||||
} else {
|
||||
api project(path: ':foudations:mogo-passport')
|
||||
}
|
||||
|
||||
}
|
||||
0
foudations/mogo-network/consumer-rules.pro
Normal file
0
foudations/mogo-network/consumer-rules.pro
Normal file
4
foudations/mogo-network/gradle.properties
Normal file
4
foudations/mogo-network/gradle.properties
Normal file
@@ -0,0 +1,4 @@
|
||||
GROUP=com.mogo.cloud
|
||||
POM_ARTIFACT_ID=network
|
||||
VERSION_CODE=1
|
||||
VERSION_NAME=1.0.2-SNAPSHOT
|
||||
21
foudations/mogo-network/proguard-rules.pro
vendored
Normal file
21
foudations/mogo-network/proguard-rules.pro
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
# Add project specific ProGuard rules here.
|
||||
# You can control the set of applied configuration files using the
|
||||
# proguardFiles setting in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
||||
|
||||
# Uncomment this to preserve the line number information for
|
||||
# debugging stack traces.
|
||||
#-keepattributes SourceFile,LineNumberTable
|
||||
|
||||
# If you keep the line number information, uncomment this to
|
||||
# hide the original source file name.
|
||||
#-renamesourcefileattribute SourceFile
|
||||
5
foudations/mogo-network/src/main/AndroidManifest.xml
Normal file
5
foudations/mogo-network/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.mogo.cloud.commons">
|
||||
|
||||
/
|
||||
</manifest>
|
||||
@@ -0,0 +1,119 @@
|
||||
package com.mogo.cloud.commons.utils;
|
||||
|
||||
/**
|
||||
* @author donghongyu
|
||||
*/
|
||||
public class CoordinateUtils {
|
||||
|
||||
private static double a = 6378245.0;
|
||||
private static double ee = 0.00669342162296594323;
|
||||
|
||||
/**
|
||||
* 手机GPS坐标转火星坐标
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static double[] transformFromWGSToGCJ( double lat, double lon ) {
|
||||
|
||||
//如果在国外,则默认不进行转换
|
||||
if ( outOfChina( lat, lon ) ) {
|
||||
return new double[]{lat, lon};
|
||||
}
|
||||
double dLat = transformLat( lon - 105.0, lat - 35.0 );
|
||||
double dLon = transformLon( lon - 105.0, lat - 35.0 );
|
||||
double radLat = lat / 180.0 * Math.PI;
|
||||
double magic = Math.sin( radLat );
|
||||
magic = 1 - ee * magic * magic;
|
||||
double sqrtMagic = Math.sqrt( magic );
|
||||
dLat = ( dLat * 180.0 ) / ( ( a * ( 1 - ee ) ) / ( magic * sqrtMagic ) * Math.PI );
|
||||
dLon = ( dLon * 180.0 ) / ( a / sqrtMagic * Math.cos( radLat ) * Math.PI );
|
||||
|
||||
return new double[]{lat + dLat, lon + dLon};
|
||||
}
|
||||
|
||||
public static double transformLat( double x, double y ) {
|
||||
double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt( x > 0 ? x : -x );
|
||||
ret += ( 20.0 * Math.sin( 6.0 * x * Math.PI ) + 20.0 * Math.sin( 2.0 * x * Math.PI ) ) * 2.0 / 3.0;
|
||||
ret += ( 20.0 * Math.sin( y * Math.PI ) + 40.0 * Math.sin( y / 3.0 * Math.PI ) ) * 2.0 / 3.0;
|
||||
ret += ( 160.0 * Math.sin( y / 12.0 * Math.PI ) + 320 * Math.sin( y * Math.PI / 30.0 ) ) * 2.0 / 3.0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
public static double transformLon( double x, double y ) {
|
||||
double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt( x > 0 ? x : -x );
|
||||
ret += ( 20.0 * Math.sin( 6.0 * x * Math.PI ) + 20.0 * Math.sin( 2.0 * x * Math.PI ) ) * 2.0 / 3.0;
|
||||
ret += ( 20.0 * Math.sin( x * Math.PI ) + 40.0 * Math.sin( x / 3.0 * Math.PI ) ) * 2.0 / 3.0;
|
||||
ret += ( 150.0 * Math.sin( x / 12.0 * Math.PI ) + 300.0 * Math.sin( x / 30.0 * Math.PI ) ) * 2.0 / 3.0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
public static boolean outOfChina( double lat, double lon ) {
|
||||
if ( lon < 72.004 || lon > 137.8347 )
|
||||
return true;
|
||||
if ( lat < 0.8293 || lat > 55.8271 )
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
public static final double[] transformGcj02toWgs84( double lat, double lng ) {
|
||||
double[] var10000;
|
||||
if ( outOfChina( lat, lng ) ) {
|
||||
var10000 = new double[]{lng, lat};
|
||||
} else {
|
||||
double dlat = transformLat( lng - 105.0D, lat - 35.0D );
|
||||
double dlng = transformLon( lng - 105.0D, lat - 35.0D );
|
||||
double radlat = lat / 180.0D * Math.PI;
|
||||
double magic = Math.sin( radlat );
|
||||
magic = ( double ) 1 - 0.006693421622965943D * magic * magic;
|
||||
double sqrtmagic = Math.sqrt( magic );
|
||||
dlat = dlat * 180.0D / ( 6335552.717000426D / ( magic * sqrtmagic ) * Math.PI );
|
||||
dlng = dlng * 180.0D / ( 6378245.0D / sqrtmagic * Math.cos( radlat ) * Math.PI );
|
||||
double mglat = lat + dlat;
|
||||
double mglng = lng + dlng;
|
||||
var10000 = new double[]{lng * ( double ) 2 - mglng, lat * ( double ) 2 - mglat};
|
||||
}
|
||||
|
||||
return var10000;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param lon1
|
||||
* @param lat1
|
||||
* @param lon2
|
||||
* @param lat2
|
||||
* @return 两坐标的距离 单位:米(M)
|
||||
*/
|
||||
public static float calculateLineDistance( double lon1, double lat1, double lon2, double lat2 ) {
|
||||
try {
|
||||
double var2 = lon1;
|
||||
double var4 = lat1;
|
||||
double var6 = lon2;
|
||||
double var8 = lat2;
|
||||
var2 *= 0.01745329251994329D;
|
||||
var4 *= 0.01745329251994329D;
|
||||
var6 *= 0.01745329251994329D;
|
||||
var8 *= 0.01745329251994329D;
|
||||
double var10 = Math.sin( var2 );
|
||||
double var12 = Math.sin( var4 );
|
||||
double var14 = Math.cos( var2 );
|
||||
double var16 = Math.cos( var4 );
|
||||
double var18 = Math.sin( var6 );
|
||||
double var20 = Math.sin( var8 );
|
||||
double var22 = Math.cos( var6 );
|
||||
double var24 = Math.cos( var8 );
|
||||
double[] var28 = new double[3];
|
||||
double[] var29 = new double[3];
|
||||
var28[0] = var16 * var14;
|
||||
var28[1] = var16 * var10;
|
||||
var28[2] = var12;
|
||||
var29[0] = var24 * var22;
|
||||
var29[1] = var24 * var18;
|
||||
var29[2] = var20;
|
||||
return ( float ) ( Math.asin( Math.sqrt( ( var28[0] - var29[0] ) * ( var28[0] - var29[0] ) + ( var28[1] - var29[1] ) * ( var28[1] - var29[1] ) + ( var28[2] - var29[2] ) * ( var28[2] - var29[2] ) ) / 2.0D ) * 1.27420015798544E7D );
|
||||
} catch ( Throwable var26 ) {
|
||||
var26.printStackTrace();
|
||||
return 0.0F;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.mogo.cloud.network
|
||||
|
||||
import java.io.Serializable
|
||||
|
||||
/**
|
||||
* created by wujifei on 2021/1/22 11:11
|
||||
* describe:基本数据结构
|
||||
*/
|
||||
data class BaseData<T>(var code: Int,
|
||||
var msg: String?,
|
||||
val detailMsg: String?,
|
||||
var result: T?) : Serializable, Cloneable
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.mogo.cloud.network
|
||||
|
||||
/**
|
||||
* created by wujifei on 2021/1/20 10:46
|
||||
* describe:
|
||||
*/
|
||||
class NetConstants {
|
||||
companion object {
|
||||
const val TAG = "LogInterceptor"
|
||||
const val READ_TIMEOUT = 20000L
|
||||
const val WRITE_TIMEOUT = 20000L
|
||||
const val CONNECT_TIMEOUT = 15000L
|
||||
|
||||
const val DEVA_HOST = "http://dzt-deva.zhidaozhixing.com"
|
||||
const val IM_HOST = "http://dzt-im.zhidaozhixing.com"
|
||||
const val LAUNCHER_SNAPSHOT_HOST = "http://dzt-launcherSnapshot.zhidaozhixing.com"
|
||||
const val CHANNEL_MANAGER_HOST = "http://dzt-channelManager.zhidaozhixing.com"
|
||||
const val DATA_SERVICE_HOST = "http://dzt-dataService.zhidaozhixing.com"
|
||||
const val REALTIME_LOCATION_HOST = "http://dzt-realtimeLocation.zhidaozhixing.com"
|
||||
const val INSTANT_HOST = "http://dzt-Instant.zhidaozhixing.com"
|
||||
const val GEOFENCE_HOST = "http://dzt-geoFenceCarService.zhidaozhixing.com"
|
||||
const val CARLIFE_HOST = "http://dzt-carlife.zhidaozhixing.com"
|
||||
const val STRATEGY_PUSH_HOST = "http://dzt-strategyPush.zhidaozhixing.com"
|
||||
const val TRAVEL_CONDITION_HOST = "http://dzt-travelCondition.zhidaozhixing.com"
|
||||
const val TMC_HOST = "http://dzt-tmcServer.zhidaozhixing.com"
|
||||
|
||||
const val IM_SOCKET_DOMAIN = "dzt-im.zhidaozhixing.com"
|
||||
const val WEBSOCKET_DOMAIN = "dzt-Instant.zhidaozhixing.com"
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package com.mogo.cloud.network
|
||||
|
||||
import com.mogo.cloud.network.NetConstants.Companion.CONNECT_TIMEOUT
|
||||
import com.mogo.cloud.network.NetConstants.Companion.READ_TIMEOUT
|
||||
import com.mogo.cloud.network.NetConstants.Companion.WRITE_TIMEOUT
|
||||
import com.mogo.cloud.network.SSLSocketFactoryUtils.createSSLSocketFactory
|
||||
import com.mogo.cloud.network.SSLSocketFactoryUtils.createTrustAllManager
|
||||
import com.mogo.cloud.network.interceptor.HttpHeaderInterceptor
|
||||
import com.mogo.cloud.network.interceptor.HttpDnsInterceptor
|
||||
import com.mogo.cloud.network.interceptor.HttpLoggingInterceptor
|
||||
import okhttp3.OkHttpClient
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @Author: wujifei
|
||||
* @CreateDate: 1/20/21 12:16 AM
|
||||
* @Description: 获取OkHttpClient
|
||||
*/
|
||||
class OkHttpFactory private constructor() {
|
||||
companion object {
|
||||
val okHttpClient: OkHttpClient by lazy {
|
||||
OkHttpClient.Builder()
|
||||
.addNetworkInterceptor(HttpHeaderInterceptor())
|
||||
.addNetworkInterceptor(HttpLoggingInterceptor())
|
||||
.addInterceptor(HttpDnsInterceptor())
|
||||
.sslSocketFactory(createSSLSocketFactory(), createTrustAllManager())
|
||||
.hostnameVerifier(SSLSocketFactoryUtils.TrustAllHostnameVerifier())
|
||||
.connectTimeout(CONNECT_TIMEOUT, TimeUnit.MILLISECONDS)
|
||||
.readTimeout(READ_TIMEOUT, TimeUnit.MILLISECONDS)
|
||||
.writeTimeout(WRITE_TIMEOUT, TimeUnit.MILLISECONDS)
|
||||
.build()
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package com.mogo.cloud.network
|
||||
|
||||
import androidx.collection.ArrayMap
|
||||
import retrofit2.Retrofit
|
||||
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
|
||||
import retrofit2.converter.gson.GsonConverterFactory
|
||||
|
||||
/**
|
||||
*
|
||||
* @Author: wujifei
|
||||
* @CreateDate: 1/19/21 11:21 PM
|
||||
* @Description: 获取Retrofit实例
|
||||
*/
|
||||
object RetrofitFactory {
|
||||
private val sRpcServiceMap: MutableMap<String, Retrofit?> = ArrayMap()
|
||||
private val sRpcNoAdapterServiceMap: MutableMap<String, Retrofit?> = ArrayMap()
|
||||
|
||||
@Synchronized
|
||||
fun getInstance(baseUrl: String): Retrofit? {
|
||||
var target = sRpcServiceMap[baseUrl]
|
||||
if (target == null) {
|
||||
target = Retrofit.Builder()
|
||||
.client(OkHttpFactory.okHttpClient)
|
||||
.baseUrl(baseUrl)
|
||||
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
|
||||
.addConverterFactory(GsonConverterFactory.create())
|
||||
.build()
|
||||
sRpcServiceMap[baseUrl] = target
|
||||
}
|
||||
return target
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
fun getInstanceNoCallAdapter(baseUrl: String): Retrofit? {
|
||||
var target = sRpcNoAdapterServiceMap[baseUrl]
|
||||
if (target == null) {
|
||||
target = Retrofit.Builder()
|
||||
.client(OkHttpFactory.okHttpClient)
|
||||
.baseUrl(baseUrl)
|
||||
.addConverterFactory(GsonConverterFactory.create())
|
||||
.build()
|
||||
sRpcNoAdapterServiceMap[baseUrl] = target
|
||||
}
|
||||
return target
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
package com.mogo.cloud.network
|
||||
|
||||
import java.security.SecureRandom
|
||||
import java.security.cert.CertificateException
|
||||
import java.security.cert.X509Certificate
|
||||
import javax.net.ssl.*
|
||||
|
||||
/**
|
||||
* created by wujifei on 2021/1/26 12:51
|
||||
* describe:
|
||||
*/
|
||||
object SSLSocketFactoryUtils {
|
||||
/*
|
||||
* 默认信任所有的证书
|
||||
* 最好加上证书认证,主流App都有自己的证书
|
||||
* */
|
||||
private const val str = "TLS"
|
||||
fun createSSLSocketFactory(): SSLSocketFactory? {
|
||||
var sslSocketFactory: SSLSocketFactory? = null
|
||||
try {
|
||||
val sslContext = SSLContext.getInstance(str)
|
||||
sslContext.init(null, arrayOf<TrustManager?>(createTrustAllManager()), SecureRandom())
|
||||
sslSocketFactory = sslContext.socketFactory
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
return sslSocketFactory
|
||||
}
|
||||
|
||||
fun createTrustAllManager(): X509TrustManager? {
|
||||
var tm: X509TrustManager? = null
|
||||
try {
|
||||
tm = object : X509TrustManager {
|
||||
@Throws(CertificateException::class)
|
||||
override fun checkClientTrusted(chain: Array<X509Certificate>, authType: String) {
|
||||
//do nothing,接受任意客户端证书
|
||||
}
|
||||
|
||||
@Throws(CertificateException::class)
|
||||
override fun checkServerTrusted(chain: Array<X509Certificate>, authType: String) {
|
||||
//do nothing,接受任意服务端证书
|
||||
}
|
||||
|
||||
override fun getAcceptedIssuers(): Array<X509Certificate?> {
|
||||
return arrayOfNulls(0)
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
return tm
|
||||
}
|
||||
|
||||
class TrustAllHostnameVerifier : HostnameVerifier {
|
||||
override fun verify(hostname: String, session: SSLSession): Boolean {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.mogo.cloud.network.interceptor
|
||||
|
||||
import com.mogo.cloud.httpdns.MogoHttpDnsClient
|
||||
import com.mogo.utils.logger.Logger
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
import java.lang.Exception
|
||||
|
||||
/**
|
||||
* created by wujifei on 2021/1/27 15:57
|
||||
* describe:
|
||||
*/
|
||||
class HttpDnsInterceptor : Interceptor {
|
||||
override fun intercept(chain: Interceptor.Chain): Response {
|
||||
val request: Request = chain.request()
|
||||
var url = request.url().toString()
|
||||
val host = request.url().host()
|
||||
try {
|
||||
MogoHttpDnsClient.getHttpDnsAddressUseCacheIfNecessary(0, request.url().host())?.let {
|
||||
url = url.replace(host, it)
|
||||
Logger.d("DomainExchange", """oriHost: ${host} newHost: $it newUrl: $url""")
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Logger.d("DomainExchange", e.toString())
|
||||
}
|
||||
return chain.proceed(request.newBuilder().url(url).build())
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.mogo.cloud.network.interceptor
|
||||
|
||||
import com.mogo.cloud.passport.MoGoAiCloudClient
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.Response
|
||||
|
||||
/**
|
||||
* created by wujifei on 2021/1/20 15:18
|
||||
* describe:header携带信息
|
||||
*/
|
||||
class HttpHeaderInterceptor : Interceptor {
|
||||
override fun intercept(chain: Interceptor.Chain): Response {
|
||||
val original = chain.request()
|
||||
val request = original.newBuilder()
|
||||
.header("token", MoGoAiCloudClient.getInstance().aiCloudClientConfig.token)
|
||||
.method(original.method(), original.body())
|
||||
.build()
|
||||
return chain.proceed(request)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
package com.mogo.cloud.network.interceptor
|
||||
|
||||
import com.mogo.cloud.network.NetConstants.Companion.TAG
|
||||
import com.mogo.utils.logger.Logger
|
||||
import okhttp3.*
|
||||
import okio.Buffer
|
||||
import java.io.IOException
|
||||
import java.nio.charset.Charset
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
/**
|
||||
* created by wujifei on 2021/1/27 14:33
|
||||
* describe:网络日志拦截
|
||||
*/
|
||||
class HttpLoggingInterceptor : Interceptor {
|
||||
override fun intercept(chain: Interceptor.Chain): Response {
|
||||
val request = chain.request()
|
||||
val requestBody = request.body()
|
||||
val hasRequestBody = requestBody != null
|
||||
var protocol = Protocol.HTTP_1_1.toString()
|
||||
var body = "null"
|
||||
if (chain.connection() != null && chain.connection()!!.protocol() != null) {
|
||||
protocol = chain.connection()!!.protocol().toString()
|
||||
}
|
||||
|
||||
if (hasRequestBody) {
|
||||
try {
|
||||
val UTF8 = Charset.forName("UTF-8")
|
||||
val buffer = Buffer()
|
||||
requestBody?.writeTo(buffer)
|
||||
var charset = UTF8
|
||||
val contentType = requestBody?.contentType()
|
||||
if (contentType != null) {
|
||||
charset = contentType.charset(UTF8)
|
||||
}
|
||||
if (charset != null) {
|
||||
body = buffer.readString(charset)
|
||||
}
|
||||
} catch (e: IOException) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
|
||||
val logMsg = StringBuilder()
|
||||
.append("------> http request start").append("\r\n")
|
||||
.append(protocol).append(", ")
|
||||
.append(request.method()).append("\r\n")
|
||||
.append("Request Headers: {").append(request.headers().toString().replace("\n",", ")).append("}\r\n")
|
||||
.append("Url: ").append(request.url()).append("\r\n")
|
||||
.append("Content-Type: ").append(requestBody?.contentType()).append("\r\n")
|
||||
.append("Content-Length: ").append(requestBody?.contentLength()).append("\r\n")
|
||||
.append("Content-body: ").append(body).append("\r\n")
|
||||
.append("------> http request end").append("\r\n").append("\r\n")
|
||||
|
||||
|
||||
val startTime = System.nanoTime()
|
||||
val response = chain.proceed(chain.request())
|
||||
val endTime = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startTime)
|
||||
|
||||
val responseBody = response.body()
|
||||
var responseContent: String? = null
|
||||
var bodySize: String? = null
|
||||
var contentType: MediaType? = null
|
||||
var consumedResponse = false
|
||||
|
||||
if (responseBody != null) {
|
||||
val contentLength = responseBody.contentLength()
|
||||
bodySize = if (contentLength != -1L) "$contentLength-byte" else "unknown-length"
|
||||
contentType = responseBody.contentType()
|
||||
responseContent = responseBody.string()
|
||||
consumedResponse = true
|
||||
}
|
||||
|
||||
logMsg.append("------> http response start").append("\r\n")
|
||||
.append(response.code()).append(" ")
|
||||
.append(response.message()).append(" ")
|
||||
.append(response.protocol()).append(" ").append("\r\n")
|
||||
.append("Response Content: ").append(responseContent).append("\r\n")
|
||||
.append("Content-Type: ").append(contentType).append("\r\n")
|
||||
.append("Content-Length: ").append(bodySize).append("\r\n")
|
||||
.append("Time: (").append(endTime).append("ms)").append("\r\n")
|
||||
.append("------> http response end")
|
||||
Logger.d(TAG, logMsg.toString())
|
||||
return if (consumedResponse) response.newBuilder().body(ResponseBody.create(contentType, responseContent)).build() else response
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user