|
@@ -2,17 +2,16 @@ package com.pan_american.android.data.network
|
|
|
|
|
|
|
|
import com.google.gson.Gson
|
|
import com.google.gson.Gson
|
|
|
import com.pan_american.android.OASystem
|
|
import com.pan_american.android.OASystem
|
|
|
|
|
+import okhttp3.Call
|
|
|
import okhttp3.MediaType.Companion.toMediaType
|
|
import okhttp3.MediaType.Companion.toMediaType
|
|
|
-import okhttp3.RequestBody
|
|
|
|
|
import okhttp3.Request
|
|
import okhttp3.Request
|
|
|
|
|
+import okhttp3.RequestBody
|
|
|
import okhttp3.RequestBody.Companion.toRequestBody
|
|
import okhttp3.RequestBody.Companion.toRequestBody
|
|
|
-import okhttp3.Call
|
|
|
|
|
-import okhttp3.Callback
|
|
|
|
|
import okhttp3.Response
|
|
import okhttp3.Response
|
|
|
-import java.io.IOException
|
|
|
|
|
import okhttp3.sse.EventSource
|
|
import okhttp3.sse.EventSource
|
|
|
import okhttp3.sse.EventSourceListener
|
|
import okhttp3.sse.EventSourceListener
|
|
|
import okhttp3.sse.EventSources
|
|
import okhttp3.sse.EventSources
|
|
|
|
|
+import java.io.IOException
|
|
|
import kotlin.concurrent.thread
|
|
import kotlin.concurrent.thread
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -61,25 +60,25 @@ object SseService {
|
|
|
/**
|
|
/**
|
|
|
* GET 的 SSE 连接(参数需要调用方自行拼到 path/query 中)。
|
|
* GET 的 SSE 连接(参数需要调用方自行拼到 path/query 中)。
|
|
|
*/
|
|
*/
|
|
|
- fun connectGet(
|
|
|
|
|
- pathWithQuery: String,
|
|
|
|
|
- listener: EventSourceListener,
|
|
|
|
|
- addAuthHeader: Boolean = true
|
|
|
|
|
- ): EventSource {
|
|
|
|
|
- val url = ServiceCreator.baseUrl().trimEnd('/') + pathWithQuery
|
|
|
|
|
- val request = Request.Builder()
|
|
|
|
|
- .url(url)
|
|
|
|
|
- .get()
|
|
|
|
|
- .header("Accept", "text/event-stream")
|
|
|
|
|
- .apply {
|
|
|
|
|
- if (addAuthHeader && OASystem.token.isNotBlank()) {
|
|
|
|
|
- header("Authorization", OASystem.token)
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- .build()
|
|
|
|
|
-
|
|
|
|
|
- return factory.newEventSource(request, listener)
|
|
|
|
|
- }
|
|
|
|
|
|
|
+// fun connectGet(
|
|
|
|
|
+// pathWithQuery: String,
|
|
|
|
|
+// listener: EventSourceListener,
|
|
|
|
|
+// addAuthHeader: Boolean = true
|
|
|
|
|
+// ): EventSource {
|
|
|
|
|
+// val url = ServiceCreator.baseUrl().trimEnd('/') + pathWithQuery
|
|
|
|
|
+// val request = Request.Builder()
|
|
|
|
|
+// .url(url)
|
|
|
|
|
+// .get()
|
|
|
|
|
+// .header("Accept", "text/event-stream")
|
|
|
|
|
+// .apply {
|
|
|
|
|
+// if (addAuthHeader && OASystem.token.isNotBlank()) {
|
|
|
|
|
+// header("Authorization", OASystem.token)
|
|
|
|
|
+// }
|
|
|
|
|
+// }
|
|
|
|
|
+// .build()
|
|
|
|
|
+//
|
|
|
|
|
+// return factory.newEventSource(request, listener)
|
|
|
|
|
+// }
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* POST + JSON 的 NDJSON 流式接口(Content-Type: application/x-ndjson)。
|
|
* POST + JSON 的 NDJSON 流式接口(Content-Type: application/x-ndjson)。
|
|
@@ -120,10 +119,7 @@ object SseService {
|
|
|
var resp: Response? = null
|
|
var resp: Response? = null
|
|
|
try {
|
|
try {
|
|
|
resp = call.execute()
|
|
resp = call.execute()
|
|
|
- val bodyStream = resp.body ?: run {
|
|
|
|
|
- onFailure(IllegalStateException("Empty body"), resp)
|
|
|
|
|
- return@thread
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ val bodyStream = resp.body
|
|
|
val source = bodyStream.source()
|
|
val source = bodyStream.source()
|
|
|
while (!call.isCanceled()) {
|
|
while (!call.isCanceled()) {
|
|
|
val line = source.readUtf8Line() ?: break
|
|
val line = source.readUtf8Line() ?: break
|