This commit is contained in:
Horis 2024-01-17 12:16:18 +08:00
parent 4b658ad46c
commit 8b5df3d54d
3 changed files with 16 additions and 11 deletions

View File

@ -91,7 +91,7 @@ abstract class AbsCallBack(
return
}
if (mCall.isCanceled()) {
onError(IOException("Request Canceled"))
onError(IOException("Cronet Request Canceled"))
request.cancel()
return
}
@ -122,13 +122,6 @@ abstract class AbsCallBack(
override fun onResponseStarted(request: UrlRequest, info: UrlResponseInfo) {
this.request = request
cancelJob = Coroutine.async {
while (!mCall.isCanceled()) {
delay(1000)
}
request.cancel()
}
val response: Response
try {
response = toResponse(originalRequest, info, urlResponseInfoChain, CronetBodySource())
@ -184,6 +177,7 @@ abstract class AbsCallBack(
//UrlResponseInfo可能为null
override fun onFailed(request: UrlRequest, info: UrlResponseInfo?, error: CronetException) {
callbackResults.add(CallbackResult(CallbackStep.ON_FAILED, null, error))
cancelJob?.cancel()
DebugLog.e(javaClass.name, error.message.toString())
onError(error.asIOException())
eventListener?.callFailed(mCall, error)
@ -203,11 +197,20 @@ abstract class AbsCallBack(
}
canceled.set(true)
callbackResults.add(CallbackResult(CallbackStep.ON_CANCELED))
cancelJob?.cancel()
//DebugLog.i(javaClass.simpleName, "cancel[${info?.negotiatedProtocol}]${info?.url}")
eventListener?.callEnd(mCall)
//onError(IOException("Cronet Request Canceled"))
onError(IOException("Cronet Request Canceled"))
}
fun startCheckCancelJob(request: UrlRequest) {
cancelJob = Coroutine.async {
while (!mCall.isCanceled()) {
delay(1000)
}
request.cancel()
}
}
init {
mResponse = Response.Builder()
@ -431,7 +434,7 @@ abstract class AbsCallBack(
@Suppress("NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS")
override fun read(sink: Buffer, byteCount: Long): Long {
if (canceled.get()) {
throw IOException("Request Canceled")
throw IOException("Cronet Request Canceled")
}
require(byteCount >= 0L) { "byteCount < 0: $byteCount" }
@ -450,7 +453,7 @@ abstract class AbsCallBack(
val result = callbackResults.poll(timeout, TimeUnit.MILLISECONDS)
if (result == null) {
request?.cancel()
throw IOException("Body Read Timeout")
throw IOException("Cronet request body read timeout after wait $timeout ms")
}
return when (result.callbackStep) {

View File

@ -23,6 +23,7 @@ class NewCallBack(originalRequest: Request, mCall: Call, readTimeoutMillis: Int)
@Throws(IOException::class)
override fun waitForDone(urlRequest: UrlRequest): Response {
urlRequest.start()
startCheckCancelJob(urlRequest)
//DebugLog.i(javaClass.simpleName, "start ${originalRequest.method} ${originalRequest.url}")
return if (mCall.timeout().timeoutNanos() > 0) {
responseFuture.get(mCall.timeout().timeoutNanos(), TimeUnit.NANOSECONDS)

View File

@ -20,6 +20,7 @@ class OldCallback(originalRequest: Request, mCall: Call, readTimeoutMillis: Int)
//获取okhttp call的完整请求的超时时间
val timeOutMs: Long = mCall.timeout().timeoutNanos() / 1000000
urlRequest.start()
startCheckCancelJob(urlRequest)
if (timeOutMs > 0) {
mResponseCondition.block(timeOutMs)
} else {