1
0
mirror of https://github.com/mamoe/mirai.git synced 2025-04-25 04:50:26 +08:00

Make addHandler suspend

This commit is contained in:
Him188 2019-10-07 13:11:28 +08:00
parent e05ad6cf6a
commit a8039e5e1f
6 changed files with 9 additions and 12 deletions
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai
mirai-demos/mirai-demo-1/src/main/java/demo1

View File

@ -7,7 +7,6 @@ import net.mamoe.mirai.message.defaults.MessageChain
import net.mamoe.mirai.message.defaults.PlainText
import net.mamoe.mirai.message.defaults.UnsolvedImage
import net.mamoe.mirai.network.LoginSession
import java.util.concurrent.CompletableFuture
/**
* 联系人.
@ -25,7 +24,7 @@ abstract class Contact internal constructor(val bot: Bot, val number: Long) {
/**
* 上传图片
*/
fun uploadImage(session: LoginSession, image: UnsolvedImage): CompletableDeferred<Unit> {
suspend fun uploadImage(session: LoginSession, image: UnsolvedImage): CompletableDeferred<Unit> {
return image.upload(session, this)
}

View File

@ -16,7 +16,6 @@ import net.mamoe.mirai.utils.toUHexString
import java.awt.image.BufferedImage
import java.io.File
import java.net.URL
import java.util.concurrent.CompletableFuture
import javax.imageio.ImageIO
/**
@ -29,7 +28,8 @@ import javax.imageio.ImageIO
class UnsolvedImage(filename: String, val image: BufferedImage) : Image(getImageId(filename)) {
constructor(imageFile: File) : this(imageFile.name, ImageIO.read(imageFile))
constructor(url: URL) : this(File(url.file))
fun upload(session: LoginSession, contact: Contact): CompletableDeferred<Unit> {
suspend fun upload(session: LoginSession, contact: Contact): CompletableDeferred<Unit> {
return session.expectPacket<ServerTryGetImageIDResponsePacket> {
toSend { ClientTryGetImageIDPacket(session.bot.account.qqNumber, session.sessionKey, contact.number, image) }

View File

@ -62,7 +62,7 @@ interface BotNetworkHandler {
*
* @see [TemporaryPacketHandler]
*/
fun addHandler(temporaryPacketHandler: TemporaryPacketHandler<*>)
suspend fun addHandler(temporaryPacketHandler: TemporaryPacketHandler<*>)
fun close()
}

View File

@ -58,7 +58,7 @@ class LoginSession(
* @return future. 可进行超时处理
*/
@JvmSynthetic
inline fun <reified P : ServerPacket> expectPacket(handlerTemporary: TemporaryPacketHandler<P>.() -> Unit): CompletableDeferred<Unit> {
suspend inline fun <reified P : ServerPacket> expectPacket(handlerTemporary: TemporaryPacketHandler<P>.() -> Unit): CompletableDeferred<Unit> {
val deferred = CompletableDeferred<Unit>()
this.bot.network.addHandler(TemporaryPacketHandler(P::class, deferred, this).also(handlerTemporary))
return deferred
@ -82,7 +82,7 @@ class LoginSession(
* @return future. 可进行超时处理
*/
@JvmSynthetic
inline fun <reified P : ServerPacket> expectPacket(toSend: ClientPacket, noinline handler: suspend (P) -> Unit): CompletableDeferred<Unit> {
suspend inline fun <reified P : ServerPacket> expectPacket(toSend: ClientPacket, noinline handler: suspend (P) -> Unit): CompletableDeferred<Unit> {
val deferred = CompletableDeferred<Unit>()
this.bot.network.addHandler(TemporaryPacketHandler(P::class, deferred, this).also {
it.toSend(toSend)

View File

@ -46,10 +46,8 @@ internal class TIMBotNetworkHandler(private val bot: Bot) : BotNetworkHandler {
internal val temporaryPacketHandlers = Collections.synchronizedList(mutableListOf<TemporaryPacketHandler<*>>())
override fun addHandler(temporaryPacketHandler: TemporaryPacketHandler<*>) {
runBlocking {
temporaryPacketHandler.send(action.session)
}
override suspend fun addHandler(temporaryPacketHandler: TemporaryPacketHandler<*>) {
temporaryPacketHandler.send(action.session)
temporaryPacketHandlers.add(temporaryPacketHandler)
}

View File

@ -21,7 +21,7 @@ import kotlin.system.exitProcess
*/
suspend fun main() {
val bot = Bot(BotAccount(//填写你的账号
qqNumber = 1994701021,
qqNumber = 1994701121,
password = "xiaoqqq"
), Console())