SubwayTooter-Android-App/app/src/main/java/jp/juggler/subwaytooter/util/SimpleHttpClient.kt

59 lines
1.5 KiB
Kotlin
Raw Normal View History

2018-01-12 10:01:25 +01:00
package jp.juggler.subwaytooter.util
import android.content.Context
2018-09-30 17:00:28 +02:00
import jp.juggler.subwaytooter.App1
import jp.juggler.util.log.LogCategory
import okhttp3.*
import ru.gildor.coroutines.okhttp.await
2018-01-12 10:01:25 +01:00
/**
* okhttpClientをラップしたクラス
* - モック用途
* - onCallCreated ラムダ
* - networkTracker.checkNetworkState
*/
interface SimpleHttpClient {
var onCallCreated: (Call) -> Unit
suspend fun getResponse(
request: Request,
overrideClient: OkHttpClient? = null,
): Response
fun getWebSocket(
request: Request,
webSocketListener: WebSocketListener,
): WebSocket
2018-01-12 10:01:25 +01:00
}
class SimpleHttpClientImpl(
val context: Context,
private val okHttpClient: OkHttpClient,
) : SimpleHttpClient {
companion object {
val log = LogCategory("SimpleHttpClientImpl")
}
override var onCallCreated: (Call) -> Unit = {}
override suspend fun getResponse(
request: Request,
overrideClient: OkHttpClient?,
): Response {
App1.getAppState(context).networkTracker.checkNetworkState()
val call = (overrideClient ?: this.okHttpClient).newCall(request)
onCallCreated(call)
return call.await()
}
override fun getWebSocket(
request: Request,
webSocketListener: WebSocketListener,
): WebSocket {
App1.getAppState(context).networkTracker.checkNetworkState()
return okHttpClient.newWebSocket(request, webSocketListener)
}
2018-01-12 10:01:25 +01:00
}