From 679b7619ce9167bf9acc5b5384ad36a6b6846587 Mon Sep 17 00:00:00 2001 From: WhiteChi Date: Sat, 25 Nov 2023 00:42:10 +0800 Subject: [PATCH] =?UTF-8?q?`Shamrock`:=20ws=E3=83=8F=E3=83=BC=E3=83=88?= =?UTF-8?q?=E3=83=93=E3=83=BC=E3=83=88=E9=96=93=E9=9A=94=E3=81=AE=E5=88=B6?= =?UTF-8?q?=E5=BE=A1=E3=82=92=E3=82=B5=E3=83=9D=E3=83=BC=E3=83=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../moe/fuqiuluo/shamrock/ui/fragment/LabFragment.kt | 1 - .../remote/service/WebSocketClientService.kt | 3 ++- .../shamrock/remote/service/WebSocketService.kt | 12 ++++++++---- .../remote/service/api/WebSocketClientServlet.kt | 9 +++++---- .../shamrock/remote/service/config/Config.kt | 1 + .../shamrock/xposed/actions/InitRemoteService.kt | 12 ++++++++---- 6 files changed, 24 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/moe/fuqiuluo/shamrock/ui/fragment/LabFragment.kt b/app/src/main/java/moe/fuqiuluo/shamrock/ui/fragment/LabFragment.kt index 288c719..fbc3570 100644 --- a/app/src/main/java/moe/fuqiuluo/shamrock/ui/fragment/LabFragment.kt +++ b/app/src/main/java/moe/fuqiuluo/shamrock/ui/fragment/LabFragment.kt @@ -158,7 +158,6 @@ fun LabFragment() { }.onFailure { AppRuntime.log("无法启用免死金牌选项,当前Lsposed模块未激活或者不支持NewSharedPreferences。", Level.WARN) } - } } diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/WebSocketClientService.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/WebSocketClientService.kt index 714b8df..75239fe 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/WebSocketClientService.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/WebSocketClientService.kt @@ -14,8 +14,9 @@ import moe.fuqiuluo.shamrock.remote.service.api.GlobalEventTransmitter internal class WebSocketClientService( override val address: String, + heartbeatInterval: Long, wsHeaders: Map -) : WebSocketClientServlet(address, wsHeaders) { +) : WebSocketClientServlet(address, heartbeatInterval, wsHeaders) { private val eventJobList = mutableSetOf() override fun submitFlowJob(job: Job) { diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/WebSocketService.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/WebSocketService.kt index 4558149..f64b147 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/WebSocketService.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/WebSocketService.kt @@ -21,7 +21,11 @@ import org.java_websocket.WebSocket import org.java_websocket.handshake.ClientHandshake import java.net.URI -internal class WebSocketService(host: String, port: Int): WebSocketTransmitServlet(host, port) { +internal class WebSocketService( + host: String, + port: Int, + val heartbeatInterval: Long, +): WebSocketTransmitServlet(host, port) { private val eventJobList = mutableSetOf() override fun submitFlowJob(job: Job) { @@ -81,9 +85,9 @@ internal class WebSocketService(host: String, port: Int): WebSocketTransmitServl } private fun pushMetaLifecycle() { + if (heartbeatInterval <= 0) return GlobalScope.launch { val runtime = AppRuntimeFetcher.appRuntime - val curUin = runtime.currentAccountUin pushTo(PushMetaEvent( time = System.currentTimeMillis() / 1000, selfId = app.longAccountUin, @@ -91,9 +95,9 @@ internal class WebSocketService(host: String, port: Int): WebSocketTransmitServl type = MetaEventType.LifeCycle, subType = MetaSubType.Connect, status = BotStatus( - Self("qq", curUin.toLong()), runtime.isLogin, status = "正常", good = true + Self("qq", runtime.longAccountUin), runtime.isLogin, status = "正常", good = true ), - interval = 15000 + interval = heartbeatInterval )) } } diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/api/WebSocketClientServlet.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/api/WebSocketClientServlet.kt index edcc15b..b71d9cb 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/api/WebSocketClientServlet.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/api/WebSocketClientServlet.kt @@ -36,6 +36,7 @@ import kotlin.concurrent.timer internal abstract class WebSocketClientServlet( url: String, + private val heartbeatInterval: Long, wsHeaders: Map ) : BaseTransmitServlet, WebSocketClient(URI(url), wsHeaders) { private val sendLock = Mutex() @@ -105,17 +106,17 @@ internal abstract class WebSocketClientServlet( } private fun startHeartbeatTimer() { + if (heartbeatInterval <= 0) return timer( name = "heartbeat", initialDelay = 0, - period = 1000L * 15, + period = heartbeatInterval, ) { if (isClosed || isClosing || !isOpen) { cancel() return@timer } val runtime = AppRuntimeFetcher.appRuntime - val curUin = runtime.currentAccountUin send( GlobalJson.encodeToString( PushMetaEvent( @@ -125,7 +126,7 @@ internal abstract class WebSocketClientServlet( type = MetaEventType.Heartbeat, subType = MetaSubType.Connect, status = BotStatus( - Self("qq", curUin.toLong()), + Self("qq", runtime.longAccountUin), runtime.isLogin, status = "正常", good = true @@ -151,7 +152,7 @@ internal abstract class WebSocketClientServlet( status = BotStatus( Self("qq", curUin.toLong()), runtime.isLogin, status = "正常", good = true ), - interval = 15000 + interval = heartbeatInterval ) ) } diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/config/Config.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/config/Config.kt index 28312ca..f6f6aa2 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/config/Config.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/config/Config.kt @@ -18,6 +18,7 @@ data class ConnectionConfig( @SerialName("address") val address: String? = null, @SerialName("port") var port: Int? = null, @SerialName("token") val token: String? = null, + @SerialName("heartbeat_interval") var heartbeatInterval: Long? = null, ) @Serializable diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/xposed/actions/InitRemoteService.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/xposed/actions/InitRemoteService.kt index 86f82bd..b0d4da8 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/xposed/actions/InitRemoteService.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/xposed/actions/InitRemoteService.kt @@ -61,7 +61,7 @@ internal class InitRemoteService : IAction { wsHeaders["authorization"] = "bearer $token" } LogCenter.log("尝试链接WebSocketClient(url = ${conn.address})",Level.WARN) - startWebSocketClient(conn.address, wsHeaders) + startWebSocketClient(conn.address, conn.heartbeatInterval ?: 15000, wsHeaders) } } } @@ -80,7 +80,7 @@ internal class InitRemoteService : IAction { return@launch } require(config.port in 0 .. 65536) { "WebSocketServer端口不合法" } - val server = WebSocketService(config.address, config.port!!) + val server = WebSocketService(config.address, config.port!!, config.heartbeatInterval ?: (15 * 1000)) server.isReuseAddr = true server.start() } catch (e: Throwable) { @@ -89,11 +89,15 @@ internal class InitRemoteService : IAction { } } - private fun startWebSocketClient(url: String, wsHeaders: HashMap) { + private fun startWebSocketClient( + url: String, + interval: Long, + wsHeaders: HashMap + ) { GlobalScope.launch { try { if (url.startsWith("ws://") || url.startsWith("wss://")) { - val wsClient = WebSocketClientService(url, wsHeaders) + val wsClient = WebSocketClientService(url, interval, wsHeaders) wsClient.connect() timer(initialDelay = 5000L, period = 5000L) { if (wsClient.isClosed || wsClient.isClosing) {