Skip to content

Commit 764a9f0

Browse files
author
near
committed
wsClient reConnect
1 parent d592f70 commit 764a9f0

File tree

1 file changed

+18
-14
lines changed

1 file changed

+18
-14
lines changed

src/main/kotlin/net/lz1998/mirai/entity/WebSocketBotClient.kt

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import net.lz1998.mirai.alias.BFrameType
99
import net.lz1998.mirai.ext.*
1010
import net.lz1998.mirai.service.MyLoginSolver
1111
import net.lz1998.mirai.utils.*
12-
import net.lz1998.mirai.utils.toFrame
1312
import net.mamoe.mirai.Bot
1413
import net.mamoe.mirai.alsoLogin
1514
import net.mamoe.mirai.event.events.BotEvent
@@ -27,8 +26,9 @@ class WebsocketBotClient(override var botId: Long, override var password: String
2726
override lateinit var bot: Bot
2827

2928

30-
private var lastWsConnectTime: Long = 0
31-
private lateinit var wsClient: WebSocket
29+
// private var lastWsConnectTime: Long = 0
30+
31+
private var wsClient: WebSocket? = null
3232
private var httpClient: OkHttpClient = OkHttpClient.Builder()
3333
.callTimeout(20, TimeUnit.SECONDS)
3434
.connectTimeout(20, TimeUnit.SECONDS)
@@ -47,11 +47,10 @@ class WebsocketBotClient(override var botId: Long, override var password: String
4747
GlobalScope.launch {
4848
val req = withContext(Dispatchers.IO) { BFrame.parseFrom(bytes.toByteArray()) }
4949
val resp = onRemoteApi(req)
50-
val ok = wsClient.send(resp.toByteArray().toByteString())
51-
if (!ok) {
50+
val ok = wsClient?.send(resp.toByteArray().toByteString())
51+
if (!ok!!) {
5252
wsConnect()
5353
}
54-
5554
}
5655
super.onMessage(webSocket, bytes)
5756
}
@@ -63,16 +62,19 @@ class WebsocketBotClient(override var botId: Long, override var password: String
6362

6463
override fun onClosed(webSocket: WebSocket, code: Int, reason: String) {
6564
println("websocket 已关闭")
65+
wsClient = null
6666
super.onClosed(webSocket, code, reason)
6767
}
6868

6969
override fun onClosing(webSocket: WebSocket, code: Int, reason: String) {
7070
println("websocket正在关闭 $reason")
71+
wsClient = null
7172
super.onClosing(webSocket, code, reason)
7273
}
7374

7475
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
7576
println("websocket失败${t.message}")
77+
wsClient = null
7678
t.printStackTrace()
7779
wsConnect()
7880
super.onFailure(webSocket, t, response)
@@ -82,16 +84,18 @@ class WebsocketBotClient(override var botId: Long, override var password: String
8284

8385
@Synchronized
8486
fun wsConnect() {
85-
val now = System.currentTimeMillis()
86-
if (now - lastWsConnectTime > 5000L) {
87+
if (wsClient == null) {
8788
println("ws try connect")
8889
wsClient = httpClient.newWebSocket(wsRequest, wsListener)
89-
lastWsConnectTime = now
90-
} else {
91-
println("wait ws reconnect interval 5s")
9290
}
93-
}
91+
// val now = System.currentTimeMillis()
92+
// if (now - lastWsConnectTime > 5000L) {
9493

94+
// lastWsConnectTime = now
95+
// } else {
96+
// println("wait ws reconnect interval 5s")
97+
// }
98+
}
9599

96100
override suspend fun initBot() {
97101
wsClient = httpClient.newWebSocket(wsRequest, wsListener)
@@ -156,8 +160,8 @@ class WebsocketBotClient(override var botId: Long, override var password: String
156160
override suspend fun onBotEvent(botEvent: BotEvent) {
157161
val eventFrame = botEvent.toFrame() ?: return
158162
// TODO 写二进制还是json?配置
159-
val ok = wsClient.send(eventFrame.toByteArray().toByteString())
160-
if (!ok) {
163+
val ok = wsClient?.send(eventFrame.toByteArray().toByteString())
164+
if (!ok!!) {
161165
wsConnect()
162166
}
163167
}

0 commit comments

Comments
 (0)