package com.xw.common.net import com.xw.common.Constants.gson import com.xw.common.net.interceptor.HeaderInterceptor import com.xw.common.net.interceptor.LoggingInterceptor import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.Interceptor import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.OkHttpClient import okhttp3.RequestBody import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory import retrofit2.converter.scalars.ScalarsConverterFactory import java.util.concurrent.TimeUnit class BaseHttpManager private constructor() { companion object { @Volatile private var instance: BaseHttpManager? = null fun getInstance(): BaseHttpManager { return instance ?: synchronized(this) { instance ?: BaseHttpManager().also { instance = it } } } fun getBody(map: Map): RequestBody { return RequestBody.create( "application/json; charset=utf-8".toMediaTypeOrNull(), gson.toJson(map) ) } } fun create( baseUrl: String, c: Class, interceptor: Interceptor = HeaderInterceptor() ): T { return Retrofit.Builder() .baseUrl(baseUrl.toHttpUrl()) .client(provideOKHttpClient(interceptor)) .addConverterFactory(ScalarsConverterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .build() .create(c) } private fun provideOKHttpClient(interceptor: Interceptor): OkHttpClient { val builder = OkHttpClient.Builder() .connectTimeout(30, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS) .writeTimeout(30, TimeUnit.SECONDS) .retryOnConnectionFailure(true) .addInterceptor(interceptor) .addInterceptor(LoggingInterceptor()) return builder.build() } }