Commit a8039e5e authored by Him188's avatar Him188

Make addHandler suspend

parent e05ad6cf
......@@ -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)
}
......
......@@ -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) }
......
......@@ -62,7 +62,7 @@ interface BotNetworkHandler {
*
* @see [TemporaryPacketHandler]
*/
fun addHandler(temporaryPacketHandler: TemporaryPacketHandler<*>)
suspend fun addHandler(temporaryPacketHandler: TemporaryPacketHandler<*>)
fun close()
}
\ No newline at end of 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)
......
......@@ -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)
}
......
......@@ -21,7 +21,7 @@ import kotlin.system.exitProcess
*/
suspend fun main() {
val bot = Bot(BotAccount(//填写你的账号
qqNumber = 1994701021,
qqNumber = 1994701121,
password = "xiaoqqq"
), Console())
......
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