package agzam.vyatsu.data.remote import android.util.Log import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import okhttp3.OkHttpClient import okhttp3.Request import java.io.InputStream import java.util.concurrent.TimeUnit /** * @author Agzam */ object VyatsuHttpClient { private const val TAG = "HTTP" private val client: OkHttpClient = OkHttpClient.Builder() .connectTimeout(15, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS) .build() suspend fun getText(url: String): String = withContext(Dispatchers.IO) { client.newCall(Request.Builder().url(url).build()).execute().use { resp -> if (!resp.isSuccessful) Log.e(TAG, "GET $url -> HTTP ${resp.code}") check(resp.isSuccessful) { "HTTP ${resp.code} for $url" } resp.body!!.string() } } suspend fun getBytes(url: String): ByteArray = withContext(Dispatchers.IO) { client.newCall(Request.Builder().url(url).build()).execute().use { resp -> if (!resp.isSuccessful) Log.e(TAG, "GET $url -> HTTP ${resp.code}") check(resp.isSuccessful) { "HTTP ${resp.code} for $url" } resp.body!!.bytes() } } /** * Открывает потоковое тело ответа. Вызывающий обязан закрыть * возвращённый [InputStream], чтобы вернуть соединение в пул. */ suspend fun openStream(url: String): InputStream = withContext(Dispatchers.IO) { val resp = client.newCall(Request.Builder().url(url).build()).execute() if (!resp.isSuccessful) Log.e(TAG, "GET $url -> HTTP ${resp.code}") check(resp.isSuccessful) { "HTTP ${resp.code} for $url" } resp.body!!.byteStream() } }