Commit 924fa65f authored by jiahua.liu's avatar jiahua.liu

terminal console closable

parent 7357c65e
...@@ -12,7 +12,7 @@ class MiraiConsoleTerminalLoader { ...@@ -12,7 +12,7 @@ class MiraiConsoleTerminalLoader {
).toLowerCase().contains("windows") ).toLowerCase().contains("windows")
) { ) {
println("[MiraiConsoleTerminalLoader]: 将以Pure[兼容模式]启动Console") println("[MiraiConsoleTerminalLoader]: 将以Pure[兼容模式]启动Console")
MiraiConsole.start(MiraiConsoleUIPure) MiraiConsole.start(MiraiConsoleUIPure())
} else { } else {
MiraiConsoleTerminalUI.start() MiraiConsoleTerminalUI.start()
thread { thread {
......
...@@ -643,7 +643,7 @@ object MiraiConsoleTerminalUI : MiraiConsoleUI { ...@@ -643,7 +643,7 @@ object MiraiConsoleTerminalUI : MiraiConsoleUI {
terminal.close() terminal.close()
exitProcess(0) exitProcess(0)
} catch (ignored: Exception) { } catch (ignored: Exception) {
exitProcess(0)
} }
} }
} }
......
...@@ -7,7 +7,6 @@ plugins { ...@@ -7,7 +7,6 @@ plugins {
apply(plugin = "com.github.johnrengelman.shadow") apply(plugin = "com.github.johnrengelman.shadow")
val kotlinVersion: String by rootProject.ext val kotlinVersion: String by rootProject.ext
val atomicFuVersion: String by rootProject.ext val atomicFuVersion: String by rootProject.ext
val coroutinesVersion: String by rootProject.ext val coroutinesVersion: String by rootProject.ext
...@@ -25,7 +24,7 @@ fun ktor(id: String, version: String) = "io.ktor:ktor-$id:$version" ...@@ -25,7 +24,7 @@ fun ktor(id: String, version: String) = "io.ktor:ktor-$id:$version"
tasks.withType<com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar>() { tasks.withType<com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar>() {
manifest { manifest {
attributes["Main-Class"] = "net.mamoe.mirai.console.MiraiConsoleUIPureLoader" attributes["Main-Class"] = "net.mamoe.mirai.console.MiraiConsolePureLoader"
} }
} }
......
...@@ -83,8 +83,12 @@ object MiraiConsole { ...@@ -83,8 +83,12 @@ object MiraiConsole {
fun stop() { fun stop() {
PluginManager.disableAllPlugins() PluginManager.disableAllPlugins()
allDown = true allDown = true
bots.forEach { try {
it.get()?.close() bots.forEach {
it.get()?.close()
}
} catch (ignored: Exception) {
} }
} }
......
package net.mamoe.mirai.console package net.mamoe.mirai.console
import kotlinx.coroutines.delay
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.utils.DefaultLoginSolver import net.mamoe.mirai.utils.DefaultLoginSolver
import net.mamoe.mirai.utils.LoginSolver import net.mamoe.mirai.utils.LoginSolver
import kotlin.concurrent.thread import kotlin.concurrent.thread
object MiraiConsoleUIPure : MiraiConsoleUI { class MiraiConsoleUIPure() : MiraiConsoleUI {
var requesting = false
var requestStr = ""
init {
thread {
while (true) {
val input = readLine() ?: ""
if (requesting) {
requestStr = input
requesting = false
} else {
MiraiConsole.CommandListener.commandChannel.offer(input)
}
}
}
}
override fun pushLog(identity: Long, message: String) { override fun pushLog(identity: Long, message: String) {
println(message) println(message)
} }
...@@ -23,7 +41,13 @@ object MiraiConsoleUIPure : MiraiConsoleUI { ...@@ -23,7 +41,13 @@ object MiraiConsoleUIPure : MiraiConsoleUI {
} }
override suspend fun requestInput(question: String): String { override suspend fun requestInput(question: String): String {
return readLine() ?: "" requesting = true
while (true) {
delay(50)
if (!requesting) {
return requestStr
}
}
} }
override fun pushBotAdminStatus(identity: Long, admins: List<Long>) { override fun pushBotAdminStatus(identity: Long, admins: List<Long>) {
...@@ -41,7 +65,7 @@ class MiraiConsolePureLoader { ...@@ -41,7 +65,7 @@ class MiraiConsolePureLoader {
companion object { companion object {
@JvmStatic @JvmStatic
fun main(args: Array<String>) { fun main(args: Array<String>) {
MiraiConsole.start(MiraiConsoleUIPure) MiraiConsole.start(MiraiConsoleUIPure())
Runtime.getRuntime().addShutdownHook(thread(start = false) { Runtime.getRuntime().addShutdownHook(thread(start = false) {
MiraiConsole.stop() MiraiConsole.stop()
}) })
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment