pull/1395/head
gedoor 3 years ago
parent 3675d1d6a3
commit d072090cae
  1. 2
      app/src/main/assets/web/bookSource/index.js
  2. 2
      app/src/main/assets/web/rssSource/index.js
  3. 14
      app/src/main/java/io/legado/app/web/WebSocketServer.kt
  4. 6
      app/src/main/java/io/legado/app/web/socket/BookSourceDebugWebSocket.kt
  5. 93
      app/src/main/java/io/legado/app/web/socket/RssSourceDebugWebSocket.kt

@ -353,7 +353,7 @@ $('.menu').addEventListener('click', e => {
if (sResult.isSuccess) { if (sResult.isSuccess) {
let sKey = DebugKey.value ? DebugKey.value : '我的'; let sKey = DebugKey.value ? DebugKey.value : '我的';
$('#DebugConsole').value = `源《${saveRule[0].bookSourceName}》保存成功!使用搜索关键字“${sKey}”开始调试...`; $('#DebugConsole').value = `源《${saveRule[0].bookSourceName}》保存成功!使用搜索关键字“${sKey}”开始调试...`;
let ws = new WebSocket(`${wsOrigin}/sourceDebug`); let ws = new WebSocket(`${wsOrigin}/bookSourceDebug`);
ws.onopen = () => { ws.onopen = () => {
ws.send(`{"tag":"${saveRule[0].bookSourceUrl}", "key":"${sKey}"}`); ws.send(`{"tag":"${saveRule[0].bookSourceUrl}", "key":"${sKey}"}`);
}; };

@ -240,7 +240,7 @@ $('.menu').addEventListener('click', e => {
if (sResult.isSuccess) { if (sResult.isSuccess) {
let sKey = DebugKey.value ? DebugKey.value : '我的'; let sKey = DebugKey.value ? DebugKey.value : '我的';
$('#DebugConsole').value = `源《${saveRule[0].sourceName}》保存成功!使用搜索关键字“${sKey}”开始调试...`; $('#DebugConsole').value = `源《${saveRule[0].sourceName}》保存成功!使用搜索关键字“${sKey}”开始调试...`;
let ws = new WebSocket(`${wsOrigin}/sourceDebug`); let ws = new WebSocket(`${wsOrigin}/rssSourceDebug`);
ws.onopen = () => { ws.onopen = () => {
ws.send(`{"tag":"${saveRule[0].sourceUrl}", "key":"${sKey}"}`); ws.send(`{"tag":"${saveRule[0].sourceUrl}", "key":"${sKey}"}`);
}; };

@ -1,12 +1,20 @@
package io.legado.app.web package io.legado.app.web
import fi.iki.elonen.NanoWSD import fi.iki.elonen.NanoWSD
import io.legado.app.web.socket.BookSourceDebugWebSocket
import io.legado.app.web.socket.RssSourceDebugWebSocket
class WebSocketServer(port: Int) : NanoWSD(port) { class WebSocketServer(port: Int) : NanoWSD(port) {
override fun openWebSocket(handshake: IHTTPSession): WebSocket? { override fun openWebSocket(handshake: IHTTPSession): WebSocket? {
return if (handshake.uri == "/sourceDebug") { return when (handshake.uri) {
SourceDebugWebSocket(handshake) "/bookSourceDebug" -> {
} else null BookSourceDebugWebSocket(handshake)
}
"/rssSourceDebug" -> {
RssSourceDebugWebSocket(handshake)
}
else -> null
}
} }
} }

@ -1,4 +1,4 @@
package io.legado.app.web package io.legado.app.web.socket
import fi.iki.elonen.NanoHTTPD import fi.iki.elonen.NanoHTTPD
@ -13,7 +13,7 @@ import splitties.init.appCtx
import java.io.IOException import java.io.IOException
class SourceDebugWebSocket(handshakeRequest: NanoHTTPD.IHTTPSession) : class BookSourceDebugWebSocket(handshakeRequest: NanoHTTPD.IHTTPSession) :
NanoWSD.WebSocket(handshakeRequest), NanoWSD.WebSocket(handshakeRequest),
CoroutineScope by MainScope(), CoroutineScope by MainScope(),
Debug.Callback { Debug.Callback {
@ -58,7 +58,7 @@ class SourceDebugWebSocket(handshakeRequest: NanoHTTPD.IHTTPSession) :
return@launch return@launch
} }
appDb.bookSourceDao.getBookSource(tag)?.let { appDb.bookSourceDao.getBookSource(tag)?.let {
Debug.callback = this@SourceDebugWebSocket Debug.callback = this@BookSourceDebugWebSocket
Debug.startDebug(this, it, key) Debug.startDebug(this, it, key)
} }
} }

@ -0,0 +1,93 @@
package io.legado.app.web.socket
import fi.iki.elonen.NanoHTTPD
import fi.iki.elonen.NanoWSD
import io.legado.app.R
import io.legado.app.data.appDb
import io.legado.app.model.Debug
import io.legado.app.utils.*
import kotlinx.coroutines.*
import kotlinx.coroutines.Dispatchers.IO
import splitties.init.appCtx
import java.io.IOException
class RssSourceDebugWebSocket(handshakeRequest: NanoHTTPD.IHTTPSession) :
NanoWSD.WebSocket(handshakeRequest),
CoroutineScope by MainScope(),
Debug.Callback {
private val notPrintState = arrayOf(10, 20, 30, 40)
override fun onOpen() {
launch(IO) {
kotlin.runCatching {
while (isOpen) {
ping("ping".toByteArray())
delay(30000)
}
}
}
}
override fun onClose(
code: NanoWSD.WebSocketFrame.CloseCode,
reason: String,
initiatedByRemote: Boolean
) {
cancel()
Debug.cancelDebug(true)
}
override fun onMessage(message: NanoWSD.WebSocketFrame) {
launch(IO) {
kotlin.runCatching {
if (!message.textPayload.isJson()) {
send("数据必须为Json格式")
close(NanoWSD.WebSocketFrame.CloseCode.NormalClosure, "调试结束", false)
return@launch
}
val debugBean = GSON.fromJsonObject<Map<String, String>>(message.textPayload)
if (debugBean != null) {
val tag = debugBean["tag"]
if (tag.isNullOrBlank()) {
send(appCtx.getString(R.string.cannot_empty))
close(NanoWSD.WebSocketFrame.CloseCode.NormalClosure, "调试结束", false)
return@launch
}
appDb.rssSourceDao.getByKey(tag)?.let {
Debug.callback = this@RssSourceDebugWebSocket
Debug.startDebug(this, it)
}
}
}
}
}
override fun onPong(pong: NanoWSD.WebSocketFrame) {
}
override fun onException(exception: IOException) {
Debug.cancelDebug(true)
}
override fun printLog(state: Int, msg: String) {
if (state in notPrintState) {
return
}
runOnIO {
runCatching {
send(msg)
if (state == -1 || state == 1000) {
Debug.cancelDebug(true)
close(NanoWSD.WebSocketFrame.CloseCode.NormalClosure, "调试结束", false)
}
}.onFailure {
it.printOnDebug()
}
}
}
}
Loading…
Cancel
Save