Committed by
GitHub
WS failure reason (#2)
* validate on failure * get validation body * extra super call * remove extra import * revert bytecodeTarget
正在显示
1 个修改的文件
包含
27 行增加
和
10 行删除
| @@ -11,10 +11,7 @@ import kotlinx.serialization.encodeToString | @@ -11,10 +11,7 @@ import kotlinx.serialization.encodeToString | ||
| 11 | import kotlinx.serialization.json.Json | 11 | import kotlinx.serialization.json.Json |
| 12 | import livekit.LivekitModels | 12 | import livekit.LivekitModels |
| 13 | import livekit.LivekitRtc | 13 | import livekit.LivekitRtc |
| 14 | -import okhttp3.Request | ||
| 15 | -import okhttp3.Response | ||
| 16 | -import okhttp3.WebSocket | ||
| 17 | -import okhttp3.WebSocketListener | 14 | +import okhttp3.* |
| 18 | import okio.ByteString | 15 | import okio.ByteString |
| 19 | import okio.ByteString.Companion.toByteString | 16 | import okio.ByteString.Companion.toByteString |
| 20 | import org.webrtc.IceCandidate | 17 | import org.webrtc.IceCandidate |
| @@ -42,6 +39,7 @@ constructor( | @@ -42,6 +39,7 @@ constructor( | ||
| 42 | private var currentWs: WebSocket? = null | 39 | private var currentWs: WebSocket? = null |
| 43 | private var isReconnecting: Boolean = false | 40 | private var isReconnecting: Boolean = false |
| 44 | var listener: Listener? = null | 41 | var listener: Listener? = null |
| 42 | + private var lastUrl: String? = null | ||
| 45 | 43 | ||
| 46 | fun join( | 44 | fun join( |
| 47 | url: String, | 45 | url: String, |
| @@ -67,6 +65,7 @@ constructor( | @@ -67,6 +65,7 @@ constructor( | ||
| 67 | 65 | ||
| 68 | isConnected = false | 66 | isConnected = false |
| 69 | currentWs?.cancel() | 67 | currentWs?.cancel() |
| 68 | + lastUrl = wsUrlString | ||
| 70 | 69 | ||
| 71 | val request = Request.Builder() | 70 | val request = Request.Builder() |
| 72 | .url(wsUrlString) | 71 | .url(wsUrlString) |
| @@ -76,8 +75,6 @@ constructor( | @@ -76,8 +75,6 @@ constructor( | ||
| 76 | 75 | ||
| 77 | //--------------------------------- WebSocket Listener --------------------------------------// | 76 | //--------------------------------- WebSocket Listener --------------------------------------// |
| 78 | override fun onOpen(webSocket: WebSocket, response: Response) { | 77 | override fun onOpen(webSocket: WebSocket, response: Response) { |
| 79 | - super.onOpen(webSocket, response) | ||
| 80 | - | ||
| 81 | if (isReconnecting) { | 78 | if (isReconnecting) { |
| 82 | isReconnecting = false | 79 | isReconnecting = false |
| 83 | isConnected = true | 80 | isConnected = true |
| @@ -105,18 +102,38 @@ constructor( | @@ -105,18 +102,38 @@ constructor( | ||
| 105 | 102 | ||
| 106 | override fun onClosed(webSocket: WebSocket, code: Int, reason: String) { | 103 | override fun onClosed(webSocket: WebSocket, code: Int, reason: String) { |
| 107 | Timber.v { "websocket closed" } | 104 | Timber.v { "websocket closed" } |
| 108 | - super.onClosed(webSocket, code, reason) | 105 | + |
| 106 | + listener?.onClose(reason, code) | ||
| 109 | } | 107 | } |
| 110 | 108 | ||
| 111 | override fun onClosing(webSocket: WebSocket, code: Int, reason: String) { | 109 | override fun onClosing(webSocket: WebSocket, code: Int, reason: String) { |
| 112 | Timber.v { "websocket closing" } | 110 | Timber.v { "websocket closing" } |
| 113 | - super.onClosing(webSocket, code, reason) | ||
| 114 | } | 111 | } |
| 115 | 112 | ||
| 116 | override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) { | 113 | override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) { |
| 117 | - Timber.v(t) { "websocket failure: $response" } | 114 | + var reason: String? = null |
| 115 | + try { | ||
| 116 | + lastUrl?.let { | ||
| 117 | + val validationUrl = "http" + it. | ||
| 118 | + substring(2). | ||
| 119 | + replaceFirst("/rtc?", "/rtc/validate?") | ||
| 120 | + val request = Request.Builder().url(validationUrl).build() | ||
| 121 | + val resp = OkHttpClient().newCall(request).execute() | ||
| 122 | + if (!resp.isSuccessful) { | ||
| 123 | + reason = resp.body?.string() | ||
| 124 | + } | ||
| 125 | + } | ||
| 126 | + } catch (e: Throwable) { | ||
| 127 | + Timber.e(e) { "failed to validate connection" } | ||
| 128 | + } | ||
| 118 | 129 | ||
| 119 | - super.onFailure(webSocket, t, response) | 130 | + if (reason != null) { |
| 131 | + Timber.e(t) { "websocket failure: $reason" } | ||
| 132 | + listener?.onError(Exception(reason)) | ||
| 133 | + } else { | ||
| 134 | + Timber.e(t) { "websocket failure: $response" } | ||
| 135 | + listener?.onError(t as Exception) | ||
| 136 | + } | ||
| 120 | } | 137 | } |
| 121 | 138 | ||
| 122 | //------------------------------- End WebSocket Listener ------------------------------------// | 139 | //------------------------------- End WebSocket Listener ------------------------------------// |
-
请 注册 或 登录 后发表评论